最近一个任务,要将两年前的gitlab给重新备份一遍到新的服务器上,然后原本的gitlab使用的是内部已经集成好的postgresql。然后现在要将数据库分离,将新的gitlab数据库分离出去。
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
gitlab-rake gitlab:env:info
将gitlab重新部署到新的服务器上
这里有两种方式部署,第一种就是直接重新拉一个gitlab,因为之前已经确认过了版本号,所以直接进行拉取,我这里因为版本是12.3.5的ce版本
docker pull gitlab/gitlab-ce:12.3.5-ce.0
拉取完成后,写挂载目录(之后会用到)
mkdir -p /mnt/gitlab/etc
mkdir -p /mnt/gitlab/log
mkdir -p /mnt/gitlab/data
mkdir -p /mnt/gitlab/postgresql
然后启动容器
docker run -idt -p 80:80 --name gitlab --restart=always -v /mnt/gitlab/etc/:/etc/gitlab -v /mnt/gitlab/log/:/var/log/gitlab -v /mnt/gitlab/data/:/var/opt/gitlab gitlab/gitlab-ce:12.3.5-ce.0
输入命令,查看是否启动完成
docker ps -a | grep "gitlab"
可以看到已经在启动中了,等他启动完成后,继续配置外部数据库
docker save -o gitlab.tar sameersbn/gitlab:latest
通过scp将生产的tar文件传到新的服务器中,输入yes输入密码
scp gitlab.tar [email protected]:/mnt/gitlab/dokcerload
回到目标服务器中将收到的tar文件load出来
docker load -i gitlab.tar
然后安装步骤就和上面一样了
这里有一点很关键,安装的postgre一定要符合官方文档里当前gitlab支持的最小版本!(之前安装了一个最新的gitlab,结果10.4的postgre无法挂载)
拉取postgre10.4
docker pull postgres:10.4
开始安装
docker run --name postgres -e POSTGRES_PASSWORD=test123 -p 25432:5432 -v /mnt/gitlab/postgresql/10/main:/var/lib/postgresql -d postgres:10.4
如果安装了,输入命令docker ps 找不到postgres,那就先看下日志是不是安装失败了
docker logs -f postgres
这里我顺利安装成功后,开始配置gitlab数据库,
先进入容器
docker exec -it gitlab /bin/bash
然后编辑配置文件
vi /etc/gitlab/gitlab.rb
将默认数据库关闭
配置外部数据库连接信息
然后保存并退出,重启配置文件,并重启项目,退出容器
gitlab-ctl reconfigure
gitlab-ctl restart
exit
你在配置gitlab外部数据库的时候可能会报错
说没有[gitlabhq_production]数据库,这个时候可以直接手动创建。
先查询原服务器上gitlab的挂载信息
docker inspect gitlab-new
找到目标数据库的位置
目前没有什么很好的办法,因为现在数据库版本是一致的,我直接将就服务器上挂载的数据库直接复制覆盖了新起的数据库。