目录
一、修改数据存储位置:
二、修改备份存储位置:
三、每日整体备份
四、备份保存30天
五、自动备份
六、备份恢复
七、备份文件的忽略
前面有提到CentOS 下搭建Gitlab+Gitlab-runner,配置邮件提醒_xiaodaiwang的博客-CSDN博客,现在一起看看如何进行备份,诉求:1.每日整体备份;2.备份保存30天;3.备份数据恢复测试;
1、创建数据存储目录:
mkdir -p /data/gitlab-data
2、修改配置文件,插入位置信息:
vim /etc/gitlab/gitlab.rb
git_data_dirs({
“default” => {
“path” => “/data/gitlab-data”
}
})
3、将旧的数据拷贝到新的数据目录下:
rsync -av /var/opt/gitlab/git-data/repositories /data/gitlab-data/
4、停止gitlab服务,加载配置
gitlab-ctl stop
gitlab-ctl reconfigure
5、加载完成后启动gitlab服务会看到/data/gitlab-data/下多了一个 repositories目录
gitlab-ctl start
1、创建备份存储位置:
mkdir -p /data/gitlab-backups
2、修改配置文件,插入位置信息:
vim /etc/gitlab/gitlab.rb
gitlab_rails['backup_path'] = "/data/gitlab-backups"
3、停止gitlab服务,加载配置
gitlab-ctl stop
gitlab-ctl reconfigure
1、通过gitlab-rake命令备份gitlab
gitlab备份时需要保持运行状态,需要使用sudo权限,命令执行完毕后会在设置好的备份目录下生成备份文件,执行命令(GitLab 12.1之后版本):gitlab-backup create
或者
执行命令(GitLab 12.1及之前版本):gitlab-rake gitlab:backup:create
gitlab-backup create
。。。
/etc/gitlab/gitlab.rb 配置文件须备份
/var/opt/gitlab/nginx/conf nginx配置文件
/etc/postfix/main.cfpostfix 邮件配置备份
红字部分表示 gitlab.rb 和 gitlab-secrets.json 两个文件包含敏感信息。未被备份到备份文件中。需要手动备份。
修改配置文件 /etc/gitlab/gitlab.rb
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
gitlab_rails['backup_archive_permissions'] = 0644 //生成的备份文件权限
gitlab_rails['backup_keep_time'] = 2592000 //默认备份保留天数为7天(604800秒,这里是30天)
更改完成后重载配置文件
gitlab-ctl reconfigure
结合crontab实施自动定时备份,比如每天1点备份一次,关于crontab的介绍,可参考crontab定时执行命令_xiaodaiwang的博客-CSDN博客
写cron脚本文件,命名为gitlab_bak.cron
vim gitlab_bak.cron
0 1 * * * gitlab-backup create
添加定时任务。执行命令
crontab /root/gitlab_bak.cron >~/log
"crontab -l" 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本
结果程序会每天凌晨1点执行一次备份命令
第二天,查看是否进行了备份:
最终脚本说明:
修改了crontab 内容,增加了备份脚本,备份脚本里写清执行备份,拷贝配置文件到文件夹,将文件夹增加压缩密码并压缩,将压缩后将备份文件拷贝到备份存储服务器中,
vim gitlab-bak.sh
#!/bin/sh
gitlab-backup create
cd /var/opt/gitlab/backups/
mkdir gitlab_$(date +%Y%m%d)
find . -name '*.tar' -ctime -1 -exec cp {} /var/opt/gitlab/backups/gitlab_$(date +%Y%m%d)/ \;
cp /etc/gitlab/gitlab.rb /var/opt/gitlab/backups/gitlab_$(date +%Y%m%d)
cp /var/opt/gitlab/nginx/conf /var/opt/gitlab/backups/gitlab_$(date +%Y%m%d)
cp /etc/postfix/main.cfpostfix /var/opt/gitlab/backups/gitlab_$(date +%Y%m%d)
cp /etc/gitlab/gitlab-secrets.json /var/opt/gitlab/backups/gitlab_$(date +%Y%m%d)
zip -rP password gitlab_$(date +%Y%m%d).zip gitlab_$(date +%Y%m%d)/
cp gitlab_$(date +%Y%m%d).zip /backup_wuhan/gitlab/
命令中使用了-exec
参数 后跟的是command
命令,它的终止是以;(分号)来结束,所以这句话命令后面的分号是必不可少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠 “” 就是我们常说的转义符。
将备份文件拷贝到待恢复测试的服务器上,注意:GitLab恢复数据的时候需要满足版本一致,即进行恢复的GitLab的版本和备份数据时的GitLab的版本一致。
1、安装git
2、安装gitlab
3、修改配置文件
4、启动gitab服务
5、停止与连接 数据库有关的进程
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
6、备份恢复
gitlab-rake gitlab:backup:restore BACKUP=/var/opt/gitlab/backups/1665366086_2022_10_10_15.4.0_gitlab_backup.tar
。。。
浏览器登录恢复前账号,测试可行。
对于 Gitlab-ce数据还原时发生PostgreSQL异常,可参考解决。Gitlab-ce数据还原时发生PostgreSQL异常_hu_wenjie的博客-CSDN博客
全量备份时考虑到有些内容不需要备份,否则备份文件过大,拷贝起来比较缓慢,筛选信息,首先看一下备份文件说明:
db //数据库备份:主要为PostgreSQL数据库数据内容
uploads //附件数据备份
repositories //Git仓库数据备份
builds //CI 作业输入日志等数据备份
artifacts //CI 作业工件数据备份(artifacts
用于指定在job 成功或失败 时应附加 到作业的文件和目录的列表。)
lfs //LFS对象数据备份
registry //容器镜像备份
pages //GitLab Pages content,页面内容数据备份
使用SKIP选项(指定的内容不作为备份的对象目录的意思),以忽略artifacts为例,
gitlab-backup create SKIP=artifacts
。。。