說明:下面命令中帶有<your container name>
字,是 gitlab 容器的名稱,請按實際情況進行代替
在創建備份之前,你不需要停止任何東西
docker exec -t <your container name> gitlab-rake gitlab:backup:create
gitlab_backup.sh
content:
#! /bin/bash
case "$1" in
start)
docker exec -t <your container name> gitlab-rake gitlab:backup:create
;;
esac
嘗試腳本是否可以正常運行
gitlab_backup.sh start
將腳本放入到 /root下,並使用 sudo crontab -e
添加一下內容
0 2 * * * /root/gitlab_backup.sh start
重啟cron服務
sudo service cron reload
sudo service cron restart
進入gitlab容器:
#來自Gitlab docker外的Ubuntu主機
sudo docker exec -it <your container name> /bin/bash
查看gitlab 本地的備份路徑
gitlab_rails['backup_path']
在 Gitlab 配置文件 gitlab.rb
是 注釋的, 它的默認備份路徑是在 /var/opt/gitlab/backups
.
# 來自Gitlab Docker
root@bcc3d4829e2c:/# cat /etc/gitlab/gitlab.rb | grep backup_path
# gitlab_rails['manage_backup_path'] = true
# gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
創建一份備份
檢測備份
# 來自Gitlab Docker
root@bcc3d4829e2c:/etc/gitlab# ls -lart /var/opt/gitlab/backups
total 2777464
drwxr-xr-x 20 root root 4096 May 24 02:10 ..
drwx------ 2 git root 4096 May 24 02:15 .
-rw-r--r-- 1 root root 2844108800 May 24 02:18 1563732042_2019_07_21_11.1.4_gitlab_backup.tar
備份配置文件和 密鑰文件
在上面創建備份時,沒有備份 配置文件和密鑰文件,這是因為上面一步是使用 使用密鑰文件加密Gitlab 數據,如果你將他們保存相同的地方,你將會破壞加密過程。
所以請備份 /etc/gitlab/gitlab.rb
和/etc/gitlab/gitlab-secrets.json
並且將他們保存在一個其它Gitlab 備份數據的安全的地方
還原 Gitlab
你只能通過Gitlab 備份還原 一樣的Gitlab版本和類型。並且你需要一個運行中的Gitlab實例。
停止一些 Gitlab 服務
# 來自Gitlab Docker
gitlab-ctl reconfigure
gitlab-ctl start
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl status
ls -lart /var/opt/gitlab/backups
開始還原
備份文件一定可以在 定義在 Gitlab 配置文件/etc/gitlab/gitlab.rb
的gitlab_rails['backup_path']
的路徑下找到
在 docker 外主機終端執行
#來自Gitlab docker外的Ubuntu主機
docker exec -it <your container name> gitlab-rake gitlab:backup:restore --trace
還原過程中會出現2次 Do you want to continue (yes/no)?
的詢問操作,都輸入yes
之后,按Enter
回車鍵確認操作。
我們當然添加
BACKUP
參數來指定備份文件如果有多個備份文件在備份目錄下,BACKUP
參數的值是 備份文件的時間戳,比如:docker exec -it <your container name> gitlab-rake gitlab:backup:restore BACKUP=1563732042_2019_07_21_11.1.4 --trace
重啟Gitlab並安全檢查
使用gitlabctl restart
命令重啟Gitlab服務
# 來自Gitlab Docker
gitlab-ctl restart
使用gitlab-rake gitlab:check SANITIZE=true
命令來發起Gitlab安全檢查
# 來自Gitlab Docker
gitlab-rake gitlab:check SANITIZE=true
使用docker ps
來驗證 Gitlab 容器健康
#來自Gitlab docker外的Ubuntu主機
sudo docker ps
重置root用戶密碼:
gitlab ce 官方文檔How to reset your root password
進入 docker 容器命令行內,執行
# Form Docker container /bin/bash
# 執行下面的命令啓動一個 Ruby on Rails console,等待 console加載完成
root@44b33d22e70f:/# gitlab-rails console production
-------------------------------------------------------------------------------------
GitLab: 11.1.4 (63daf37)
GitLab Shell: 7.1.4
postgresql: 9.6.8
-------------------------------------------------------------------------------------
Loading production environment (Rails 4.2.10)
irb(main):001:0> user = User.where(id: 1).first #這裏通過用戶id查詢用戶,也可以通過email或用戶名查詢
=> #<User id:1 @root>
irb(main):002:0> user.password="12345678" #設置密碼
=> "12345678"
irb(main):003:0> user.password_confirmation="12345678" #確認密碼
=> "12345678"
irb(main):004:0> user.save! # 保存修改
Enqueued ActionMailer::DeliveryJob (Job ID: 38850b0d-7690-47b7-b5c9-9cf975bae8fd) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", gid://gitlab/User/1
=> true
irb(main):005:0> quit #退出 Ruby on Rails console