版本管理工具Git(二)GitLab部署和配置

昀溪發表於2018-08-12

安裝

# 安裝依賴包
sudo yum install -y curl policycoreutils-python openssh-server
# 啟用並啟動SSHD
sudo systemctl enable sshd
sudo systemctl start sshd
# 在防火牆上永久允許HTTP,並重啟防火牆
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld

安裝Postfix來傳送通知郵件,當然也可以使用其他SMTP伺服器來傳送郵件

 

下載GitLab的RPM包進行安裝,下載地址 我這裡下載的是CE版本,EE是企業版收費的。

我這裡用7

我這裡用第一種方法

修改/etc/gitlab/gitlab.rb配置檔案

另外把在DNS上配置這個域名指向這個IP,或者修改你自己機器的本地HOST檔案。這裡的配置是說外部訪問GitLab透過哪個域名來訪問。啟動gitlab

# 這個命令是對GitLab以及其包含的所有元件生效的,也就是重啟、停止、啟動和重新配置
# reconfigure 的意思是重新配置,每次修改配置檔案後需要執行,然後執行restart
gitlab-ctl stop|start|restart|reconfigure
# 檢視當前執行狀態
gitlab-ctl status

可以看到除了GitLab之外還有很多獨立元件,這都是安裝包一起安裝的。這些獨立元件也可以進行啟動或者關閉。具體看官方文件

登入

預設使用者名稱是root,第一次登入需要重置密碼

說明:上圖中Project就是倉庫、User就是使用者、Group並不是使用者組,而是專案。它的關係是這樣一個Group可以包含N個Project。

預設會安裝的元件:

  • Nginx 提供代理服務
  • Redis 儲存使用者登入會話,預設會話永不過期

配置

常用目錄
/etc/gitlab/gitlab.rb 主配置檔案
/var/log/gitlab/ 日誌目錄
/var/opt/gitlab/ 各個服務的主目錄
/var/opt/gitlab/git-data/repositories GIT倉庫資料目錄
/var/opt/gitlab/backups 執行備份後,備份檔案存放路徑

 

 

 

 

 

 

 

修改預設倉庫資料儲存位置

# 建立目錄並修改目錄許可權
mkdir –p /data/git-data
chown git:root /data
chown git:root /data/git-data
chmod 700 /data
chmod 700 /data/git-data

修改配置檔案

修改後要執行如下命令:

gitlab-ctl reconfigure
gitlab-ctl restart

原來的目錄有資料,那麼你修改了儲存位置還需要做如下操作

主要就是把原來的資料移動過來,同時修復許可權問題。如果是同一臺機器可以使用cp –rp複製並保留許可權。因為我們這裡是新建的所以不存在這樣的問題。我們建立一個專案看看資料會放到哪裡?

使用者和組的管理

預設情況下omnibus-gitlab管理使用者和組,有些時候我們需要使用外部的系統來管理使用者和組比如透過LDAP,成熟的產品有OpenLDAP以及微軟的活動目錄,如果我們要引入外部的使用者和組的管理就需要禁用gitlab的使用者管理功能。

自帶使用者管理功能

建立組

建立使用者

新增使用者到組

這裡要選擇使用者以及給予這個使用者的專案角色,角色和許可權相關,一般開發人員就使用【Developer】角色就行。

與Active Directory服務基礎使用外部使用者管理

微軟的AD服務中使用的就是LDAP,當然使用Linux系統的LDAP也可以,只是微軟的AD對於使用者管理非常方便。我個人覺得不要迷戀開源非開源的也有很多好東西。

首先需要有一臺活動目錄伺服器(安裝略)
其次禁用GitLab的使用者和組的管理

配置與AD的LADP協議整合
活動目錄結構是這樣的,所有使用者都在Company這個OU下面,在這個OU下面建立不同的OU。

下面的配置是YAML格式的,格式一定要正確,否則會報錯。

下面還有一個Secondary,這個是GitLab企業版支援的功能也就是配置兩個LDAP伺服器,社群版只能用一個。

配置完執行

gitlab-ctl reconfigure

檢查是否可以讀取LDAP資訊,執行

gitlab-rake gitlab:ldap:check

最後重啟GitLab,再次開啟登入頁面

輸入使用者名稱域賬號wangtao和密碼點選登入

關於bind_dn的說明:這個是說你用哪個賬號來繫結,如何查詢賬號請看下圖。這個我這裡用的是預設的域管理員,你可以用其他的只要許可權夠就可以。

 關於uid的說明:這裡面有兩種一個是cn;一個是sAMAccountName,有什麼區別呢?如果你的域使用者都是英文名稱那用哪一個都一樣,但是如果大部分人都是中文個別外國人是英文,那還是用sAMAccountName。我們來看看這2個名稱是什麼,透過AD編輯器檢視物件屬性。

 

 

Cn是中文的,而sAMAccountName是英文的,再看下圖AD使用者和計算機中的使用者屬性,顯示名是中文的,而登陸用的名稱時英文的。所以你會看到如果是中文的這兩個名字有區別,所以你要配置成sAMAccountName,否則你會無法登陸。

 

關於base的說明:這裡是說從AD中的那個節點開始查詢使用者,當然你可以設定從AD的根上開始查詢,但是這樣沒有意義,我這裡就是設定從存放員工賬號的節點開始查詢。

 

關於allow_username_or_email_login的說明:含義是是否啟用使用者名稱或者郵件地址登陸,建議不啟用。因為我們繼承AD通常是使用userPrincipalName登陸,也就是下面紅框裡面的格式,它的確看起來是郵件地址的格式,但是如果allow_username_or_email_login禁用,那麼GitLab會把整個輸入當做使用者名稱包括@,如果你啟用這個選擇,那麼GitLab會截斷@後面的,導致你使用userPrincipalName這種名稱無法登陸。

 

 其他配置說明:

  • active_directory:如果你的LDAP伺服器是活動目錄,那麼就配置成true
  • timeout:查詢LDAP服務的超時時長
  • block_auto_created_users:這個不太明白,官方文件說這個作用是嚴格控制GitLab安裝中的活躍使用者數量,啟用該選項新使用者則會被阻止,直到管理員處理。

禁用使用者註冊

既然透過AD管理使用者那就沒必要開啟使用者註冊功能

 

 

再次開啟頁面就沒有註冊標籤了

上面說的一些概念在Linux的LDAP中也適用。

參考文件:

https://docs.gitlab.com/omnibus/settings/ldap.html
https://docs.gitlab.com/ee/administration/auth/ldap.html

儲存和目錄管理

 

預設路徑 許可權 屬組屬主 作用
/var/opt/gitlab/git-data 0700 git:root 倉庫目錄
/var/opt/gitlab/git-data/repositories 2700 git:root Git倉庫
/var/opt/gitlab/gitlab-rails/shared 0751 git:gitlab-www 大物件目錄
/var/opt/gitlab/gitlab-rails/shared/artifacts 0700 git:root 持續整合目錄
/var/opt/gitlab/gitlab-rails/shared/lfs-objects 0700 git:root LFS物件
/var/opt/gitlab/gitlab-rails/uploads 0700 git:root 使用者上傳附件目錄
/var/opt/gitlab/gitlab-rails/shared/pages 0750 git:gitlab-www 使用者站點頁面
/var/opt/gitlab/gitlab-ci/builds 0700 git:root 持續整合構建日誌路徑
/var/opt/gitlab/.ssh 0700 git:root 驗證KEYS

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

上面這些目錄是在omnibus-gitlab包安裝的時候自動建立的,有些目錄會儲存較大的資料,通常這些目錄我們會單獨掛載到一個分割槽中比如NFS或者其他地方。我們可以透過在配置檔案中搜尋路徑來修改。 

日誌檢視

日誌可以透過命令檢視而不需要到日誌目錄中

# 檢視所有日誌
gitlab-ctl tail
# 檢視NGINX的訪問日誌
gitlab-ctl tail nginx/gitlab_access.log 

https://docs.gitlab.com/omnibus/settings/logs.html

啟用SSL

預設沒有啟用SSL,你需要啟用SSL並提供證照檔案,然後修改NGINX配置。我們這裡建立一個自簽名證照。

建立證照目錄並把證照複製過去

把這裡改成https

配置證照路徑,開啟重定向。預設情況下如果你只修改了上面的,那麼NGINX將不會監聽80埠,這樣你訪問80埠的網站就失敗,所以這裡要開啟重定向功能。

更新配置

gitlab-ctl reconfigure

如果開啟了防火牆需要新增下面的規則

再次登入

雖然是不信任但是已經應用了證照,實際工作中我們肯定是去公共的機構去申請證照。過程就是這樣,我這裡為了方便又禁用了SSL,因為不信任的證照很不方便。

備份指令碼

#!/bin/bash

echo "停止Gitlab unicorn sidekiq 服務."
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

echo "開始執行備份"
gitlab-rake gitlab:backup:create

echo "請到該 /var/opt/gitlab/backups 目錄下檢視備份。"

echo "重新啟動gitlab"
gitlab-ctl start

 

相關文章