之前梳理了一篇Gitlab的安裝CI持續集成系統環境---部署Gitlab環境完整記錄,但是這是bitnami一鍵安裝的,版本比較老。下面介紹使用rpm包安裝Gitlab,下載地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/,針對centos6和centos7的各版本Gitlab下載。如果下載不下來或者下載巨慢,可以嘗試:清華大學鏡像
一、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安裝、配置、啟動管理
安裝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
安裝Postfix以發送通知電子郵件
安裝命令:yum install postfix
激活命令:systemctl enable postfix
啟用命令:systemctl start postfix
下載GitLab軟件包(社區版),地址:https://packages.gitlab.com/gitlab/gitlab-ce
查看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配置文件
初始化Gitlab命令(保存配置或重新載入配置):gitlab-ctl reconfigure
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服務日志查看:/usr/bin/gitlab-ctl tail #可以查看到gitlab所有插件的日志情況
四、Centos下Gitlab快速安裝的操作記錄
1. Gitlab安裝過程(最好找一台環境比較干凈的機器):
1)配置系統防火牆,把HTTP和SSH端口開放(關閉iptables或者開放ssh). [root@gitlab ~]# /etc/init.d/iptables stop [root@gitlab ~]# yum install curl openssh-server postfix cronie policycoreutils-python [root@gitlab ~]# service postfix start [root@gitlab ~]# chkconfig postfix on [root@gitlab ~]# lokkit -s http -s ssh //如果iptables關閉了,這條命令就無需執行了。這條命令是用來設置防火牆的,開放http和ssh訪問端口 2)下載gitlab的rpm安裝包 已提前下載放到百度雲里: http://pan.baidu.com/s/1c2EPRLQ 提前密碼:qys2 [root@gitlab ~]# rpm -ivh gitlab-ce-9.4.5-ce.0.el6.x86_64.rpm --force 安裝后的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文件中的192.168.1.24全部替換為gitlab.kevin.com [root@code-server gitlab]# vim /etc/gitlab/gitlab.rb external_url 'http://192.168.1.24' 改為: external_url 'http://gitlab.kevin.com' 2)其次將下面兩文件中的192.168.1.24全部替換為gitlab.kevin.com /var/opt/gitlab/gitlab-shell/config.yml /var/opt/gitlab/gitlab-rails/etc/gitlab.yml 下面兩文件都是上面兩文件的軟鏈接,修改上面兩個文件即可 [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)然后將下面文件中的192.168.1.24全部替換為gitlab.kevin.com /var/opt/gitlab/nginx/conf/gitlab-http.conf 4)最后執行"gitlab-ctl reconfigure"命令使之配置生效(注意最好不要執行"gitlab-ctl restart",只執行本命令即可)
2. Gitlba安裝后的幾個細節的配置
Gitlab如果是編譯安裝的默認管理員賬號密碼是:admin@local.host|5iveL!fe,如果是 rpm包安裝則管理員賬號密碼是root|5iveL!fe
Gitlab安裝后,http://localhost訪問,首次訪問的時候,如果不知道管理員賬號和密碼,盡管可以注冊用戶,但注冊的用戶都不是管理員。這個時候,可以重置管理員的密碼,管理員默認是root。
重置管理員密碼(密碼要是8位)的方法如下:
[root@gitlab ~]# gitlab-rails console production Loading production environment (Rails 4.1.1) irb(main):001:0> user = User.where(id:1).first irb(main):002:0> user.password='12345678' irb(main):003:0> user.save! 這樣,Gitlab管理員的登錄權限就是:root/12345678,管理員的默認郵箱是部署機的本機郵箱,也是從本機發的郵件。這也就是為什么在開頭要安裝postfix。 修改下面幾處,否則郵件發出后,點擊會報錯。下面的192.168.1.24是部署機ip。 [root@gitlab ~]# cd /opt/gitlab/ [root@gitlab gitlab]# cat embedded/service/gitlab-rails/config/gitlab.yml|grep 192.168.1.24 host: 192.168.1.24 email_from: gitlab@192.168.1.24 [root@gitlab gitlab]# cd /var/opt/gitlab/ [root@gitlab gitlab]# cat ./gitlab-rails/etc/gitlab.yml|grep 192.168.1.24 host: 192.168.1.24 email_from: gitlab@192.168.1.24 最后重啟gitlab-ctl生效 [root@gitlab gitlab]# gitlab-ctl restart
在管理員賬號(root)登錄后,先把"注冊"功能關了,這樣就只能在管理員賬號下創建用戶。關閉注冊功能方法:
訪問http://192.168.1.24/admin/application_settings,如下:
關閉"Sign-up enabled"功能(特別注意:Sign-in enabled登錄功能不要關閉了,看清楚!)
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=ucUctguWU6-2qrvRnGiB" "http://192.168.1.24/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的管理員賬號登錄后的"settings-Account"界面里找到的,如下:
訪問腳本中gitlab的用戶接口地址http://192.168.1.24/api/v4/users,試試能否訪問!
Email的smtp設置
上面默認是用部署機本地的postfix發郵件。如果要想使用第三方郵箱發郵件,這就需要修改/var/opt/gitlab/gitlab-rails/etc/unicorn.rb文件: [root@gitlab ~]# # cat /etc/gitlab/gitlab.rb|grep -v "^#"|grep -v "^$" external_url 'http://192.168.1.24' gitlab_rails['gitlab_email_from'] = 'wangshibohaha@163.com' gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.163.com" gitlab_rails['smtp_port'] = 25 gitlab_rails['smtp_user_name'] = "wangshibohaha@163.com" gitlab_rails['smtp_password'] = "*******" gitlab_rails['smtp_domain'] = "163.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true user['git_user_email'] = "wangshibohaha@163.com" 由於該文件會影響gitlab-ctl指令,如果改動了則需要重新運行配置。 注意這個重新配置的動作要在上面細節配置之前,否則上面的配置在reconfigure之后就會被覆蓋到默認狀態! [root@gitlab ~]# gitlab-ctl reconfigure -------------------------------------------------------------------------------------------- 上面使用的是163郵箱,下面再貼下公司企業郵箱(用的是Coremail論客郵件系統,注意郵箱的smtp地址要正確)的配置: [root@gitlab ~]# cat /etc/gitlab/gitlab.rb|grep -v "^#"|grep -v "^$" external_url 'http://192.168.1.24' gitlab_rails['gitlab_email_from'] = 'notice@vdholdhaha.com' gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.icoremail.net" gitlab_rails['smtp_port'] = 25 gitlab_rails['smtp_user_name'] = "notice@vdholdhaha.com" gitlab_rails['smtp_password'] = "notice@123" gitlab_rails['smtp_domain'] = "icoremail.net" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true user['git_user_email'] = "notice@vdholdhaha.com"
修改Gitlab登錄界面
選擇gitlab新的主題風格,新主題會在左邊欄展示選擇項
經過上面修改后,看下新的登錄界面
Gitlab整合Ldap(或AD域)
如上已經順利部署了Gitlab環境,又在一台空閑的Windows server 2008上安裝了AD域。 現在需要在Gitlab上整合AD域,實現Gitlab只能使用AD域里面的賬號登錄。配置記錄如下: AD域的信息: 主機地址:192.168.10.141 端口:389 配置如下: [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 接着執行下面命令,使上面配置生效: [root@gitlab ~]# gitlab-ctl reconfigure //這里最好使用該命令,表示重載配置。不要使用"gitlab-ctl restart"重啟服務,否則可能出現500報錯! 然后執行下面命令,檢查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 ========================================================================================= 注意: 如上配置中,隨便使用AD域中的一個有讀權限的賬號和其密碼進行配置就行了,即將其他賬號讀出來! AD域或Openldap搭建的時候,域名最好用郵箱域名。 uid表示屬性 uid: 'uid' //默認配置是這個,如果不改,上面check ldap就不會成功,即不能成功同步ldap賬號信息。 uid: 'cn' //這個表示可以使用cn名稱登錄,比如王一,如果cn名稱是英文名(比如test),則還可以使用帶域名形式登錄(比如test@kevin.com) uid: 'Samaccountname' //這個表示可以使用wangyi或wangyi@kevin.com登錄 如果uid配置成上面的cn和Samaccountname,那么下面的 allow_username_or_email_login: true label: '哈哈集團-Gitlab登錄入口' 該配置表示使用LDAP賬號登錄時顯示的界面提示信息。
取消Gitlab默認的登錄窗口,訪問http://192.168.1.24/admin/application_settings (注意不要勾選下面的"Sign-in enabled"選擇)
Gitlab訪問出現403"Forbidden"現象
出現的可能原因:較多的並發導致的訪問被拒絕, Gitlab使用rack_attack做了並發訪問的限制!
解決辦法:
打開/etc/gitlab/gitlab.rb文件,查找 gitlab_rails['rack_attack_git_basic_auth'] 關鍵詞,取消注釋,
修改ip_whitelist白名單屬性,加入Gitlab部署的IP地址。
修改如下(192.168.1.24):
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb ...... gitlab_rails['rack_attack_git_basic_auth'] = { 'enabled' => true, 'ip_whitelist' => ["127.0.0.1","192.168.1.24"], 'maxretry' => 10, 'findtime' => 60, 'bantime' => 3600 }
然后重載配置
[root@gitlab ~]# gitlab-ctl reconfigure
最后再在瀏覽器里訪問gitlab就OK了!
Gitlab訪問出現502的現象
Gitlab訪問出現:Whoops, GitLab is taking too much time to respond.
產生原因: 1)unicorn原8080默認端口被容器中別的進程已經占用,必須調整為沒用過的 2)gitlab的timeout設置過小,默認為60 解決辦法: 1)關閉gitlab服務 # gitlab-ctl stop 2)選擇一個沒有被系統占用的端口作為unicorn端口,比如8877端口(lsof -i:8877 確認此端口沒有被占用) # vim /etc/gitlab/gitlab.rb unicorn['port'] = 8877 gitlab_workhorse['auth_backend'] = "http://localhost:8877" 3)重新生成配置 # gitlab-ctl reconfigure 4)重啟gitlab服務 # gitlab-ctl restart
Gitlab啟動失敗,或重新安裝時出現卡的狀態
在卸載gitlab然后再次安裝執行sudo gitlab-ctl reconfigure的時候往往會出現:ruby_block[supervise_redis_sleep] action run,會一直卡無法往下進行! 這時候的解決辦法: 1)按ctrl + c 強制結束 2)執行"systemctl restart gitlab-runsvdir" 命令 3)接着再執行"gitlab-ctl reconfigure" 如果機器重啟后,啟動"gitlab-ctl start"失敗,解決辦法: # systemctl restart gitlab-runsvdir # gitlab-ctl reconfigure # gitlab-ctl start
Gitlab異常關機,導致gitlab啟動失敗!gitlab-runsvdir方式啟動沒反應(僵屍狀態)
Gitlab部署的服務器異常斷電,機器重啟后,嘗試啟動gitlab服務,啟動失敗!通過gitlab-runsvdir方式啟動一直沒有反應!一直在卡頓狀態!日志也沒有任務輸入!
執行下面的啟動命令報錯: [root@gitlab ~]# gitlab-ctl start 或者 "gitlab-ctl restart" fail: alertmanager: runsv not running fail: gitaly: runsv not running fail: gitlab-monitor: runsv not running fail: gitlab-workhorse: runsv not running fail: logrotate: runsv not running fail: nginx: runsv not running fail: node-exporter: runsv not running fail: postgres-exporter: runsv not running fail: postgresql: runsv not running fail: prometheus: runsv not running fail: redis: runsv not running fail: redis-exporter: runsv not running fail: registry: runsv not running fail: sidekiq: runsv not running fail: unicorn: runsv not running 報錯說"runsv not running" 那么嘗試通過supervisor進程方式啟動gitlab,發現一直在卡頓中,根本沒有任何反應! [root@gitlab ~]# systemctl restart gitlab-runsvdir 查看日志,發現也沒有任務啟動信息打印到日志中 (日志都是之前的) [root@gitlab ~]# /usr/bin/gitlab-ctl tail gitlab-runsvdir啟動在卡頓中,gitlab服務也沒有起來 [root@gitlab ~]# ps -ef|grep gitlab 最后解決方法: 通過Gitlab自己原生命令去啟動服務:/opt/gitlab/embedded/bin/runsvdir-start [root@gitlab ~]# cat /etc/systemd/system/multi-user.target.wants/gitlab-runsvdir.service [Unit] Description=GitLab Runit supervision process After=multi-user.target [Service] ExecStart=/opt/gitlab/embedded/bin/runsvdir-start #最后通過這條命令啟動了Gitlab Restart=always [Install] WantedBy=multi-user.target 執行下面的啟動,雖然發現這個也會一直在卡頓中,但是不影響gitlab服務啟動。 [root@gitlab ~]# /opt/gitlab/embedded/bin/runsvdir-start 重新打開一個終端窗口,發現gitlab已經有新的日志信息打入了,gitlab也服務已經起來了 [root@gitlab ~]# /usr/bin/gitlab-ctl tail [root@gitlab ~]# ps -ef|grep gitlab 這時候關閉上面執行"/opt/gitlab/embedded/bin/runsvdir-start"的卡頓的終端窗口,發現gitlab也還是啟動狀態(ps -ef|grep gitlab) [root@gitlab ~]# ps -ef|grep gitlab [root@gitlab ~]# lsof -i:80 [root@gitlab ~]# gitlab-ctl status run: alertmanager: (pid 29804) 1640s; run: log: (pid 29789) 1640s run: gitaly: (pid 29795) 1640s; run: log: (pid 29781) 1640s run: gitlab-monitor: (pid 29799) 1640s; run: log: (pid 29785) 1640s run: gitlab-workhorse: (pid 29794) 1640s; run: log: (pid 29780) 1640s run: logrotate: (pid 29798) 1640s; run: log: (pid 29783) 1640s run: nginx: (pid 29800) 1640s; run: log: (pid 29786) 1640s run: node-exporter: (pid 29802) 1640s; run: log: (pid 29788) 1640s run: postgres-exporter: (pid 29805) 1640s; run: log: (pid 29790) 1640s run: postgresql: (pid 29796) 1640s; run: log: (pid 29782) 1640s run: prometheus: (pid 29797) 1640s; run: log: (pid 29784) 1640s run: redis: (pid 29818) 1640s; run: log: (pid 29793) 1640s run: redis-exporter: (pid 29817) 1640s; run: log: (pid 29792) 1640s run: sidekiq: (pid 29801) 1640s; run: log: (pid 29787) 1640s run: unicorn: (pid 29807) 1640s; run: log: (pid 29791) 1640s 查看日志也有新信息寫入,一切正常了! [root@gitlab ~]# /usr/bin/gitlab-ctl tail
Gitlab忘記root用戶密碼,重置用戶密碼和查看用戶ID號方法
一、Gitlab查看用戶id號的方法 1)方法1:通過api接口查詢 接口查詢地址:http://gitlab的url/api/v4/users?username=用戶名 比如查看gitlab的root用戶id 在瀏覽器頁面里直接訪問"http://172.16.60.237/api/v4/users?username=root" 或者 在linux終端命令行里直接通過curl命令進行訪問 [root@localhost ~]# curl http://172.16.60.237/api/v4/users?username=root [{"id":1,"name":"Administrator","username":"root","state":"active","avatar_url":"https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon","web_url":"http://gitlab.example.com/root"}] 2)方法2:進入gitlab數據庫查詢 [root@localhost ~]# gitlab-rails dbconsole psql (10.9) Type "help" for help. gitlabhq_production=> \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges ---------------------+-------------+----------+-------------+-------------+--------------------------------- gitlabhq_production | gitlab | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | gitlab-psql | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | gitlab-psql | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/"gitlab-psql" + | | | | | "gitlab-psql"=CTc/"gitlab-psql" template1 | gitlab-psql | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/"gitlab-psql" + | | | | | "gitlab-psql"=CTc/"gitlab-psql" (4 rows) ## 連接數據庫 gitlabhq_production=> \c gitlabhq_production You are now connected to database "gitlabhq_production" as user "gitlab". gitlabhq_production=> select id,name,username from users; id | name | username ----+---------------+---------- 1 | Administrator | root (1 row) ## 查找賬戶id gitlabhq_production=> select id from users where username = 'root'; id ---- 1 (1 row) ============================================================================================== 二、忘記Gitlab的root用戶密碼的重置方法 如果忘記了Gitlab的root用戶密碼,則可以在服務器上面直接修改數據: # gitlab-rails console production #然后以此執行下面命令(需要提前查詢用戶的id號) ...> user = User.where(id: 1).first ...> user.password = 'secret_pass' ...> user.password_confirmation = 'secret_pass' ...> user.save! 例如重置root用戶密碼為root@123,root用戶id為1 [root@localhost ~]# gitlab-rails console production DEPRECATION WARNING: Passing the environment's name as a regular argument is deprecated and will be removed in the next Rails version. Please, use the -eoption instead. (called from require at bin/rails:4) -------------------------------------------------------------------------------- GitLab: 12.2.0 (1c1d47c5974) GitLab Shell: 9.3.0 PostgreSQL: 10.9 -------------------------------------------------------------------------------- Loading production environment (Rails 5.2.3) irb(main):001:0> user = User.where(id: 1).first => #<User id:1 @root> irb(main):002:0> user.password = 'root@123' => "root@123" irb(main):003:0> user.password_confirmation = 'root@123' => "root@123" irb(main):004:0> user.save! Enqueued ActionMailer::DeliveryJob (Job ID: e562694d-2a1b-4bad-843b-d8567ac51077) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", #<GlobalID:0x00007fae7e55bcc8 @uri=#<URI::GID gid://gitlab/User/1>> => true irb(main):005:0> quit [root@localhost ~]#
五、Gitlab日常維護:備份、遷移、升級
1. Gitlab備份
使用Gitlab一鍵安裝包安裝Gitlab非常簡單, 同樣的備份恢復與遷移也非常簡單. 使用一條命令即可創建完整的Gitlab備份
# gitlab-rake gitlab:backup:create 比如使用以上命令會在/var/opt/gitlab/backups目錄下創建一個名稱類似為1481598919_gitlab_backup.tar的壓縮包, 這個壓縮包就是Gitlab整個的完整部分, 其中開頭的1481598919是備份創建的日期。 /etc/gitlab/gitlab.rb 配置文件須備份 /var/opt/gitlab/nginx/conf nginx配置文件 /etc/postfix/main.cfpostfix 郵件配置備份
1)1.1Gitlab備份目錄
可以通過/etc/gitlab/gitlab.rb配置文件來修改默認存放備份文件的目錄
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" /var/opt/gitlab/backups修改為你想存放備份的目錄即可, 修改完成之后使用gitlab-ctl reconfigure命令重載配置文件即可.
2)Gitlab自動備份
實現每天凌晨2點進行一次自動備份:通過crontab使用備份命令實現
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
2. Gitlab恢復
Gitlab的從備份恢復也非常簡單:
1)停止相關數據連接服務 # gitlab-ctl stop unicorn # gitlab-ctl stop sidekiq 2)從1481598919編號備份中恢復 # gitlab-rake gitlab:backup:restore BACKUP=1481598919 3)啟動Gitlab # gitlab-ctl start
3. Gitlab遷移
要求:新服務器的gitlab版本與舊的服務器相同。
遷移如同備份與恢復的步驟一樣, 只需要將老服務器/var/opt/gitlab/backups目錄下的備份文件拷貝到新服務器上的/var/opt/gitlab/backups即可(如果你沒修改過默認備份目錄的話).
但是需要注意的是:
新服務器上的Gitlab的版本必須與創建備份時的Gitlab版本號相同. 比如新服務器安裝的是最新的7.60版本的Gitlab, 那么遷移之前, 最好將老服務器的Gitlab 升級為7.60在進行備份.
/etc/gitlab/gitlab.rb 這個gitlab配置文件須遷移,遷移后需要調整數據存放目錄
/var/opt/gitlab/nginx/conf 這個nginx配置文件目錄須遷移
/etc/gitlab/gitlab-secrets.json #復制新服務器相同的目錄下
/etc/ssh/*key* #復制到新服務器相同目錄下,解決ssh key認證不成功問題
# gitlab-ctl stop unicorn # gitlab-ctl stop sidekiq # chmod 777 /var/opt/gitlab/backups/1481598919_gitlab_backup.tar # 或 chown git:git /var/opt/gitlab/backups/1481598919_gitlab_backup.tar # gitlab-rake gitlab:backup:restore BACKUP=1481598919
4. Gitlab升級
1.關閉gitlab服務 # gitlab-ctl stop unicorn # gitlab-ctl stop sidekiq # gitlab-ctl stop nginx 2.備份gitlab # gitlab-rake gitlab:backup:create 3.下載gitlab的RPM包並進行升級 # curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash # yum update gitlab-ce 或者直接安裝高版本 #yum install gitlab-ce-12.1.12-ce.0.el7.x86_64 或者上官網下載最新版本 gitlab對應軟件包 gitlab官網地址: https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-12.1.12-ce.0.el7.x86_64.rpm 使用: # rpm -Uvh gitlab-ce-12.1.12-ce.0.el7.x86_64 如果報錯. Error executing action `run` on resource 'ruby_block[directory resource: /var/opt/gitlab/git-data/repositories]' 解決方法: sudo chmod 2770 /var/opt/gitlab/git-data/repositories 4.啟動並查看gitlab版本信息 # gitlab-ctl reconfigure # gitlab-ctl restart # head -1 /opt/gitlab/version-manifest.txt
5. Gitlab重新安裝,在執行"gitlab-ctl reconfigure"配置環節出現了下面報錯:
[root@gitlab ~]# gitlab-ctl reconfigure
.........
.........
STDERR: sysctl: cannot open "/etc/sysctl.d/90-omnibus-gitlab-kernel.sem.conf": No such file or directory
sysctl: cannot open "/etc/sysctl.d/90-omnibus-gitlab-net.core.somaxconn.conf": No such file or directory
---- End output of sysctl -e --system ----
Ran sysctl -e --system returned 255
造成原因:
丟失了報錯中的這兩個配置文件,進入/etc/sysctl.d目錄發現,這兩個文件都是通過鏈接到/opt/gitlab/embedded/etc/目錄下。
然而/opt/gitlab/embedded/etc/確實沒有這兩個文件。
[root@gitlab ~]# ll /etc/sysctl.d/ total 0 lrwxrwxrwx 1 root root 58 Nov 10 22:23 90-omnibus-gitlab-kernel.sem.conf -> /opt/gitlab/embedded/etc/90-omnibus-gitlab-kernel.sem.conf lrwxrwxrwx 1 root root 61 Nov 10 22:23 90-omnibus-gitlab-kernel.shmall.conf -> /opt/gitlab/embedded/etc/90-omnibus-gitlab-kernel.shmall.conf lrwxrwxrwx 1 root root 61 Nov 10 22:23 90-omnibus-gitlab-kernel.shmmax.conf -> /opt/gitlab/embedded/etc/90-omnibus-gitlab-kernel.shmmax.conf lrwxrwxrwx 1 root root 66 Nov 10 22:25 90-omnibus-gitlab-net.core.somaxconn.conf -> /opt/gitlab/embedded/etc/90-omnibus-gitlab-net.core.somaxconn.conf lrwxrwxrwx. 1 root root 14 Oct 30 09:13 99-sysctl.conf -> ../sysctl.conf [root@gitlab ~]# ll /opt/gitlab/embedded/etc total 12 -rw-r--r-- 1 root root 24 Apr 12 23:18 90-omnibus-gitlab-kernel.shmall.conf -rw-r--r-- 1 root root 28 Apr 12 23:17 90-omnibus-gitlab-kernel.shmmax.conf -rwxr-xr-x 1 root root 196 Apr 12 23:16 gitconfig [root@gitlab ~]# ll /opt/gitlab/embedded/etc/90-omnibus-gitlab-kernel.sem.conf ls: cannot access /opt/gitlab/embedded/etc/90-omnibus-gitlab-kernel.sem.conf: No such file or directory [root@gitlab ~]# ll /opt/gitlab/embedded/etc/90-omnibus-gitlab-net.core.somaxconn.conf ls: cannot access /opt/gitlab/embedded/etc/90-omnibus-gitlab-net.core.somaxconn.conf: No such file or directory 解決方法一: 從別的備份機(或者在別的機器上重新安裝一次,"gitlab-ctl reconfigure"之后生成這兩個文件)將這兩個文件拷貝回來! 解決方法二: [root@gitlab ~]# vim /etc/gitlab/gitlab.rb # unicorn['port'] = 8080 修改為: unicorn['port'] = 8090 之后重新加載配置文件 [root@gitlab ~]# gitlab-ctl reconfigure 再次會報錯,然后再修改/etc/gitlab/gitlab.rb,修改為原來的配置 [root@gitlab ~]# vim /etc/gitlab/gitlab.rb # unicorn['port'] = 8080 再次重新加載配置文件就OK了! [root@gitlab ~]# gitlab-ctl reconfigure 再次查看,發現上面配置中報錯的兩個文件已經存在了 [root@gitlab ~]# ll /opt/gitlab/embedded/etc/ total 20 -rw-r--r-- 1 root root 30 Apr 12 23:33 90-omnibus-gitlab-kernel.sem.conf -rw-r--r-- 1 root root 24 Apr 12 23:18 90-omnibus-gitlab-kernel.shmall.conf -rw-r--r-- 1 root root 28 Apr 12 23:17 90-omnibus-gitlab-kernel.shmmax.conf -rw-r--r-- 1 root root 26 Apr 12 23:35 90-omnibus-gitlab-net.core.somaxconn.conf -rwxr-xr-x 1 root root 196 Apr 12 23:16 gitconfig [root@gitlab ~]# ll /opt/gitlab/embedded/etc/90-omnibus-gitlab-kernel.sem.conf -rw-r--r-- 1 root root 30 Apr 12 23:33 /opt/gitlab/embedded/etc/90-omnibus-gitlab-kernel.sem.conf [root@gitlab ~]# ll /opt/gitlab/embedded/etc/90-omnibus-gitlab-net.core.somaxconn.conf -rw-r--r-- 1 root root 26 Apr 12 23:35 /opt/gitlab/embedded/etc/90-omnibus-gitlab-net.core.somaxconn.conf 最后再啟動gitlab [root@gitlab ~]# gitlab-ctl start
6. Gitlab更改默認Nginx
更換gitlab自帶Nginx,使用自行編譯Nginx來管理gitlab服務。
自行編譯的nginx服務和gitlab在同一台機器上 1)編輯gitlab配置文件禁用自帶Nignx服務器 [root@gitlab ~]# vim /etc/gitlab/gitlab.rb ... #設置nginx為false,關閉自帶Nginx nginx['enable'] = false ... 2)檢查默認nginx配置文件,並遷移至新Nginx服務 (即將下面兩個gitlab自帶nginx的配置文件遷移到自行編譯的新的nginx配置中) /var/opt/gitlab/nginx/conf/nginx.conf #nginx配置文件,包含gitlab-http.conf文件 /var/opt/gitlab/nginx/conf/gitlab-http.conf #gitlab核心nginx配置文件 [root@gitlab ~]# cp /var/opt/gitlab/nginx/conf/nginx.conf /etc/nginx/conf.d/ [root@gitlab ~]# cp /var/opt/gitlab/nginx/conf/gitlab-http.conf /etc/nginx/conf.d/ 3)重啟gitlab服務 [root@gitlab ~]# gitlab-ctl reconfigure [root@gitlab ~]# gitlab-ctl restart 重啟自行編譯的nginx服務 [root@gitlab ~]# service nginx restart 如果訪問報502。原因是nginx用戶無法訪問gitlab用戶的socket文件。 重啟gitlab需要重新授權 [root@gitlab ~]# chmod -R o+x /var/opt/gitlab/gitlab-rails