一、gitlab备份

1.配置备份目录

备份文件缺省保存的目录在/etc/gitlab/gitlab.rb文件中可以进行配置,缺省状态下备份文件会保存在/var/opt/gitlab/backups目录下,可以打开如下注释,并根据需要修改备份文件的保存目录。

随着gitlab仓库越来越多,gitlab服务器备份存储也越来越大,如果服务器硬盘越加越大势必会对整个服务器的备份和恢复增加风险,鉴于此我所做的是搭建一个NFS,然后把NFS共享目录挂载到备份目录如:/data/gitlab/backups,相当于外挂一个大容量存储用来存储备份数据,一旦出现故障,或者需要恢复测试,直接在另外一个环境上再挂载一下即可。

如何搭建NFS请参考:

CSDN博主「lihongbao80」的原创文章

链接:https://blog.csdn.net/lihongbao80/article/details/119869383

注意:关于NFS丢挂载的问题,可以添加zabbix或者prtg等监控平台来告警提醒。

修改gitlab备份目录及备份策略

[root@localhost /]# vim /etc/gitlab/gitlab.rb 

gitlab_rails['manage_backup_path'] = true

gitlab_rails['backup_path'] = "/data/gitlab/backups"    //备份路径

gitlab_rails['backup_archive_permissions'] = 0644     //备份文件权限

gitlab_rails['backup_keep_time'] = 7776000    //备份文件有效期 30天

修改完配置记得 执行 sudo gitlab-ctl reconfigure重载配置,等待执行完提示

gitlab Reconfigured!

即完成配置重载。

备份文件解释

备份所生成的tar归档文件,实际是有如下目录所组成,各目录所保存的数据内容和目录名称如下所示:

目录名称 备份文件说明

目录名称

备份文件说明

db

数据库备份:主要为PostgreSQL数据库数据内容

uploads

附件数据备份

repositories

Git仓库数据备份

builds

CI Job输入日志等数据备份

artifacts

CI Job构件数据备份

lfs

LFS对象数据备份

registry

容器镜像备份

pages

GitLab Pages content数据备份

2. 备份执行示例

手工备份命令:gitlab-rake gitlab:backup:create

root@gitlab-example:/data/gitlab/backups#  gitlab-rake gitlab:backup:create

2023-09-20 14:46:08 +0000 -- Dumping database ...

Dumping PostgreSQL database gitlabhq_production ... [DONE]

2023-09-20 14:46:13 +0000 -- done

2023-09-20 14:46:13 +0000 -- Dumping repositories ...

 * root/webhookproject (@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b) ... [DONE]

[SKIPPED] Wiki

2023-09-20 14:46:14 +0000 -- done

2023-09-20 14:46:14 +0000 -- Dumping uploads ...

2023-09-20 14:46:14 +0000 -- done

2023-09-20 14:46:14 +0000 -- Dumping builds ...

2023-09-20 14:46:14 +0000 -- done

2023-09-20 14:46:14 +0000 -- Dumping artifacts ...

2023-09-20 14:46:14 +0000 -- done

2023-09-20 14:46:14 +0000 -- Dumping pages ...

2023-09-20 14:46:14 +0000 -- done

2023-09-20 14:46:14 +0000 -- Dumping lfs objects ...

2023-09-20 14:46:14 +0000 -- done

2023-09-20 14:46:14 +0000 -- Dumping container registry images ...

2023-09-20 14:46:14 +0000 -- [DISABLED]

Creating backup archive: 1597812374_2023_09_20_12.9.0_gitlab_backup.tar ... done

Uploading backup archive to remote storage  ... skipped

Deleting tmp directories ... done

done

done

done

done

done

done

done

Deleting old backups ... skipping

Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data

and are not included in this backup. You will need these files to restore a backup.

Please back them up manually.

Backup task is done.

手工备份配置文件

上述Warning提示执行上述备份命令时也会提示了由于安全的关系如下的配置文件需要手工去备份和恢复:

  • /etc/gitlab/gitlab-secrets.json
  • /etc/gitlab/gitlab.rb

root@gitlab# sudo cp /etc/gitlab/gitlab.rb  /data/gitlab/backups/

root@gitlab# sudo  cp /etc/gitlab/gitlab-secrets.json  /data/gitlab/backups/

3. 备份文件解释

备份所生成的tar归档文件,实际是有如下目录所组成,各目录所保存的数据内容和目录名称如下所示:

目录名称 备份文件说明

目录名称

备份文件说明

db

数据库备份:主要为PostgreSQL数据库数据内容

uploads

附件数据备份

repositories

Git仓库数据备份

builds

CI Job输入日志等数据备份

artifacts

CI Job构件数据备份

lfs

LFS对象数据备份

registry

容器镜像备份

pages

GitLab Pages content数据备份

4.配置crontab定时备份  

键入 crontab  -e 编辑crontab服务文件

附GUN nono常用快捷键:

ctrl+X 离开nano软件,若有修改过的文件会提示是否保存;

ctrl+O 保存文件;   ctrl+W 查询字符串;

ctrl +C 说明目前光标所在处的行数和列数等信息;

ctrl+ _ 可以直接输入行号,让光标快速移到该行;

一般操作写入内容ctrl+O 保存,ctrl+x关闭即可

crontab -e

使用crontab进行定时备份,设置每日凌晨两点进行backup

0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1

 使用crontab -l 查看是否添加成功

每日自动备份如下:

二、Gitlab 恢复

1.必要条件

GitLab提供了通过命令行接口用于备份恢复,需要注意的是备份和恢复需要相同的GitLab版本,比如在GitLab 14.9.0上的备份文件,恢复导入的时候还是需要导入到14.9.0版本的GitLab服务中。版本不同的话,需要先行调节GitLab版本,然后再进行备份恢复。

新的环境至少运行过一次,sudo gitlab-ctl reconfigure

确认GitLab是否 正常运行,sudo gitlab-ctl status

首先确保备份 tar 文件位于配置 中所述的备份目录中,当前用户有权限gitlab_rails['backup_path'] = "/data/gitlab/backups"   

2. 执行步骤

按照如下步骤进行GitLab的备份恢复:

步骤1: 确保GitLab服务的启动可访问,并且版本和备份数据一致

步骤2: 拷贝备份文件至backups目录下,并确保有权限,一般指定权限为 777

步骤3: 使用gitlab-ctl命令停止unicorn(或者puma)以及sidekiq服务

/

sudo gitlab-ctl stop sidekiq

# 校验是否关闭

sudo gitlab-ctl status

步骤4: 使用gitlab-backup restore进行数据恢复

注意:完整备份文件名称为1596188417_2023_08_11_14.9.0_gitlab_backup.tar,恢复时只用输入前缀日期以及其他字符会自动补全

gitlab-rake gitlab:backup:restore BACKUP=1597188417

步骤5: 手工恢复gitlab-secrets.json文件与gitlab.rb

步骤6: 重设、重启服务并检查

#执行命令

gitlab-ctl reconfigure && gitlab-ctl restart && gitlab-rake gitlab:check SANITIZE=true

导入的时候需要注意权限是否正确否则容易出现如下错误:

root@gitlab-example:/# gitlab-rake gitlab:backup:restore BACKUP=1597188417

Unpacking backup ... tar: 1597188417_gitlab_backup.tar: Cannot open: Permission denied

tar: Error is not recoverable: exiting now

unpacking backup failed

root@gitlab-example:/#

#这是因为rsync同步时的文件权限受umask影响的缺省设定,修改即可

root@gitlab-example:/# ls -lrt

total 344

-rw------- 1 root root 174080 Aug 12 01:23 1597188417_2023_08_11_12.10.5_gitlab_backup.tar

root@gitlab-example:/#  chmod 644 *

root@gitlab-example:/# 

参考来源gitlab 帮助文档:https://docs.gitlab.com/ee/administration/backup_restore/backup_gitlab.html?tab=Linux+package+%28Omnibus%29

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐