配置备份路径与保留策略:
编辑GitLab主配置文件/etc/gitlab/gitlab.rb,设置备份存储路径(默认/var/opt/gitlab/backups)和备份文件保留时间(单位:秒,如7776000秒≈90天):
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
gitlab_rails['backup_keep_time'] = 7776000
保存后执行sudo gitlab-ctl reconfigure使配置生效。
执行手动备份:
使用gitlab-rake命令创建全量备份,备份文件会自动生成在配置的路径中(文件名格式为时间戳_版本号_gitlab_backup.tar):
sudo gitlab-rake gitlab:backup:create
若需指定备份文件名前缀,可添加NAME参数:
sudo gitlab-rake gitlab:backup:create NAME="custom_backup"
通过Crontab设置定时任务:
编辑当前用户的crontab文件(crontab -e),添加定时任务(如每天凌晨2点执行备份):
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
CRON=1参数用于标识定时任务,避免触发邮件通知。
Docker部署的自动备份:
若GitLab通过Docker运行,需进入容器执行备份命令。首先创建备份脚本/root/gitlab_backup.sh:
#!/bin/bash
docker exec gitlab gitlab-rake gitlab:backup:create
赋予脚本执行权限并添加定时任务:
chmod +x /root/gitlab_backup.sh
echo "0 2 * * * /root/gitlab_backup.sh" >> /etc/crontab
重启cron服务使配置生效:
systemctl restart crond
find命令定期删除超过保留期限的备份文件(如删除30天前的备份):find /var/opt/gitlab/backups -type f -mtime +30 -exec rm -rf {} \;
scp或rsync将备份文件同步到远程服务器(需提前配置SSH免密登录),例如:scp /var/opt/gitlab/backups/*.tar user@remote_server:/remote/backup/path/
unicorn、sidekiq):sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
放置备份文件:
将备份文件(如1672232546_2023_01_01_15.0.0_gitlab_backup.tar)复制到GitLab备份目录(默认/var/opt/gitlab/backups)。
运行恢复命令:
使用gitlab-rake命令恢复指定备份(BACKUP参数为备份文件的时间戳部分):
sudo gitlab-rake gitlab:backup:restore BACKUP=1672232546_2023_01_01_15.0.0
执行后会提示“是否覆盖现有数据”,输入yes确认。
sudo gitlab-ctl start
sudo gitlab-ctl status
http://your_server_ip),确认能否正常登录。