迁移GitLab,在新Linux中用Docker重新部署GitLab备份还原
1、背景
将 GitLab 10 从 CentOS 7服务器迁移至天翼云定制的 CTyunOS 23 服务器时,由于原版本过低无法直接安装,我们选择在新服务器上通过 Docker 容器方式部署 GitLab。
2、安装 Docker
2.1、修改 yum 配置,安装 Docker
sudo vi /etc/yum.repos.d/docker-ce.repo
# 粘贴下面这段 start
[docker-ce-stable]
name=Docker CE Stable
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable
enabled=1
gpgcheck=0
# end
sudo yum install -y docker-ce docker-ce-cli containerd.io
systemctl enable docker
systemctl start docker
2.2、配置 Docker 镜像仓库,拉取 GitLab 10 镜像
vi /etc/docker/daemon.json
# 粘贴下面这一段 start
{"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://dockerhub.azk8s.cn","https://mirror.ccs.tencentyun.com","https://registry.cn-hangzhou.aliyuncs.com","https://docker.mirrors.ustc.edu.cn","https://docker.m.daocloud.io","https://noohub.ru","https://huecker.io","https://dockerhub.timeweb.cloud"]
}
# end
systemctl daemon-reexec
systemctl restart docker
3、安装配置 GitLab 10
3.1、拉取GitLab 10 镜像
docker pull gitlab/gitlab-ce:10.8.4-ce.0
3.2、执行运行脚本
#!/bin/bashset -eecho "📁 创建持久化目录(如不存在)..."
mkdir -p /usr/program/gitlab/{config,logs,data,backups}echo "🚀 启动 GitLab 容器..."
docker run --detach \--hostname gitlab.local \--publish 9191:80 \--publish 2222:22 \--name gitlab \--restart always \--volume /usr/program/gitlab/config:/etc/gitlab \--volume /usr/program/gitlab/logs:/var/log/gitlab \--volume /usr/program/gitlab/data:/var/opt/gitlab \--volume /usr/program/gitlab/backups:/var/opt/gitlab/backups \gitlab/gitlab-ce:10.8.4-ce.0echo "✅ GitLab 启动完成,Web UI 请访问:http://<你的IP>:9191"
3.3、修改 GitLab 配置文件
打开/home/breathhome/gitlab/config/gitlab.rb文件,根据需要配置
# 配置WebUI地址
external_url 'http://x.x.x.x:9191'
nginx['listen_port'] = 80# 配置ssh映射地址,这里映射的2222和创建容器的2222对应
gitlab_rails['gitlab_ssh_host'] = 'x.x.x.x'
gitlab_rails['gitlab_shell_ssh_port'] = 2222# 配置邮件
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp地址"
gitlab_rails['smtp_port'] = 端口
gitlab_rails['smtp_user_name'] = "邮箱"
gitlab_rails['smtp_password'] = "密码"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['gitlab_email_from'] = '邮箱'
gitlab_rails['smtp_domain'] = "smtp_domain"# 配置禁止shell登录
gitlab_rails['gitlab_shell']['authorized_keys_enabled'] = false
配置完后,执行命令:
docker exec -it gitlab gitlab-ctl reconfigure
docker exec -it gitlab gitlab-ctl restart
3.4 端口配置与初始密码设置
-
端口配置
- 在平台安全组中开放9191和2222端口
- 若服务器启用了防火墙,需同步在防火墙中开放上述两个端口
-
密码初始化
- 通过浏览器访问
http://x.x.x.x:9191
- 按提示修改初始密码
- 通过浏览器访问
4、GitLab 备份还原
4.1、备份,传输
在源服务器停止 GitLab 服务,并对 GitLab 数据进行备份,备份命令:
gitlab-rake gitlab:backup:create
备份完成后会生成一个 1750250601_2025_06_18_10.8.4_gitlab_backup.tar 命名的文件,使用rsync(可以断点续传)传输到目标服务器配置的 /usr/program/gitlab/gitlab_backup 目录
rsync -P --rsh=ssh 1750250601_2025_06_18_10.8.4_gitlab_backup.tar root@x.x.x.x:/usr/program/gitlab/gitlab_backup
4.2、还原
备份文件提权,不然在还原过程中会出现权限不够无法解压的问题,还原数据:
chmod 777 /usr/program/gitlab/backups/1750250601_2025_06_18_10.8.4_gitlab_backup.tar
docker exec -it gitlab gitlab-ctl stop unicorn
docker exec -it gitlab gitlab-ctl stop sidekiq
docker exec -it gitlab gitlab-rake gitlab:backup:restore BACKUP=1750234554_2025_06_18_10.8.4
# 还原过程中输入 yes 继续,完成后启动gitlab
docker exec -it gitlab gitlab-ctl start
5. 结束
迁移过程大致如此,期间遇到了一些问题需要特别注意。由于国内政策限制,部分Docker镜像仓库已不可用,建议自行搜索最新的可用仓库地址,切勿直接使用文章中可能已失效的仓库地址。
迁移完成后,还需更新项目关联的Git远程仓库地址。通过GitLab Web UI获取新的仓库URL后,使用命令git remote set-url origin <新远程仓库URL>
进行更新。