Debian系统中GitLab备份与恢复指南
为确保备份数据的完整性和一致性,建议在备份前停止GitLab的关键服务(unicorn和sidekiq):
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
使用GitLab内置的gitlab-rake工具创建备份,默认备份文件会保存到/var/opt/gitlab/backups目录:
sudo gitlab-rake gitlab:backup:create
备份文件命名格式为TIMESTAMP_gitlab_backup.tar(如1716000000_gitlab_backup.tar),其中TIMESTAMP为备份创建的时间戳。
若需更改备份文件的存储位置,可编辑GitLab配置文件/etc/gitlab/gitlab.rb,添加或修改以下参数:
gitlab_rails['backup_path'] = "/data/gitlab/backups" # 自定义备份目录(需提前创建)
修改完成后,运行以下命令使配置生效:
sudo gitlab-ctl reconfigure
通过crontab设置定时任务,实现自动备份。例如,每天凌晨2点执行备份:
# 编辑当前用户的crontab
sudo crontab -e
添加以下内容(需替换为实际备份脚本路径):
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
若需自动删除超过7天的旧备份,可将以下命令添加到备份脚本末尾:
find /var/opt/gitlab/backups -name "*.tar" -type f -mtime +7 -exec rm -rf {} \;
备份文件不包含GitLab的关键配置(如gitlab.rb、gitlab-secrets.json)和SSL证书,需手动备份这些文件:
sudo cp /etc/gitlab/gitlab.rb /path/to/secure/backup/
sudo cp /etc/gitlab/gitlab-secrets.json /path/to/secure/backup/
sudo cp -r /etc/ssl/gitlab/ /path/to/secure/backup/ # 若SSL证书存放在该目录
sudo gitlab-rake gitlab:env:info查看当前版本)。sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
将备份文件(如1716000000_gitlab_backup.tar)复制到目标服务器的gitlab_rails['backup_path']目录(如/var/opt/gitlab/backups或自定义目录)。
使用gitlab-rake工具恢复备份,需指定备份文件的TIMESTAMP(即备份文件名中的时间戳,不含扩展名):
sudo gitlab-rake gitlab:backup:restore BACKUP=1716000000
执行过程中会提示确认恢复操作,输入yes并按回车键继续。
将之前手动备份的配置文件复制回原位置:
sudo cp /path/to/secure/backup/gitlab.rb /etc/gitlab/
sudo cp /path/to/secure/backup/gitlab-secrets.json /etc/gitlab/
sudo cp -r /path/to/secure/backup/gitlab/ /etc/ssl/ # 若SSL证书存放在该目录
恢复完成后,重载GitLab配置并启动所有服务:
sudo gitlab-ctl reconfigure # 使配置文件变更生效
sudo gitlab-ctl start # 启动所有GitLab服务
http://服务器IP),使用管理员账户登录。sudo gitlab-rake gitlab:check SANITIZE=true
gitlab-secrets.json)需存储在安全位置,避免泄露。gitlab_rails['backup_keep_time']参数设置备份保留时间(如604800秒=7天),避免磁盘空间耗尽。