Gitlab 備份/還原設定筆記

source link http://mycodetub.logdown.com/posts/260395-gitlab-backup-restore-settings-notes

這一陣子在熟悉使用 git 版本控制軟體之後,不免也會想要自己架設一個 git server 來存放自己平常工作的測試程式或休閒時間所寫的小 App。只不過 git server 的架設好像沒有像之前使用 VisualSVN Server 那麼容易,只要 下一步工程師 就可以完成。
後來有朋友推薦使用 GitLab 來架設 Git Server,也滿好用的。使用他提供的 omnibus 安裝,其實也是非常容易,只不過目前只有提供安裝在 Ubuntu, CentOS, 或 Debian 上而已。

好啦~講重點:

這份筆記的目的就是要防止萬一哪一天,架設 GitLab 的電腦硬碟掛點(畢竟我不是用高檔有 Raid 的 Server 所架設,只是用一般的PC),我存放在上面的心血結晶不會消失。所以需要他每天自動備份到另一台電腦,萬一哪天需要的時候可以及時還原。

假設:

  • 我在 CodetubPC 上分享的資料夾名稱是 *** GitlabBackupFolder ***
  • 有權限存取的 User 是 backupadmin, 密碼是 12345
  • 在 CodetubUbuntu 上要將 windows 電腦分享的資料夾掛載到 /mnt/CodetubPC/GitlabBackupFolder

則我可以這樣做:

  1. 修改 GitLab 的設定檔 /etc/gitlab/gitlab.rb

    搜尋 gitlab_rails[`backup_path`] 的內容修改成 /mnt/CodetubPC/GitlabBackupFolder

    仔細看裡面的設定,還可以設定備份的區間,太舊的會自動幫忙刪除。

  2. 執行以下指令,讓修改生效

    gitlab-ctl reconfigure
    gitlab-ctl restart
    
  3. 將 CodetubPC 所分享的資料夾掛載到 /mnt/CodetubPC/GitlabBackupFolder

    MOUNT_POINT=/mnt/CodetubPC/GitlabBackupFolder
    SHARE_FOLDER=//CodetubPC/GitLabBackupFolder
    DOMAIN=CodetubPC
    USERNAME=backupadmin
    PASSWORD=1234
    
    mount -t cifs $SHARE_FOLDER $MOUNT_POINT -o username="$USERNAME",password="$PASSWORD",domain="$DOMAIN",iocharset=utf8,file_mode=0777,dir_mode=0777,guest
    // 這裡你也可以不用 guest, 可以使用 gid=xxxx 或 uid=xxxx 來指定給某個群組或個人, guest 只是比較偷懶的作法
    // 如果遇到失敗可以檢查一下是否有套件沒裝到,再使用 apt-get install 安裝
    // apt-get install nfs-common
    // apt-get install cifs-utils
    
  4. 使用 root 的身份設定排成,定時備份

    $sudo su // 切換到 root 身份
    #crontab -e // 設定排成
    

    開啟編輯器後,將下面這行加入,這行的意思是代表每天的凌晨兩點進行備份。詳細的排成設定可以參考鳥哥的教學

    0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
    

    其中 gitlab-rake gitlab:backup:create 是代表要備份的意思。

如此一來,就完成了自動備份設定了。系統會在每天凌晨兩點自動幫你把整個 gitlab server 的資料打包備份起來。以備不時之需。

還原

當需要使用到還原時,記得要使用同一個版本的 Gitlab Server, 否則還原失敗的機率會很高!

  1. 首先當然是先安裝好你的 Gitlab Server
  2. 確認你有將備份檔案複製到 /var/opt/gitlab/backups 這個資料夾底下

    通常備份檔會長這樣 [TIMESTAMP]_gitlab_backup.tar

    sudo cp 1393513186_gitlab_backup.tar /var/opt/gitlab/backups/
    
  3. 指定某一個 timestamp 並執行以下指令進行還原(timestamp 就是備份檔前面那串數字)

    // 停止 gitlab 的服務
    sudo gitlab-ctl stop unicorn
    sudo gitlab-ctl stop sidekiq
    // 這一部要指定某個備份檔進行還原
    sudo gitlab-rake gitlab:backup:restore BACKUP=1393513186
    // 啟動 gitlab
    sudo gitlab-ctl start
    // Create satellites
    sudo gitlab-rake gitlab:satellites:create      
    // Check GitLab
    sudo gitlab-rake gitlab:check SANITIZE=true
    

這樣就大功告成了!!

RECAPE

要做到備份 Gitlab 資料到遠端 windows 分享出來的資料夾,其實主要的設定:

  1. 修改 /etc/gitlab/gitlab.rb 內的 gitlab_rails['backup_path'] 以及 gitlab_rails['backup_keep_time'] 這兩個參數。 (backup_path 記得要指向等一下要掛載(mount)的路徑)
  2. 執行指令 gitlab-ctl reconfigure 使修改生效。
  3. 使用 ubuntu 去掛載(mount) Windows 所分享出來的資料夾
  4. 使用 root 身份去增加排程固定時間執行 gitlab 備份指令。

要還原時主要步驟:

  1. 先安裝與之前備份時相同版本的 Gitlab
  2. 停止 gitlab 的服務
  3. 將要還原的備份檔放到 /var/opt/gitlab/backups/ 位置
  4. 下指令指定要還原的 TIME_STAMP 備份檔
  5. 啟動 gitlab, Create satellites, Check gitlab … 完成

Reference