Linux系统中GitLab备份与恢复方法
GitLab提供内置rake任务实现全量或部分数据备份。全量备份包含仓库、数据库、用户/组、密钥等所有数据,命令如下:
sudo gitlab-rake gitlab:backup:create
备份文件默认存储在/var/opt/gitlab/backups目录,文件名格式为<timestamp>_gitlab_backup.tar(如1711234567_gitlab_backup.tar)。
若需排除特定部分(如artifacts、builds),可使用--skip参数:
sudo gitlab-rake gitlab:backup:create SKIP=artifacts,builds
通过crontab设置定时任务,实现每日自动备份。例如,每天凌晨2点执行全量备份:
sudo crontab -e
添加以下内容:
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
若需自定义备份路径,可修改/etc/gitlab/gitlab.rb配置文件:
gitlab_rails['backup_path'] = '/path/to/custom/backup'
修改后执行sudo gitlab-ctl reconfigure使配置生效。
备份gitlab.rb(GitLab主配置)和gitlab-secrets.json(加密密钥,如数据库密码、OAuth令牌)至关重要,避免恢复后无法登录或数据泄露:
sudo cp /etc/gitlab/gitlab.rb /path/to/backup/
sudo cp /etc/gitlab/gitlab-secrets.json /path/to/backup/
unicorn(Web服务)和sidekiq(后台任务):sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
或一键停止所有服务:sudo gitlab-ctl stop
将备份文件复制到/var/opt/gitlab/backups目录(若路径有修改,需对应调整),然后运行恢复命令:
sudo gitlab-rake gitlab:backup:restore BACKUP=<timestamp>
其中<timestamp>为备份文件名中的时间戳(如1711234567)。恢复过程中会提示确认覆盖现有数据,输入yes继续。
恢复完成后,启动GitLab所有服务:
sudo gitlab-ctl start
或逐一启动关键服务:
sudo gitlab-ctl start unicorn
sudo gitlab-ctl start sidekiq