Gitlab迁移(Docker版)
起因
公司的gitlab之前一直是安装在阿里云上的,考虑到隐私因素和安全性,准备迁移到本地的内网服务器内。而且容器化现在的流行和一些好的特性,准备这次用docker来部署gitlab。
分析
之前的gitlab用的一键安装包,数据库是postgresql
规划
启动三个docker容器
一个容器运行gitlab
一个容器运行postgresql,然后 link到gitlab上。
一个容器运行Redis,然后 link到gitlab上。
docker的安装的话这里就不说了,自行去搜各个系统的安装方法。
安装方法
我们先pull镜像然后创建持久化目录,
sudo docker pull sameersbn/postgresql:9.4
sudo mkdir -p /opt/postgresql/data
启动postgresql容器。
docker run --name postgresql -d \
-e 'DB_NAME=gitlabhq_production' \
-e 'DB_USER=gitlab' \
-e 'DB_PASS=password' \
-e 'DB_EXTENSION=pg_trgm' \
-v /opt/postgresql/data:/var/lib/postgresql \
sameersbn/postgresql:9.4
先pull redis image
sudo docker pull sameersbn/redis:latest
启动 redis 容器
sudo docker run --name=redis -d sameersbn/redis:latest
先把老版的Gitlab image pull回来
sudo docker pull sameersbn/gitlab:8.16.6
创建数据目录
sudo mkdir -p /opt/gitlab/data
这个目录会映像到窗口的/home/git/data目录上,所以这里保存了所有的数据,请一定不要删除这里的内容。
初始化
然后配置容器
docker run --name gitlab -i -t --rm --link postgresql:postgresql --link redis:redisio \
-e "DB_USER=gitlab" -e "DB_PASS=password" \
-e "DB_NAME=gitlabhq_production" \
-e 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
-e 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \
-e 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \
-v /opt/gitlab/data:/home/git/data \
sameersbn/gitlab:8.16.6 app:rake gitlab:setup
恢复
这里要先把之前的备份放在/opt/gitlab/data/backup 下面
BACKUP 参数是备份名的前缀
docker run --name gitlab -it --rm \
-p 10022:22 -p 10080:80 \
--link postgresql:postgresql --link redis:redisio \
-e "DB_USER=gitlab" -e "DB_PASS=password" \
-e "DB_NAME=gitlabhq_production" \
-e "GITLAB_HOST=10.21.12.14" \
-e "GITLAB_TIMEZONE=Beijing" \-e 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
-e 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \
-e 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \
-v /opt/gitlab/data:/home/git/data \
sameersbn/gitlab:8.16.6 app:rake gitlab:backup:restore BACKUP=1504835793_2017_09_08
这个样数据就全部到新的gitlab上了。
你会发现跟原来的一样。
启动容器
(注意:GITLAB_HOST=192.168.1.100:10080 这个参数要配置自己服务器的地址,并且带上绑定的端口,不然在网页端操作时会有问题)
docker run --name gitlab -d \
-p 10022:22 -p 10080:80 \
--link postgresql:postgresql --link redis:redisio \
-e "DB_USER=gitlab" -e "DB_PASS=password" \
-e "DB_NAME=gitlabhq_production" \
-e "GITLAB_HOST=192.168.1.100:10080" \
-e "GITLAB_TIMEZONE=Beijing" \
-e 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
-e 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \
-e 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \
-v /opt/gitlab/data:/home/git/data \
sameersbn/gitlab:8.16.6