Gitlab 备份及恢复

一、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

Git是一个版本控制系统,Gitlib是其中的一个社区和托管服务平台。由于Git的特性,可以方便地对项目进行远程备份和共享,但也因此存在误删或丢失关联项目的可能性。 当Gitlib上的人员误删导致关联项目丢失时,可以考虑以下步骤来解决问题: 第一步是确认误删的情况。首先,核实项目是否真的被误删,可以与团队成员进行沟通并查看日志记录。如果确认确实发生了误删,就需要采取进一步的恢复行动。 第二步是查找备份。Gitlib平台通常提供了备份功能,可以尝试搜索或联系平台的技术支持团队,询问是否有可用的备份。如果存在备份,可以从备份恢复关联项目。如果没有备份,就需要采取其他方法来尝试恢复项目。 第三步是寻求帮助。如果无法在Gitlib平台上找回项目,可以向Gitlib的技术支持或社区寻求帮助。他们可能有经验来解决这类问题,提供进一步的指导和支持。 第四步是检查本地仓库。如果本地仓库中还有缓存的项目数据,可以尝试使用本地的仓库进行恢复。通过重新添加远程仓库、拉取最新的代码等操作,可以尝试将本地仓库中的数据重新关联到Gitlib平台上。 总之,当Gitlib人员误删导致关联项目丢失时,重要的是要及时确认情况、查找备份、寻求帮助,并利用本地仓库等手段尝试恢复项目。保持数据的备份和定期的版本控制操作可以有效地避免或减轻这类问题的发生。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值