1. 程式人生 > >一鍵安裝Gitlab後的備份、遷移與恢復

一鍵安裝Gitlab後的備份、遷移與恢復

1.Gitlab建立備份
#gitlab-rake gitlab:backup:create

使用以上命令會在/var/opt/gitlab/backups目錄下建立一個名稱類似為1393513186_gitlab_backup.tar的壓縮包, 這個壓縮包就是Gitlab整個的完整部分, 其中開頭的1393513186是備份建立的日期。
2.Gitlab恢復
# 停止相關資料連線服務
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

# 從1393513186編號備份中恢復
gitlab-rake gitlab:backup:restore BACKUP=1393513186

# 啟動Gitlab
sudo gitlab-ctl start

3.Gitlab遷移
遷移如同備份與恢復的步驟一樣, 只需要將老伺服器/var/opt/gitlab/backups目錄下的備份檔案拷貝到新伺服器上的/var/opt/gitlab/backups即可(如果你沒修改過預設備份目錄的話)。但是需要注意的是新伺服器上的Gitlab的版本必須與建立備份時的Gitlab版本號相同. 比如新伺服器安裝的是最新的8.5版本的Gitlab, 那麼遷移之前, 最好將老伺服器的Gitlab 升級為8.5再進行備份。
4.自動備份
通過crontab使用備份命令實現自動備份:

sudo su -
crontab -e

例如加入以下, 實現每天凌晨2點進行一次自動備份:

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

4.注意事項
新增這項是因為新增自動備份後的幾天時間裡,Gitlab所在的KVM一直宕機。通過模擬cron計劃任務,發現第一條gitlab建立備份的過程是先備份出許多(db、repo等檔案),再通過這些檔案合併成一個備份壓縮包,最後刪除檔案,只剩一個備份壓縮包。這就相當於先產生2倍備份壓縮包,導致磁碟爆滿。

恢復過程中遇到一個錯誤:

Started GET "/EagleEye/BMH.EagleEye" for 127.0.0.1 at 2016-10-25 10:54:32 +0800


Processing by ProjectsController#show as HTML
Parameters: {"namespace_id"=>"EagleEye", "id"=>"BMH.EagleEye"}
Completed 500 Internal Server Error in 215ms (ActiveRecord: 19.5ms)

OpenSSL::Cipher::CipherError (bad decrypt):
app/models/project.rb:383:inimport_url’app/models/project.rb:413:in external_import?'
app/models/project.rb:405:inimport?’ app/models/project.rb:421:in import_in_progress?'
app/controllers/projects_controller.rb:93:inshow’lib/gitlab/middleware/go.rb:16:in call'

系統是centos 6.2的 ,gitlab是8.8.5遷移到另外一臺伺服器上的,其它頁面都可以正常顯示,但是一點選專案就會顯示500,。檢視/var/log/gitlab/gitlab-rails/production.log日誌,發現上述錯誤 。
通過搜尋知道,這是gitlab資料遷移時的一個缺陷。解決方法:

1、覆蓋原來gitlab的 db_key_base 到新的gitlab
db_key_base 位置在 /etc/gitlab/gitlab-secrets.json

2、EE版本執行
sudo gitlab-rails runner "Project.where(mirror: false).where.not(import_url: nil).each { |p| p.import_data.destroy if p.import_data }"

CE版本執行
sudo gitlab-rails runner "Project.where.not(import_url: nil).each { |p| p.import_data.destroy if p.import_data }"

重啟gitlab,發現500錯誤不見,專案能訪問到。