安裝
# 安裝依賴包 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