如何迁移gitlab到另一台服务器
前言
因为公司要迁移gitlab到新的合适的服务器,因此需要对gitlab做一次整体迁移,在参考了官方文档和自己实践后,得出了如下的解决步骤,仅供参考,细节可能因每个人需求而有所差异。
各软件版本
软件名称 | 版本 |
gitlab | 18.2-jh |
服务器 | aws ec2 |
参考文档
gitlab官方参考文档:https://gitlab.cn/docs/jh/administration/backup_restore
部署文件
因为我是采用docker compose文件部署的,docker-compose.yaml文件如下,一些敏感信息已去除,大家根据实际情况自行填写或修改
services:
web:
image: 'registry.gitlab.cn/omnibus/gitlab-jh:18.2.1-jh.0'
restart: always
pull_policy: always
hostname: ''
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url ''
# Add any other gitlab.rb configuration here, each on its own line
ports:
- '80:80'
- '443:443'
- '2224:22'
- '8929:8929'
volumes:
- './config:/etc/gitlab'
- './logs:/var/log/gitlab'
- './data:/var/opt/gitlab'
- './path/to/cert:/etc/gitlab/ssl'
shm_size: '256m'
具体步骤
旧服务器上执行
查看gitlab容器名
docker ps
执行备份操作
docker exec -t gitlab-web-1 gitlab-backup create
等待备份完成
备份文件一般默认放在容器内的/var/opt/gitlab/backups目录下,因为我将/var/opt/gitlab映射到宿主机的./data目录,因此直接在宿主机上进入~/data/backups来查看
温馨提示 :建议不要更改名字,因为后续的恢复对文件名格式有要求!!!
将备份文件转移到新服务器
方法很多,上传到oss,或者通过其他任意方式转移均可,因为我的服务器是aws ec2,所以我这里选择将其上传到aws s3
注意
- 此命令只适用aws s3,阿里云或者其他oss服务请参考对应的官方文档
- 如果使用aws s3,将your-bucket-name改成自己的bucket name
aws s3 cp 1753761475_2025_07_29_18.2.1-jh_gitlab_backup.tar s3://your-bucket-name/1753761475_2025_07_29_18.2.1-jh_gitlab_backup.tar
等待上传完成
新服务器上执行
启动新gitlab
使用旧的docker compose文件启动或者默认启动一个均可,我这里使用旧的docker compose文件来启动
注意,如果使用旧docker compose文件来启动,需要将容器卷对应的目录创建好,同时将旧gitlab的config目录下的内容先行拷贝过来,要不然会启动失败
等待四五分钟,新gitlab容器启动成功,并且健康检查状态为healthy
将备份文件转移过来
因为我之前是传到s3,因此我从s3上拉取下来,为了方便,我直接在backups目录下执行这个操作
aws s3 cp s3://your-bucket-name/1753761475_2025_07_29_18.2.1-jh_gitlab_backup.tar .
等待拉取完成
执行恢复文件
注意:gitlab会自动补全文件后缀名_gitlab_backup.tar,因此文件原名是1753761475_2025_07_29_18.2.1-jh_gitlab_backup.tar,但是命令中只输入1753761475_2025_07_29_18.2.1-jh
docker exec -it gitlab-web-1 gitlab-backup restore BACKUP=1753761475_2025_07_29_18.2.1-jh
等待解析完成后进入引导
注意,恢复会格式化新gitlab的数据库,不过作为即将迁移的新gitlab,本来就是要被覆盖的,这个并不需要担心
输入yes后继续
继续输入yes
迁移完成
进入新服务器的地址,可以查看到账户和仓库等信息都已经迁移过去了