一、GitLab簡介
GitLab 是一個用於倉庫管理系統的開源項目,使用Git作為代碼管理工具,並在此基礎上搭建起來的web服務
二、GitLab系統架構
git用戶的主目錄通常是/home/git(~git表示主目錄路徑),GitLab主要以/home/git用戶身份安裝在用戶主目錄中git。在主目錄中是gitlabhq服務器軟件所在的位置以及存儲庫(盡管存儲庫位置是可配置的)。裸存儲庫位於/home/git/repositories。GitLab是一個ruby on rails應用程序,因此可以通過研究ruby on rails應用程序的工作原理來學習內部工作的細節。為了通過SSH提供存儲庫,有一個名為gitlab-shell的附加應用程序,它安裝在/home/git/gitlab-shell。
GitLab 應用程序是下面所述的所有組件的集合:
1. repository:代碼庫,可以是硬盤或 NFS 文件系統
2. Nginx:Web 入口
3. 數據庫:包含以下信息:
- repository 中的數據(元數據,issue,合並請求 merge request 等)
- 可以登錄 Web 的用戶(權限)
4. Redis:緩存,負責分發任務
5. sidekiq:后台任務,主要負責發送電子郵件。任務需要來自 Redis
6. Unicorn:Gitlab 自身的 Web 服務器,包含了 Gitlab 主進程,負責處理快速/一般任務,與 Redis 一起工作。工作內容包括:
- 通過檢查存儲在 Redis 中的用戶會話來檢查權限
- 為 Sidekiq 制作任務
- 從倉庫(warehouse)取東西或在那里移動東西
7. gitlab-shell:用於 SSH 交互,而不是 HTTP。gitlab-shell 通過 Redis 與 Sidekiq 進行通信,並直接或通過 TCP 間接訪問 Unicorn
8. gitaly:后台服務,專門負責訪問磁盤以高效處理 git 操作,並緩存耗時操作。所有的 git 操作都通過 Gitaly 處理
9. gitlab-workhorse:反向代理服務器,可以處理與 Rails 無關的請求(磁盤上的CSS、JS 文件等),處理Git Push/Pull 請求,處理到Rails的連接(修改由Rails發送的響應或發送給 Rails 的請求,管理 Rails 的長期 WebSocket 連接等)。
10. mail_room:處理郵件請求。回復 GitLab 發出的郵件時,GitLab 會調用此服務
Sidekiq. Unicorn 和 GitLab-shell 是GitLab中處理任務的 3 個程序。
三、Gitlab安裝、配置、啟動管理
1、安裝Gitlab必要的依賴項,還將在系統防火牆中打開HTTP和SSH訪問
安裝命令:yum install -y curl policycoreutils-python openssh-server
激活命令:systemctl enable sshd
啟用命令:systemctl start sshd
防火牆命令:firewall-cmd --permanent--add-service=http && systemctl reload firewalld //如果系統已關閉防火牆選項,忽略此步驟。
2、安裝Postfix以發送通知電子郵件
安裝命令:yum install postfix
激活命令:systemctl enable postfix
啟用命令:systemctl start postfix
3、下載GitLab軟件包(社區版),地址:https://packages.gitlab.com/gitlab/gitlab-ce
4、查看Gitlab相關目錄,命令:find / -name gitlab
Gitlab目錄結構
/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配置文件
5、初始化Gitlab命令(保存配置或重新載入配置):gitlab-ctl reconfigure
6、Gitlab服務的啟停管理
啟動服務: gitlab-ctl start
停止服務: gitlab-ctl stop
重啟服務: gitlab-ctl restart
查看狀態: gitlab-ctl status
7、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
8、Gitlab服務日志查看:/usr/bin/gitlab-ctl tail //可以查看到gitlab所有插件的日志情況
四、Centos7下Gitlab快速安裝的操作記錄
1. 下面記錄centos7.5系統下的Gitlab安裝過程(最好找一台環境比較干凈的機器):
1)配置系統防火牆,把HTTP和SSH端口開放(關閉iptables或者開放ssh). [root@gitlab ~]# systemctl stop firewalld //臨時關閉 [root@gitlab ~]# systemctl disable firewalld //禁止開機啟動 [root@gitlab ~]# yum install curl openssh-server postfix cronie [root@gitlab ~]# systemctl start postfix.service [root@gitlab ~]# systemctl enable postfix.service [root@gitlab ~]# lokkit -s http -s ssh //如果iptables關閉了,這條命令就無需執行了。這條命令是用來設置防火牆的,開放http和ssh訪問端口 2)下載gitlab的rpm安裝包 [root@gitlab ~]# rpm -ivh gitlab-ce-12.5.0-ce.0.el6.x86_64.rpm --force //下載好安裝包 ------------------------------------------------- 警告:gitlab-ce-12.5.0-ce.0.el6.x86_64.rpm: 頭V4 RSA/SHA1 Signature, 密鑰 ID f27eab47: NOKEY 准備中... ################################# [100%] 正在升級/安裝... 1:gitlab-ce-12.5.0-ce.0.el6 ########## ( 31%) ........ ------------------------------------------------- 安裝后的gitlab默認路徑是/opt/gitlab(程序路徑)、 /var/opt/gitlab(配置文件路徑)。 3) 接着進行配置 [root@gitlab ~]# gitlab-ctl reconfigure 上面配置命令執行后,如沒有報錯,就說明gitlab配置成功。配置后會生成各應用服務配置文件,放在/opt/gitlab/etc下,日志路徑為/var/log/gitlab/ 4)然后啟動gitlab [root@gitlab ~]# gitlab-ctl start [root@gitlab ~]# gitlab-ctl status 5)最后就可以使用http://localhost順利訪問Gitlab了。整個安裝過程大概10分鍾搞定(rpm包下載比較費時間)
將ip訪問修改為域名訪問的更改方法:
1)首先將/etc/gitlab/gitlab.rb文件中的external_url 'http://gitlab.example.com'全部替換為external_url 'http://gitlab.eason.com' [root@code-server gitlab]# vim /etc/gitlab/gitlab.rb ---------------------------------------------- external_url 'http://gitlab.example.com' 改為: external_url 'http://gitlab.eason.com' ---------------------------------------------- 2)其次將下面/var/opt/gitlab/gitlab-shell/config.yml 里面的內容進行調整; ---------------------------------------------- gitlab_url: "http://127.0.0.1:8080" 修改為: gitlab_url: "http://gitlab.eason.com:8080" ---------------------------------------------- 將/var/opt/gitlab/gitlab-rails/etc/gitlab.yml文件進行調整; ---------------------------------------------- 修改:gitlab: ## Web server settings (note: host is the FQDN, do not include http://) host: gitlab.eason.com port: 80 https: false ----------------------------------------------- 注意:下面兩文件都是上面兩文件的軟鏈接,修改上面兩個文件即可 [root@code-server gitlab]# ll /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml lrwxrwxrwx 1 root root 43 Nov 9 18:00 /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml -> /var/opt/gitlab/gitlab-rails/etc/gitlab.yml [root@code-server gitlab]# ll /opt/gitlab/embedded/service/gitlab-shell/config.yml lrwxrwxrwx. 1 root root 39 Jun 11 20:04 /opt/gitlab/embedded/service/gitlab-shell/config.yml -> /var/opt/gitlab/gitlab-shell/config.yml 3)然后將下面文件中的gitlab.example.com全部替換為gitlab.eason.com /var/opt/gitlab/nginx/conf/gitlab-http.conf 4)最后執行"gitlab-ctl reconfigure"命令使之配置生效(注意最好不要執行"gitlab-ctl restart",只執行本命令即可)
2. Gitlab安裝后的幾個細節的配置
1) gitlab該版本安裝后,首次登錄需要設置root密碼。
2)在管理員賬號(root)登錄后,先把"注冊"功能關了,這樣就只能在管理員賬號下創建用戶。關閉注冊功能方法:
訪問http://gitlab.eason.com/admin/application_settings,如下:
關閉"Sign-up enabled"功能(特別注意:Sign-in enabled登錄功能不要關閉了,看清楚!)
3)設置郵件配置。
設置郵件,修改配置文件 /etc/gitlab/gitlab.rb [root@gitlab01 ~]# vim /etc/gitlab/gitlab.rb ........ gitlab_rails['gitlab_email_enabled'] = true gitlab_rails['gitlab_email_from'] = 'eason@126.com' gitlab_rails['gitlab_email_display_name'] = 'Gitlab' gitlab_rails['gitlab_email_reply_to'] = 'eason@126.com' gitlab_rails['gitlab_email_subject_suffix'] = '' gitlab_rails['gitlab_email_smime_enabled'] = false gitlab_rails['gitlab_email_smime_key_file'] = '/etc/gitlab/ssl/gitlab_smime.key' gitlab_rails['gitlab_email_smime_cert_file'] = '/etc/gitlab/ssl/gitlab_smime.crt' user["git_user_email"] = "eason@126.com" ........ gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.126.com" gitlab_rails['smtp_port'] = 25 gitlab_rails['smtp_user_name'] = "eason@126.com" gitlab_rails['smtp_password'] = "xxxxxxxxx" gitlab_rails['smtp_domain'] = "126.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = false
設置完成后,進行檢查,可以通過創建新用戶或者點擊忘記密碼驗證郵件設置。如果不能正常發送郵件,請檢查配置,使用命令,將監聽日志打出來,進行問題排查。
[root@gitlab01 gitlab]# gitlab-ctl tail ==> /var/log/gitlab/gitlab-rails/sidekiq.log <== {"severity":"INFO","time":"2019-12-03T01:40:14.736Z","message":"Upgrade to Sidekiq Pro for more features and support: http://sidekiq.org"} {"severity":"WARN","time":"2019-12-03T01:40:14.737Z","message":"Sidekiq 6.0 will require Redis 4.0+, you are using Redis v3.2.12"} {"severity":"INFO","time":"2019-12-03T01:40:15.168Z","message":"Starting processing, hit Ctrl-C to stop"}
3、Gitlab批量添加賬號
[root@gitlab ~]# cat gitlab.sh #!/bin/bash #批量創建gitlab用戶 userinfo="userinfo.text" while read line do password=`echo $line | awk '{print $1}'` mail=`echo $line | awk '{print $2}'` username=`echo $line | awk '{print $3}'` name=`echo $line | awk '{print $4}'` curl -d "reset_password=$password&email=$mail&username=$username&name=$name&private_token=gc5T7PhqbvQFfQA1bdxG" "http://172.16.60.222/api/v4/users" done <$userinfo [root@gitlab ~]# cat userinfo.text 1 zhanjiang.feng@wang.com zhanjiang.feng zhanjiang.feng 1 hongkang.yan@wang.com hongkang.yan hongkang.yan 1 yansong.wang@wang.com yansong.wang yansong.wang 1 bo.xue@wang.com bo.xue bo.xue 1 junlong.li@wang.com junlong.li junlong.li 1 luyu.cao@wang.com luyu.cao luyu.cao 1 xueqing.wang@wang.com xueqing.wang xueqing.wang 1 xu.guo@wang.com xu.guo xu.guo 1 bing.xing@wang.com bing.xing bing.xing 1 mengmeng.li@wang.com linan linan
注意:上面userinfo.text文件里的四行分別表示密碼,郵箱,用戶名,別名。上面命令執行后,就可以批量創建用戶了!
其中密碼用1表示重置密碼,也就是用戶創建之后,會給用戶郵箱發送兩封郵件:
-> 一封確認綁定郵箱的郵件,一定要點擊這個郵件里的confirm確認地址(否則登錄無效);
-> 另一封是重置用戶密碼的郵件。重置后就可以使用郵箱或用戶名登陸了。
注意:上面腳本中的private_token(這個很重要,否則批量創建不了用戶)
Gitlab 10.2版本之前private_token,使用管理員登錄后,在"settings-Account"界面里找到的;如圖:
Gitlab 10.2版本之后,使用Personal Access Tokens 既 profile->account->Personal Access Tokens
輸入姓名,選定有效日期后勾選下面的四個選項,點擊確認將生成的密碼保存到private_token文件夾中。如圖:
訪問腳本中gitlab的用戶接口地址http://172.16.60.222/api/v4/users,試試能否訪問!
4、修改Gitlab登錄界面
4.1、設置主題
4.2、設置首頁標題與圖片
其他選項均可以進行定制設置,設計屬於自己風格的首頁和展示頁。
-----------------------------------------------------------書山有路勤為徑,學海無涯苦作舟-------------------------------------------------------------