Ubuntu系统下GitLab的主要备份方法
GitLab提供了原生的gitlab-rake工具,可快速备份仓库、数据库、CI/CD配置等核心数据。操作步骤如下:
sudo gitlab-rake gitlab:backup:create生成备份,备份文件默认存储在/var/opt/gitlab/backups目录(可通过gitlab_rails['backup_path']修改)。命令会生成类似1672232546_2023_01_01_15.0.0_gitlab_backup.tar的文件(包含时间戳和版本号)。crontab -e添加定时任务(如每天凌晨2点执行),例如:0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1(CRON=1参数抑制进度输出,避免日志冗余)。若需更细粒度的控制(如单独备份数据或配置),可手动打包关键目录:
sudo gitlab-ctl stop unicorn、sudo gitlab-ctl stop sidekiq。tar命令打包/var/opt/gitlab(存储仓库、上传文件等数据):sudo tar -czvf /var/backups/gitlab-data-$(date +%Y%m%d).tar.gz -C / var/opt/gitlab。/etc/gitlab(存储GitLab配置)和/etc/gitlab/ssl(存储SSL证书):sudo tar -czvf /var/backups/gitlab-config-$(date +%Y%m%d).tar.gz -C / etc/gitlab、sudo tar -czvf /var/backups/gitlab-ssl-$(date +%Y%m%d).tar.gz -C / etc/gitlab/ssl。sudo gitlab-ctl start。通过cron实现定期自动备份,减少人工干预:
sudo crontab -e,添加定时任务(如每天凌晨3点执行内置备份命令):0 3 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1。>> /var/log/gitlab_backup.log 2>&1),便于后续检查。若服务器由Ansible管理,可通过Playbook实现批量、一致的备份:
backup_gitlab.yml):定义停止服务、备份数据目录、备份配置文件、启动服务等任务,示例如下:- name: Backup GitLab
hosts: gitlab_servers
become: yes
tasks:
- name: Stop GitLab services
ansible.builtin.service:
name: "{{ item }}"
state: stopped
loop:
- gitlab-unicorn
- gitlab-sidekiq
- name: Backup GitLab data directory
ansible.builtin.archive:
path: /var/opt/gitlab
dest: "/var/backups/gitlab-backup-{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}.tar.gz"
format: gz
- name: Backup GitLab configuration files
ansible.builtin.archive:
path: /etc/gitlab
dest: "/var/backups/gitlab-configs-{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}.tar.gz"
format: gz
- name: Start GitLab services
ansible.builtin.service:
name: "{{ item }}"
state: started
loop:
- gitlab-unicorn
- gitlab-sidekiq
ansible-playbook -i inventory_file backup_gitlab.yml运行,适用于多台GitLab服务器的场景。为节省存储空间,可使用rsync进行增量备份(仅备份变化的文件):
sudo rsync -avz --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /var/opt/gitlab/ /path/to/backup/directory/,排除无关目录(如/dev、/proc)。find命令删除超过7天的备份(如sudo find /path/to/backup/directory -mtime +7 -delete)。若GitLab通过Docker安装,需备份容器内的数据卷:
sudo docker exec -i <gitlab_container_id> /bin/bash -c 'cd /opt/gitlab/bin/ && gitlab-backup create'(<gitlab_container_id>通过sudo docker ps获取)。/etc/gitlab/gitlab.rb、/etc/gitlab/gitlab-secrets.json)复制到宿主机:sudo docker cp <gitlab_container_id>:/etc/gitlab/gitlab.rb /opt/gitlab_backup/、sudo docker cp <gitlab_container_id>:/etc/gitlab/gitlab-secrets.json /opt/gitlab_backup/。docker cp backup.tar <gitlab_container_id>:/var/opt/gitlab/backups/)。