1. 遷移背景
公司的機房需要遷移,所以程式碼倉庫也要跟著遷。這邊先簡單介紹下之前 GitLab 的搭建和使用情況。
在遷移之前 GitLab 已經已經執行了一段時間,整個程式碼倉庫的資料量大約在 22G 左右,GitLab 基於 rpm 的方式進行安裝,程式碼資料每天進行全量備份,備份資料保留 7 天,備份的資料沒有申請 NAS 備份,而是備份在系統的一個資料分割槽上面。系統沒有加監控,我接手的時候,上面的資料備份分割槽都已經滿了,但是系統運維人員都不知道,導致後面的資料備份都是失敗的。
上面就是老 GitLab 大致的情況。遷移的方案:
- 選擇同版本的rpm安裝包:如果是新安裝 GitLab 的話建議使用 Docker 的安裝形式,但是網上有很多地方都說不同版本的 GitLab 對資料有相容性問題,GitLab 的資料又非常重要,所以為了謹慎起見還是選擇使用同版本的 rpm 包進行安裝;
- 備份策略:備份資料選擇保留 7 天意義不大,會佔用大量的磁碟空間,所以選擇保留2天的備份資料,並將資料備份到nas盤上面;
- 監控策略:磁碟,記憶體和 CPU 等基本監控指標納入監控。
2. GitLab 整體架構介紹
在開始安裝配置前,先來介紹下 GitLab 的整體架構,熟悉之後對後續的安裝、配置和運維都很有幫助。
- repository:儲存程式碼的庫,實際體現就是一個資料夾,可以是硬碟或 NFS 檔案系統;
- Nginx:訪問 Git Lab 的 Web 入口;
- 資料庫(PgSQL):包含以下資訊:
- repository 中的資料(後設資料,issue,合併請求 merge request 等)
- 可以登入 Web 的使用者(許可權)
- Redis:快取,負責分發任務;
- sidekiq:後臺任務,主要負責傳送電子郵件,任務需要來自 Redis;
- Unicorn:Gitlab 自身的 Web 伺服器,包含了 Gitlab 主程式,負責處理快速/一般任務,與 Redis 一起工作。工作內容包括:
- 通過檢查儲存在 Redis 中的使用者會話來檢查許可權
- 為 Sidekiq 製作任務
- 從倉庫(warehouse)取東西或在那裡移動東西
- gitlab-shell:用於 SSH 互動,而不是 HTTP。gitlab-shell 通過 Redis 與 Sidekiq 進行通訊,並直接或通過 TCP 間接訪問 Unicorn
- gitaly:後臺服務,專門負責訪問磁碟以高效處理 git 操作,並快取耗時操作。所有的 git 操作都通過 Gitaly 處理
- gitlab-workhorse:反向代理伺服器,可以處理與 Rails 無關的請求(磁碟上的CSS、JS 檔案等),處理Git Push/Pull 請求,處理到Rails的連線(修改由Rails傳送的響應或傳送給 Rails 的請求,管理 Rails 的長期 WebSocket 連線等)。
- mail_room:處理郵件請求。回覆 GitLab 發出的郵件時,GitLab 會呼叫此服務
3. GitLab 安裝
配置選擇
遷移之前,你要給你的新的 GitLab 伺服器的硬體做合理的配置選擇。
關於記憶體和 CPU 的配置,官網給出的推薦配置:
- 4核 4GB記憶體 支援 500 個使用者
- 8核 8GB記憶體 支援 1000 個使用者
根據自己的使用者量,做出合理的選擇。
關於儲存的配置,我這邊根據現有的GitLab 上的資料量選擇了1T的儲存
- 1個T的儲存空間
- 1個T的NAS盤坐資料備份
安裝方式選擇
GitLab 官網有詳細介紹安裝方式。因為我們的機器是在內網區域,不能連線網際網路,也為了和之前的安裝方式保持一致,所以選擇 RPM 包的安裝方式。(如果是初次安裝的話可以考慮使用 Docker 的安裝方式)
GitLab 的 RPM 包下載地址可以使用清華大學的映象。
下載之前你最好看下之前的版本,下載的版本最好是和之前一致,防止資料不相容。
一般使用下面命令檢視版本。
[root@localhost gitlab]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
12.1.1
安裝的網路區域
一般 GitLab 上都會儲存公司的核心程式碼,所以建議安裝在公司的內網區域。
安裝 GitLab
# rpm 包方式安裝
[root@i-lobhuk71 upload]# rpm -ivh ./gitlab-ce-12.1.1-ce.0.el7.x86_64.rpm --force
warning: ./gitlab-ce-12.1.1-ce.0.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID f27eab47: NOKEY
error: Failed dependencies:
policycoreutils-python is needed by gitlab-ce-12.1.1-ce.0.el7.x86_64
# 出現上面的錯誤,是因為缺少policycoreutils-python,安裝依賴
[root@i-lobhuk71 upload]# yum install policycoreutils-python
# 再次執行
[root@i-lobhuk71 upload]# rpm -ivh ./gitlab-ce-12.1.1-ce.0.el7.x86_64.rpm --force
warning: ./gitlab-ce-12.1.1-ce.0.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID f27eab47: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:gitlab-ce-12.1.1-ce.0.el7 ################################# [100%]
It looks like GitLab has not been configured yet; skipping the upgrade script.
*. *.
*** ***
***** *****
.****** *******
******** ********
,,,,,,,,,***********,,,,,,,,,
,,,,,,,,,,,*********,,,,,,,,,,,
.,,,,,,,,,,,*******,,,,,,,,,,,,
,,,,,,,,,*****,,,,,,,,,.
,,,,,,,****,,,,,,
.,,,***,,,,
,*,.
_______ __ __ __
/ ____(_) /_/ / ____ _/ /_
/ / __/ / __/ / / __ `/ __ \
/ /_/ / / /_/ /___/ /_/ / /_/ /
\____/_/\__/_____/\__,_/_.___/
Thank you for installing GitLab!
GitLab was unable to detect a valid hostname for your instance.
Please configure a URL for your GitLab instance by setting `external_url`
configuration in /etc/gitlab/gitlab.rb file.
Then, you can start your GitLab instance by running the following command:
sudo gitlab-ctl reconfigure
For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md
# 初始化Gitlab命令(儲存配置或重新載入配置):
[root@i-lobhuk71 upload] gitlab-ctl reconfigure
執行完上面的命令後,可以看到下面的目錄結構:
- /opt/gitlab/ # 主目錄
- /etc/gitlab/ # 放置配置檔案
- /var/opt/gitlab/ # 各個元件
- /var/log/gitlab/ # 放置日誌檔案
- /var/opt/gitlab/git-data/repositories #資料庫的地址
- /var/opt/gitlab/postgresql/data #gitlab組和專案的地址
- /etc/gitlab/gitlab.rb #gitlab配置檔案
GitLab 常用命令
# Gitlab服務的啟停管理
啟動服務: gitlab-ctl start
停止服務: gitlab-ctl stop
重啟服務: gitlab-ctl restart
檢視狀態: gitlab-ctl status
# Gitlab的supervisor方式啟動服務
服務啟動命令: systemctl start gitlab-runsvdir.service
服務停止命令: systemctl stop gitlab-runsvdir.service
服務重啟命令: systemctl restart gitlab-runsvdir.service
服務開機啟動命令: systemctl enable gitlab-runsvdir.service
取消開機啟動命令: systemctl disable gitlab-runsvdir.service
服務檢視命令: systemctl list-unit-files
# 可以檢視到gitlab所有外掛的日誌情況
Gitlab服務日誌檢視:/usr/bin/gitlab-ctl tail
配置管理員賬號密碼
經過上面的配置已經可以通過 IP 地址(安裝伺服器的IP)訪問了,首次訪問會讓你建立管理員密碼(賬號預設是root)。
4. 配置 GitLab
配置external_url,修改clone地址
external_url
編輯/etc/gitlab/gitlab.rb
,修改其中的external_url
配置:
## GitLab URL
##! URL on which GitLab will be reachable.
##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
## 這邊配置成本機的IP地址就可以了
external_url 'http://10.2.xx.xx'
clone地址
將克隆地址改成域名(http形式,不是https形式)
編輯/var/opt/gitlab/gitlab-rails/etc/gitlab.yml
,將下面的host改成域名。
最後執行 gitlab-ctl restart
命令使之配置生效,注意不要執行 gitlab-ctl reconfigure
。
配置 Ldap
[root@gitlab ~] vim /etc/gitlab/gitlab.rb
......
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-EOS # remember to close this block with 'EOS' below
main: # 'main' is the GitLab 'provider ID' of this LDAP server
label: '哈哈集團-Gitlab登入入口'
host: '192.168.10.141'
port: 389
uid: 'userPrincipalName'
method: 'plain' # "tls" or "ssl" or "plain"
allow_username_or_email_login: false
bind_dn: 'cn=王一,ou=技術運維部,dc=kevin,dc=com'
password: '9oGlYkgDzhp5k6JZ'
active_directory: true
base: 'ou=技術運維部,dc=kevin,dc=com'
user_filter: ''
EOS
# 接著執行下面命令,使上面配置生效:
# 這裡最好使用該命令,表示過載配置。不要使用"gitlab-ctl restart"重啟服務,否則可能出現500報錯!
[root@gitlab ~]# gitlab-ctl reconfigure
# 然後執行下面命令,檢查LDAP資訊是否成功同步過來
[root@gitlab ~]# gitlab-rake gitlab:ldap:check
Checking LDAP ...
Server: ldapmain
LDAP authentication... Success
LDAP users with access to your GitLab server (only showing the first 100 results)
DN: CN=李某某,OU=技術運維部,DC=kevin,DC=com userPrincipalName: limoumou@kevin.com
DN: CN=李二,OU=技術運維部,DC=kevin,DC=com userPrincipalName: lier@kevin.com
DN: CN=lier1,OU=技術運維部,DC=kevin,DC=com userPrincipalName: lier1@kevin.com
DN: CN=test,OU=技術運維部,DC=kevin,DC=com userPrincipalName: test@kevin.com
DN: CN=王一,OU=技術運維部,DC=kevin,DC=com userPrincipalName: wangyi@kevin.com
DN: CN=張三,OU=技術運維部,DC=kevin,DC=com userPrincipalName: zhangsan@kevin.com
DN: CN=張三,OU=網路,OU=技術運維部,DC=kevin,DC=com userPrincipalName: zhangsan02@kevin.com
DN: CN=趙四,OU=網路,OU=技術運維部,DC=kevin,DC=com userPrincipalName: zhaosi@kevin.com
Checking LDAP ... Finished
設定定時備份
設定 GitLab 備份目錄
可以通過/etc/gitlab/gitlab.rb
配置檔案來修改預設存放備份檔案的目錄
# /var/opt/gitlab/backups 修改為你想存放備份的目錄即可, 修改完成之後使用gitlab-ctl reconfigure命令過載配置檔案即可.
gitlab_rails['backup_path']="/var/opt/gitlab/backups"
設定定時任務(crontab -e)
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
重啟crontab
systemctl restart crond
設定備份的天數
編輯/etc/gitlab/gitlab.rb檔案。
###! The duration in seconds to keep backups before they are allowed to be deleted
### keep 2 days
gitlab_rails['backup_keep_time'] = 172800
恢復備份的資料
# 停止相關資料連線服務
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
# 從1628100892_2021_08_05_12.1.1_gitlab_backup.tar 備份中恢復
gitlab-rake gitlab:backup:restore BACKUP=1628100892_2021_08_05_12.1.1
# 啟動Gitlab
gitlab-ctl start
申請 NAS 儲存備份資料
需要注意的是 NAS 盤是有寫入許可權的,GitLab 生成的檔案預設的使用者和使用者組都是git:git,所以在申請nas盤的時候需要將寫入許可權配置給git:git。
5. 問題記錄
備份過程中連線資料庫失敗
問題描述
PG::ConnectionBad: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/opt/gitlab/postgresql/.s.PGSQL.5432"?
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:49:inblock (3 levels) in <top (required)>' /opt/gitlab/embedded/bin/bundle:23:in
load'
/opt/gitlab/embedded/bin/bundle:23:in `'
Tasks: TOP => gitlab:db:configure
(See full trace by running task with --trace)
————————————————
版權宣告:本文為CSDN博主「ArvinWoo」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/qq_37595946/article/details/86534961
解決方法:
1、按住CTRL+C強制結束
2、先停止 gitlab ,命令: sudo gitlab-ctl stop
3、執行命令: sudo chmod 755 /var/opt/gitlab/postgresql
4、執行命令:sudo systemctl restart gitlab-runsvdir
5、再次配置:sudo gitlab-ctl reconfigure
6、啟動即可:sudo gitlab-ctl restart