這裡記錄一下架設 Gitlab 的流程和遇到的問題
架設 Gitlab 流程
- 安裝 Ubuntu 18.04
- 安裝 Docker-CE
- 安裝 Docker-compose 套件
- 撰寫 docker-comopse.yml
- 執行 docker-compose
docker-compose up -d
- 打 ip 後,第一次會先進設定密碼頁面,這裡要輸入的是 root 密碼
- 確定後,重新登入時,帳號是 root ,密碼就是上面的密碼
- 利用 root 登入後,可以考慮優先調整的設定值
- General
- Default 的 project 狀態
- RSA ssh keys 是否有設定最少位元數 (ex:4096 bits)
- General
- 安裝完成
使用內含 OMNIBUS 的 docker-compose.yml 檔
version: '3.0'
services:
gitlab:
image: gitlab/gitlab-ce:12.9.2-ce.0
hostname: gitlab.example.com
container_name: gitlab
restart: always
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url "http://192.168.17.89:8088"
gitlab_rails['gitlab_shell_ssh_port'] = 8089
gitlab_rails['lfs_enabled'] = true
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
gitlab_rails['backup_keep_time'] = 604800
volumes:
- ./gitlab/config:/etc/gitlab
- ./gitlab/logs:/var/log/gitlab
- ./gitlab/data:/var/opt/gitlab
ports:
- "443:443"
- "8088:8088"
- "8089:22"
networks:
- devel-net
networks:
devel-net:
檔案使用說明
- 使用上面的 docker-compose 文件則不用再修改 gitlab.rb 檔案
- 如果把 environment 部份拿掉的話,則要把要修改的部份改在 gitlab.rb 檔案中,最起碼要修改 external_url 和 gitlab_shell_ssh_port 這兩項
- 預設進去的網址是 http://192.168.17.89:8088
- gitlab image 可以直接使用 :latest 版本,但我習慣指定版本,省得之後如果安裝失敗時還需要花時間去檢查是不是因為新版造成的錯誤。目前測試至少 :12.9.2-ce.0 這個版本是沒問題的
重點
- 現在的 gitlab 的 docker image 都已經內建 OMNIBUS 了,OMNIBUS 是一個套件,可以用較簡單的方式修改分佈在 gitlab server 裡各地的設定檔。因為有 OMNIBUS 的關係,所以可以直接進去 Gitlab 的 docker 裡使用 ==gitlab-ctl== 指令去操作 Gitlab。
- 如果是使用 docker image 的話,記得一定要將內部原本的 22 port 導到外部的其他 port ,這裡是使用8089,原因是因為本機端的 22 常常是被其他原因佔用的,因此要換掉。
- 把網頁端的 80 換成 8088 是因為未來如果有使用 smtp service 的話 80 port 有可能會被佔用到,因此我們這裡先換成走 8088
- 在 Docker-compose.yml 中可以加上環境變數裡的 GITLAB_OMNIBUS_CONFIG,這裡會直接覆蓋 gitlab.rb 裡的設定,但是只有每一次利用 docker-compose 啟動 docker 時才會發生效用。
- 查看 gitlab 版號
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
特別的檔案路徑
- gitlab.rb /etc/gitlab
備份
備份設定檔
- 先確定在 gitlab.rb 裡,有三個東西已經設定完成 (理論上如果用上面那份 yml 的話是已經設定好了)
sudo docker exec -it gitlab vim /etc/gitlab/gitlab.rb
- gitlab_rails['manage_backup_path'] = true
- gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
- gitlab_rails['backup_keep_time'] = 604800
- 如果有做 rb 修改的話要 reconfigure
sudo docker exec -it gitlab gitlab-ctl reconfigure
- 確定上面的部份已經完成後,可以開始備份 Gitlab Config
注意sudo tar -czf "gitlab-config-$(date +%s).tgz" /srv/gitlab/config
後面那一串 /src/gitlab/config 是預設 docker 外 config 的存放位置,如果你的位置不是在這的話要自己代換掉。以上面那份 yml 檔案來說,config 檔的位置是在 /gitlab/config
備份 Data
- 以手動方式執行備份 Data 程式
sudo docker exec -it gitlab gitlab-rake gitlab:backup:create
- 執行完後,會在 backup_path 裡看到備份檔,檔案長相會類似 1555227555_2019_04_14_11.9.8_gitlab_backup.tar ,其中檔名部份就包含了時間戳記,年月日,和 Gitlab 版本號碼
還原
還原預備
還原前的預備動作,要確定以下幾個部份已完成
- 執行備份與恢復的 Gitlab 版本必須要一致
- 恢復前至少執行過一次 (gitlab-ctl reconfigure)
- Gitlab 需於運作狀態中 (gitlab-ctl start)
還原流程
- 使用以上 yml 檔安裝 Gitlab,版本要和原本 Gitlab 一致
- 確定 Gitlab 可以運作後(不用輸入什麼密碼了,直接看 logs 就好),先停止 Gitlab
sudo docker stop gitlab
- 刪除 container 裡的 config 資料夾,並直接將之前已備份的資料夾 tar 檔解開並把 config 檔再放回原來的位置
sudo tar -xzf "gitlab-config-1555227555.tgz" -C /
- 重啟 Gitlab
sudo docker start gitlab
- 把 Data 備份檔先放回 backup_path 中
- 進 gitlab container
sudo docker exec -it gitlab /bin/bash
- 先修改備份的 tar 檔權限
chown git:git 1496588975_2017_06_04_gitlab_backup.tar
- 停止數據服務
gitlab-ctl stop unicorn gitlab-ctl stop sidekip
- 檢查狀態
gitlab-ctl status
- 還原備份
sudo gitlab-rake gitlab:backup:restore BACKUP=1555227555_2019_04_14_11.9.8
- 重啟 gitlab
sudo gitlab-ctl restart sudo gitlab-rake gitlab:check SANITIZE=true
從 Gitolite 搬移 Git 到 Gitlab 上
- 先在 Gitlab 上開創好目地的資料夾,例如叫做 mygitlabproj.git
- 準備好 gitolite 上舊有的資料,例如叫做 myold.git
- 進去 myold.git,刪除舊有遠端資料,並建立新的遠端資料
$ git remote -v #這裡可以看到舊的遠端資料 $ git remote rm origin #刪除舊的遠端資料 $ git remote add origin ssh://git@my_gitlab_url:8089/my_user/mygitlabproj.git #建立新的遠端資料使其對應到 gitlab $ git remote -v #現在應該是看到新的遠端站點
- 推送所有的程式到新的站點,也就是 gitlab 站台上
$ git push -u origin --all