GitLab的備份與恢復

李济宏(Amadeus)發表於2024-11-26

一、備份

1. docker執行備份

docker exec gitlab gitlab-rake gitlab:backup:create

預設將備份檔案儲存至docker的/var/opt/gitlab/backups/ 目錄

這條命令是在 Docker 容器內部執行 GitLab 的備份操作。讓我來解釋一下這個命令的各個部分:
docker exec:這是 Docker 命令,用於在正在執行的容器內部執行命令。
gitlab:指定要操作的容器名稱或 ID,即執行 GitLab 服務的容器。
gitlab-rake gitlab:backup:create:這部分是在 GitLab 容器內部執行的實際命令。具體來說:
gitlab-rake:是 GitLab 提供的用於管理資料庫和執行其他任務的命令列工具。
gitlab:backup:create:是使用 gitlab-rake 工具建立 GitLab 資料庫備份的命令。
透過執行這條命令,GitLab 將會在容器內部建立一個資料庫備份。這樣可以確保資料的安全性和可恢復性。

執行完會有一個警告

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.

這個警告是在執行 GitLab 備份時提醒您,備份檔案中不包含 gitlab.rbgitlab-secrets.json 這兩個檔案,這兩個檔案包含了敏感資料,例如配置資訊和加密金鑰,因此在恢復備份時需要手動備份這兩個檔案。
為了確保完整的備份和恢復過程,請務必手動備份 gitlab.rbgitlab-secrets.json 檔案。

2. 備份敏感資料

docker cp gitlab:/var/opt/gitlab/backups/1709697433_2024_03_06_13.6.2_gitlab_backup.tar  /data/gitlab-bak/
docker cp gitlab:/etc/gitlab/gitlab.rb  /data/gitlab-bak/
docker cp gitlab:/etc/gitlab/gitlab-secrets.json  /data/gitlab-bak/

備份完成

二、資料的恢復

我們啟動新的容器,然後將剛才備份的檔案複製到容器裡,後面兩個檔案直接覆蓋即可

docker cp /data/gitlab-bak/1709697433_2024_03_06_13.6.2_gitlab_backup.tar  gitlab:/var/opt/gitlab/backups/
docker cp /data/gitlab-bak/gitlab-secrets.json   gitlab:/etc/gitlab/
docker cp /data/gitlab-bak/gitlab.rb   gitlab:/etc/gitlab/

複製完之後,我們進入容器,進入備份目錄,執行如下命令

docker exec -it gitlab bash
gitlab-rake gitlab:backup:restore BACKUP=1709697433_2024_03_06_13.6.2

如果沒有許可權,則執行

chmod 777 檔名

恢復之後,我們重新載入配置,並重啟gitlab

gitlab-ctl reconfigure 
gitlab-ctl restart 

相關文章