因为前两天本地开发服务器接二连三出了问题,我们担心
gitlab
和数据库的数据丢失,发生灾难性的问题。
借此机会,将三台
Centos6.5
的系统都升级到Centos7.x
,9012年都要结束啦,怎么能还不推动一下团队成员对Docker
的使用率。
迁移源gitlab | 迁移目的gitlab | 版本 |
---|---|---|
yum安装 | docker 运行gitlab | 11.9.8 |
迁移步骤
1、备份旧gitlab数据
gitlab-rake gitlab:backup:create
yum安装默认会保存在 /var/opt/gitlab/backups
,实际情况可以使用find
查找下文件路径
2、在新服务器上使用docker搭建相同版本的gitlab
version: '3'
services:
gitlab:
image: 'gitlab/gitlab-ce:11.9.8-ce.0'
restart: always
container_name: compose-gitlab-ce
hostname: 'gitlab.example.com'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.example.com'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
# 需要配置到 gitlab.rb 中的配置可以在这里配置,每个配置一行,注意缩进。
# 比如下面的电子邮件的配置:
# gitlab_rails['smtp_enable'] = true
# gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
# gitlab_rails['smtp_port'] = 465
# gitlab_rails['smtp_user_name'] = "xxxx@xx.com"
# gitlab_rails['smtp_password'] = "password"
# gitlab_rails['smtp_authentication'] = "login"
# gitlab_rails['smtp_enable_starttls_auto'] = true
# gitlab_rails['smtp_tls'] = true
# gitlab_rails['gitlab_email_from'] = 'xxxx@xx.com'
ports:
- '80:80'
- '443:443'
- '2222:22'
volumes:
- ./config:/etc/gitlab
- ./data:/var/opt/gitlab
- ./logs:/var/log/gitlab
在docker-compose.yml
文件的同级目录创建三个目录:
mkdir config
mkdir data
mkdir logs
执行 docker-compose up -d
启动该容器,启动的时间会比较长 耐心等待 5分钟左右!!
3、拷贝文件到新服务器的docker中
docker cp ./1575650870_2019_12_06_11.9.8_gitlab_backup.tar compose-gitlab-ce:/var/opt/gitlab/backups
4、重建数据库
tips
1575650870_2019_12_06_11.9.8_gitlab_backup.tar
这个文件是第一步备份的时候生成的。
docker exec -it compose-gitlab-ce /bin/bash
chmod 777 -R /var/opt/gitlab/backups/
gitlab-rake gitlab:backup:restore BACKUP=1575650870_2019_12_06_11.9.8
耐心等待一小会儿…
迁移完成!!! 重启 gitlab
并验证
gitlab-ctl restart
gitlab-rake gitlab:check SANITIZE=true
大功告成 !!!
注意事项
gitlab版本必须一致,否则迁移失败
解决 22 端口冲突的问题
- 修改宿主的 SSH 端口
具体操作细节请参考:【CentOS】CentOS7增加或修改SSH端口号的方法 - 修改容器的 SSH 端口 (本文采用的是此方法)
修改容器的端口映射关系,比如将 -p 22:22 改为 -p 2222:22,这样 GitLab 的 SSH 服务端口将是 2222。
这样做会让使用 GitLab 的 SSH 克隆、提交代码有些障碍。这种情况要改变用户使用 Git 的链接方式。# 要从之前的: git clone git@gitlab.example.com:myuser/awesome-project.git # 改为明确使用 ssh:// 的 URL 方式。 git clone ssh://git@gitlab.example.com:2222/myuser/awesome-project.git