Gitlab快速部署及日常維護(社區版RPM包方式安裝)


 

之前梳理了一篇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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM