在使用 Gitlab 之後,實現了自由自在的做版控,但隨之而來的就是資料安全問題,深怕哪一天硬碟掛掉不再運作,陷入心血付之一炬的窘境,雖然是使用 VN 來架設 Gitlab 的環境,可以設定 VM 的備份計畫,不過多備一份就多一份安心,不是嗎~
環境
| Gitlab 環境
— | —
Name | GitlabServer
OS | Ubuntu 14.04.4 LTS
Gitlab | GitLab Community Edition 8.9.3
| 備份目的地
— | —
Name | BackupServer
OS | Ubuntu 14.04.4 LTS
Protocol | Samba
操作步驟
以下操作是參考Gitlab 備份/還原設定筆記,並加上實作時其他問題的解決方法。
1.將 BackupServer 的分享資料夾掛載到 GitlabServer 上
1 | MOUNT_POINT=/mnt/BackupServer/gitlab_backup |
2.修改 GitLab 的設定檔 /etc/gitlab/gitlab.rb,將備份路徑設定值 gitlab_rails['backup_path'] 的內容,修改成 /mnt/BackupServer/gitlab_backup
3.執行下列指令使設定檔生效
1 | // 讓 Gitlab 套用新設定 |
4.此時可以使用 gitlab-rake gitlab:backup:create 來執行備份程序
5.使用 root 的身份設定 cron table 排程,做定時的備份
1 | // 切換到 root 身份,修改系統排程設定檔 |
6.開啟編輯氣候,在裡面加上下面這行,使系統每天 02:00 時,會執行 Gitlab 備份程序
1 | 0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create |
這樣就完成了相關備份手續。
實作時遇到的問題
在上述步驟 3 時,執行 gitlab-ctl reconfigure 時會出現
1 | Error executing action `create` on resource 'directory[/mnt/BackupServer/gitlab_backup]' |
這個錯誤應該是權限的問題造成無法成功寫入備份資料,但很神奇的是,在 /mnt/BackupServer/gitlab_backup 中,我是可以新增、修改、刪除檔案的。
山不轉路轉,於是我將 Gitlab 的備份路徑,改到 user 的家目錄底下,並在 cron table 中,增加一個排程
1 | 0 3 * * * find /home/user/gitlab_backup/ -name "*gitlab_backup.tar" -mtime -1 -exec /bin/cp -a {} /mnt/BackupServer$ |
就是在 02:00 的時候執行 Gitlab 的備份計畫(備份檔存在 user 家目錄下),於 03:00 的時候將該備份檔,複製至掛載的遠端硬碟中,順利解決備份至不同機器的目的。
定期清除備份資料
Gitlab 的備份檔案是不會被覆蓋的,依照上述做法,每天都會有一筆新的備份檔,這無形也是造成硬碟空間的耗損,因此可以在 cron table 中再增加一個排程,只保留七天內的備份檔。
1 | 0 3 * * * find /mnt/BackupServer/gitlab_backup/ -name "*gitlab_backup.tar" -mtime +3 -exec rm -rf {} \; |
完整排程程式碼
1 | ## Gitlab Backup |

參考資料: