Debian环境下GitLab数据迁移的常见方法
这是最常用的迁移方式,适用于完整迁移GitLab实例(包括仓库、用户、CI/CD配置、附件等)。
sudo gitlab-rake gitlab:backup:create,生成备份文件(默认存放在/var/opt/gitlab/backups/目录,文件名格式为时间戳_版本号_gitlab_backup.tar)。scp或rsync将备份文件复制到新服务器的/var/opt/gitlab/backups/目录(需提前创建该目录并赋予777权限)。curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash添加仓库,再用apt install gitlab-ce安装)。sudo gitlab-ctl stop unicorn && sudo gitlab-ctl stop sidekiq(防止数据冲突);sudo gitlab-rake gitlab:backup:restore BACKUP=时间戳(替换为备份文件名中的时间戳);/etc/gitlab/gitlab.rb和/etc/gitlab/gitlab-secrets.json复制到新服务器对应位置(gitlab-secrets.json包含加密密钥,必须同步)。sudo gitlab-ctl reconfigure应用新配置,再用sudo gitlab-ctl start启动所有服务。external_url需在gitlab.rb中设置),检查用户、仓库、CI/CD作业等是否正常。若仅需迁移Git仓库(不包含用户、配置等),可使用rsync直接同步仓库目录,适合增量迁移或仓库单独迁移。
sudo gitlab-ctl stop unicorn && sudo gitlab-ctl stop sidekiq(确保数据一致性)。rsync -avz /var/opt/gitlab/repositories/ user@新服务器IP:/var/opt/gitlab/repositories/(-a保留权限,-v显示进度,-z压缩传输)。/etc/gitlab/gitlab.rb,更新external_url为新服务器地址,运行sudo gitlab-ctl reconfigure。sudo gitlab-ctl start,检查仓库是否能正常克隆、推送。若需单独迁移数据库或附件(如大型数据库、自定义附件),可采用分步方式,适合定制化迁移。
sudo -u postgres pg_dump -d gitlabhq_production > gitlab-backup.sql;scp gitlab-backup.sql user@新服务器IP:/tmp/;sudo -u postgres createdb gitlabhq_production,再导入数据sudo -u postgres psql gitlabhq_production < /tmp/gitlab-backup.sql。rsync同步/var/opt/gitlab/config/(配置文件)、/var/opt/gitlab/shared/(附件、日志等)目录到新服务器。gitlab.rb中的数据库连接信息(如gitlab_rails['db_host']、gitlab_rails['db_password']),运行sudo gitlab-ctl reconfigure,最后启动服务。若需迁移大量项目、用户权限、合并请求等复杂数据,可使用第三方工具(如GitLab官方推荐的gitlab-migrator或社区工具),简化批量迁移流程。
gitlab-migrator),确保兼容新旧版本。gitlab-migrator migrate --source http://旧服务器IP --target http://新服务器IP),工具会自动同步项目、用户、权限等数据。