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/
)。