GitLab一键自动化完整数据的备份

GitLab官方的备份方案比较松散,数据、配置、以及一些ssh相关的数据都需要单独维护,不是很方便。

因此最近完成了一个项目,一次性实现所有依赖数据的备份,按照日期实现归档,能够定义本地及远程备份存放的周期,支持透过企业微信推送最新的备份情况,方便各位兄弟能够动态掌握GitLab的备份情况。

效果:

项目地址:

https://github.com/galtjay/gitlab-fully-backup

项目的介绍:

gitlab的备份数据主要由四个方面组成:
1. 业务数据
依赖gitlab-backup create命令实现gitlab整体数据的备份。
2. 配置文件
依赖gitlab-ctl backup-etc命令实现gitlab所有配置文件的备份。
3. 用户上传的公钥数据
对于git的authorized_keys进行备份
4. /etc/ssh数据的备份
恢复或者扩容rails节点时,需将/etc/ssh下边的几个密钥串进行覆盖。

项目针对使用Omnibus方式部署的GitLab,包括使用了PostgreSQL集群以及MinIO集群的GitLab。

程序基于python3,假如你使用较老的linux发行版,可以按照下边的流程进行python3的安装。

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
wget https://www.python.org/ftp/python/3.9.17/Python-3.9.17.tar.xz
tar -Jxvf Python-3.9.17.tar.xz
cd Python-3.9.17/
./configure  prefix=/usr/local/python3 
make && make install
/usr/local/python3/bin/python3   -V
  • 配置文件:config.txt,定义企业微信hook地址,MINIO的备份桶,以及存储的周期。

[WECHAT]
WEBHOOK_URL = https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=fffffff-aaaaaaa-kkkkkk-eeeeee

[MINIO]
MINIO_ENDPOINT = 123.123.123.123:9000
MINIO_ACCESS_KEY = gitlab
MINIO_SECRET_KEY = yoursecretkey
GITLAB_BUCKET_NAME = gitlab-backup

[BACKUP]
#Local storage days本地存储天数
LOCAL_STORE_DAYS= 3
#Remote storage days远程存储时间天数
MINIO_STORE_DAYS= 14
  • 安装依赖: /usr/local/python3/bin/pip3 install -r requirements.txt

  • 如何运行: /usr/local/python3/bin/python3 main.py #使用虚拟环境也可以运行。

  • 定时任务: 0 23 * cd /path/to/gitlab-fully-backup && /usr/local/python3/bin/python3 main.py