安裝
# 安裝依賴包 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,第一次登錄需要重置密碼
默認會安裝的組件:
- Nginx 提供代理服務
- Redis 存儲用戶登錄會話,默認會話永不過期
配置
/etc/gitlab/gitlab.rb | 主配置文件 |
/var/log/gitlab/ | 日志目錄 |
/var/opt/gitlab/ | 各個服務的主目錄 |
/var/opt/gitlab/git-data/repositories | GIT倉庫數據目錄 |
修改默認倉庫數據存儲位置
# 建立目錄並修改目錄權限 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,因為不信任的證書很不方便。