gitlab安裝升級及遷移

1. gitlab簡介

GitLab 是一個用于倉庫管理系統(tǒng)的開源項目宰啦,使用Git作為代碼管理工具麦向,并在此基礎上搭建起來的Web服務畴嘶。
GitLab是由GitLabInc.開發(fā)哮洽,使用MIT許可證的基于網(wǎng)絡的Git倉庫管理工具闽瓢,且具有wiki和issue跟蹤功能义钉。使用Git作為代碼管理工具鄙麦,并在此基礎上搭建起來的web服務盯荤。
GitLab由烏克蘭程序員DmitriyZaporozhets和ValerySizov開發(fā)馋吗,它使用Ruby語言寫成。后來秋秤,一些部分用Go語言重寫宏粤。截止2018年5月,該公司約有290名團隊成員灼卢,以及2000多名開源貢獻者绍哎。GitLab被IBM,Sony鞋真,JülichResearchCenter崇堰,NASA,Alibaba灿巧,Invincea赶袄,O’ReillyMedia,Leibniz-Rechenzentrum(LRZ)抠藕,CERN饿肺,SpaceX等組織使用。

2. 安裝環(huán)境介紹

服務器的操作系統(tǒng)為CentOS Linux release 7.9.2009
包管理工具yum.
這里安裝的是gitlab企業(yè)版盾似,本教程可以作為社區(qū)版安裝的參考材料敬辣,社區(qū)版安裝稍有不同,在了解社區(qū)版的差異后零院,安裝步驟稍作調(diào)整.

3. gitlab 安裝

gitlab的安裝方式有很多種溉跃,比如docker鏡像安裝,Helm charts安裝告抄,源代碼安裝撰茎,GET(GitLab Environment Toolkit)安裝, 本文主要講述使用ceontos或redhat系列中通過yum安裝使用rpm包安裝.需要對yum和rpm命令有一定的了解.

4. 系統(tǒng)要求

空閑硬盤空間: 2.5G+
CPU: 4core+ (4核最多支持500用戶,8核最多支持1000用戶)
內(nèi)存:4GB+

4.1. 安裝準備工作

  • 更新yum源
    這里采用清華鏡像(主要處于下載速度考慮)打洼,如果你訪問外網(wǎng)的速度夠快, 可以考慮使用官方鏡像.
    將下面一段代碼拷貝到/etc/yum.repos.d, 命名為gitlab_gitlab-ee.repo, 當然你也可以根據(jù)自己的喜好命名龄糊,只要文件后綴為.repo即可逆粹,符合yum源文件命名規(guī)范即可

     [gitlab_gitlab-ee]
      name=Gitlab EE Repository
      baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ee/yum/el$releasever/
      gpgcheck=0
      enabled=1
    
  • 更新yum緩存,以便快速查詢炫惩,確保緩存中有最新安裝包信息

    yum makecache fast
    

    說明:這行命令從字面上已經(jīng)很容易理解僻弹,這里只對fast參數(shù),稍加說明他嚷,這行命令中加fast參數(shù)的目的是為了yum install時能快速找到下載速度最快的鏡像蹋绽,對于gitlab本身來說我們已經(jīng)知道清華鏡像應該是最快的,但是對于其依賴項來說筋蓖,系統(tǒng)可以自動去判斷卸耘,所以建議添加該參數(shù).

4.2. 開始安裝gitlab

  • 開始安裝前可以使用yum命令查看有哪些可用的版本,以及當前最新版本是哪個.

    yum list gitlab-ee --showduplicates | sort -r
    

    通過以上命令粘咖,確定當前列表中包含最新版本鹊奖,如果列表中最新版本不是最新的,可能需要執(zhí)行yum makecache 更新緩存涂炎,或者yum源本身就不包含最新版本,那么要考慮更換yum源.如果要安裝指定版本设哗,需要確保需要安裝的版本包含在列表中.

  • 安裝最新版本的方法

    yum install -y gitlab-ee
    
  • 安裝制定版本的方法
    以centos7為例, 后面的版本號x.y.z-ee.0.el7根據(jù)實際情況進行替換.

    yum install -y gitlab-ee-x.y.z-ee.0.el7
    
  • 配置gitlab
    安裝完成后執(zhí)行以下命令gitlab將會自動幫我們完成一些必要的配置唱捣,切記如果你手動完成一些配置后不要重復執(zhí)行以下命令,否則手動配置的參數(shù)會被清除网梢,嚴重時會導致用戶訪問時出現(xiàn)html500錯誤.

    修改external_url
    編輯文件/etc/gitlab/gitlab.rb

    #replace gitlab.example.com with your domain or your ip
    # for instance external_url 'http://192.168.1.100'
    external_url 'your_domain'
    
    gitlab-ctl reconfigure
    
  • 啟動gitlab

    gitlab默認運行在80端口
    需要檢查防火墻狀態(tài), 如何防火墻已開啟, 需要放行80端口

      # 檢查防火墻是否開啟
      sudo firewall-cmd --state
    
      # 如果開啟, 需放行80端口
      sudo firewall-cmd --add-port=80/tcp --permanent
      sudo firewall-cmd --reload
    

    如果一切順利震缭,我們就可以啟動gitlab了,啟動命令為

    gitlab-ctl start
    

    啟動成功后, 可以使用瀏覽器訪問gitlab web頁面战虏,默認端口是80, 所以可以打開http://your_server_address訪問.

    如果沒有設置密碼拣宰,系統(tǒng)將為root用戶生成一個隨機密碼,該隨機密碼可以在/etc/gitlab/initial_root_password文件中找到.
    建議修改該隨機密碼烦感,方式為

     gitlab-rake "gitlab:password:reset[root]"
    

    說明: 命令中的root即為root用戶巡社,該命令也可以用來為其他用戶設置密碼.

    關于gitlab的高級配置,可以參考gitlab的官網(wǎng)
    這里補充幾點如何啟動手趣,關閉晌该,查看gitlab狀態(tài)的命令,方便troubleshooting
    關閉gitlab

     gitlab-ctl stop
    

    重啟gitlab

    gitlab-ctl restart
    

    查看gitlab狀態(tài)

    gitlab-ctl status
    

    查看gitlab滾動日志

    gitlab-ctl tail
    

    想了解更多命令绿渣,可以查看幫助

     gitlab-ctl --help
    

    命令行查看gitlab版本

      cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
    

    查看日志文件
    日志文件位于/var/log/gitlab下, 日志是按照服務分類存放
    Gitlab 日志文件位于 /var/log/gitlab/gitlab-rails/production.log

5. gitlab升級

5.1. 開啟yum緩存

  • gitlab的每個安裝包都接近1G大小朝群,gitlab升級過程中需要反復恢復重試,如果不開啟yum緩存中符,即每次執(zhí)行yum install無論成功與否姜胖,安裝包都會被清理掉,下次重試即使是相同的版本也會去服務器上重新下載淀散,會特別慢右莱,而且消耗服務器帶寬蚜锨,如果觸發(fā)了鏡像服務器的限流機制,升級可能會無法進行下去.

  • 強烈建議開啟yum緩存隧出,等升級完成后再關閉緩存.手動清理 /var/cache/yum/x86_64/7/gitlab_gitlab-ee下的緩存.

  • 開啟yum 緩存步驟如下: 修改/etc/yum.conf, 將keepcache設置為1, 默認為0.
    這樣當再次重試相同版本時就可以使用-C 參數(shù)使用緩存如下所示踏志,而不必去鏡像服務器上重新下載.

yum update -C gitlab-ee-x.y.z-ee.0.el7

[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1 # 開啟緩存
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=0

5.2. 升級前備份

  • 備份數(shù)據(jù)
gitlab-rake gitlab:backup:create
  • 備份敏感數(shù)據(jù)

手動備份兩個具有敏感數(shù)據(jù)的文件

cp  /etc/gitlab/gitlab.rb  /var/opt/gitlab/backups
# and
cp  /etc/gitlab/gitlab-secrets.json  /var/opt/gitlab/backups

  • 說明:

    • 備份被保存在/var/opt/gitlab/backups目錄下
    • 備份文件名格式如下: 例如1665044212_2022_10_06_14.4.1-ee_gitlab_backup.tar , 備份編號+日期+gitlab版本號+后綴
    • 備份恢復的原則是對應版本的備份文件只能使用對應版本的gitlab程序進行恢復
    • 跨版本恢復備份文件會出現(xiàn)恢復失敗或未知錯誤
    • 如果要再高版本中使用低版本的備份文件
      • 方法一: 在另一臺機中 安裝低版本gitlab 將低版本的備份程序采用低版本的gitlab恢復后再將低版本的gitlab升級到高版本, 再使用高版本的gitlab制作備份文件

5.3. 開始升級

  • 升級前需要了解升級路徑,gitlab不能一下子升級到最新版胀瞪,需要升級到必要的中間版本针余,然后一步步升級到最新版本.主要涉及到數(shù)據(jù)的migration工作,所以必須經(jīng)過其中關鍵的版本升級凄诞,才能順利完成數(shù)據(jù)更新操作.
    升級路徑可以參考官網(wǎng) - Upgrade paths, 這里簡要列舉路徑如下
    8.11.Z -> 8.12.0 -> 8.17.7 -> 9.5.10 -> 10.8.7 -> 11.11.8 -> 12.0.12 -> 12.1.17 -> 12.10.14 -> 13.0.14 -> 13.1.11 -> 13.8.8 -> latest 13.12.Z -> 14.0.12 -> 14.3.6 -> 14.9.5 -> 14.10.Z -> 15.0.Z -> 15.4.0 -> latest 15.Y.Z

  • 首先確定gitlab版本信息, 然后再選擇合適的升級路徑

     gitlab-rake gitlab:env:info
    
     # 例如
     GitLab information
     Version:        14.4.1-ee
     Revision:       abc23a14bac
    
    
  • 每個版本升級完成后圆雁,要啟動gitlab等待數(shù)據(jù)遷移完成
    查看數(shù)據(jù)遷移任務,有兩種查看方式帆谍,可以通過web界面查看伪朽,也可以通過命令行來查看.

    • web界面查看方式
      查看遷移任務的狀態(tài),打開web界面:
      在頁面頂部, 選擇 Menu > Admin.
      在頁面左側邊欄汛蝙,選擇Monitoring > Background Migrations.

    • 命令行查看方式

      gitlab-rails runner -e production 'puts Gitlab::BackgroundMigration.remaining'
      
  • 關閉gitlab的部分服務

      gitlab-ctl stop unicorn
      gitlab-ctl stop sidekiq
      gitlab-ctl stop nginx
      
    
  • 升級命令
    升級命令和安裝命令是一樣的, 將x.y.z-ee.0.el7替換成關鍵中間版本

       yum update -y gitlab-ee-x.y.z-ee.0.el7
    

    升級完成后烈涮,
    需要重新運行配置,否則啟動會失敗

       gitlab-ctl reconfigure
    

    如果有手動配置,需要重做一遍.
    需要啟動gitlab,等待數(shù)據(jù)遷移任務完成窖剑,然后再備份坚洽,再次進行下一個版本的升級.
    如果遇到嚴重問題,需要回退到上一個版本西土,導入備份讶舰,解決問題后繼續(xù)往后升級,所以備份很重要.
    備份恢復命令如下:
    其中636041545_2021_11_04_12.10.14為備份文件的名字需了,不包含文件名后綴.

    gitlab-rake gitlab:backup:restore BACKUP=1636041545_2021_11_04_12.10.14
    

6. gitlab遷移

  • 有時我們需要將gitlab遷移到新的性能更好的服務器.怎么進行遷移呢跳昼?當然方法很多,這里介紹其中的一種方式肋乍,即通過先備份鹅颊,然后在新的服務器上進行還原操作.

  • 說明: gitlab還原有一點需要注意,那就是備份文件只能是在與創(chuàng)建備份的gitlab版本相同的gitlab上才能恢復墓造,備份文件的后八位即是創(chuàng)建該備份的gitlab的版本挪略,該版本只能在這種版本下進行還原.

6.1. 備份數(shù)據(jù)

gitlab-rake gitlab:backup:create
  • 備份文件默認(如果沒做額外配置的情況下)保存在/var/opt/gitlab/backups目錄下面.

6.2. 在新服務器上安裝gitlab

  • 可以參考本文的安裝部分進行安裝

6.3. 還原備份

  • 將備份文件拷貝到新服務器的/var/opt/gitlab/backups目錄下,執(zhí)行恢復命令.備份文件參數(shù)滔岳,根據(jù)自己的實際情況進行修改.

    首先要將舊服務器上的兩個文件/etc/gitlab/gitlab.rb,/etc/gitlab/gitlab-secrets.json拷貝到新服務器, 否則后續(xù)會發(fā)現(xiàn)一些奇怪的問題.

    并將/etc/gitlab/gitlab.rb 的external_url設置為正確的url

    然后執(zhí)行gitlab-ctl reconfigure

    gitlab-rake gitlab:backup:restore BACKUP=1636041545_2021_11_04_12.10.14
    

如果還原失敗, 請先參考問題排查章節(jié), 再在到網(wǎng)上查找解決辦法.

7. 徹底卸載gitlab

  • 警告: 注意標題上徹底二字杠娱,在你不清楚卸載意味會發(fā)生什么的時候,請不要執(zhí)行以下任何步驟.

7.1. 卸載前備份

  • 卸載前執(zhí)行一次備份谱煤,備份存放位置為/var/opt/gitlab/backups, 因為后續(xù)該目錄也會被清除摊求,所以請將備份拷貝到一個安全的位置,因為后續(xù)動作可能會永久的刪除數(shù)據(jù)刘离,以便后續(xù)發(fā)生問題或反悔的時候室叉,可以從備份恢復數(shù)據(jù).

  • 備份數(shù)據(jù)

gitlab-rake gitlab:backup:create
  • 備份敏感數(shù)據(jù)

手動備份兩個具有敏感數(shù)據(jù)的文件

cp  /etc/gitlab/gitlab.rb  /var/opt/gitlab/backups
# and
cp  /etc/gitlab/gitlab-secrets.json  /var/opt/gitlab/backups

7.2. 執(zhí)行卸載

  • 關閉gitlab

     #關閉gtilab
     gitlab-ctl stop
     #查看gitlab狀態(tài)睹栖,確保已經(jīng)關閉
     gitlab-ctl status
    
  • 卸載應用程序

     rpm -e gitlab-ee
    
  • 刪除數(shù)據(jù)殘留
    首先確認有哪些數(shù)據(jù)殘留

      find / -name gitlab
    

    如果都是期望被刪除的,那么開始執(zhí)行刪除操作茧痕,再次提醒將備份拷貝一份到安全位置.

    find / -name gitlab | xargs rm -rf
    

問題排查

問題 1:
從一臺機遷移到另外一臺機時報如下錯錯誤


Restoring PostgreSQL database gitlabhq_production ... ERROR:  must be owner of extension pg_trgm
ERROR:  must be owner of extension btree_gist
ERROR:  must be owner of extension btree_gist
ERROR:  must be owner of extension pg_trgm

解決辦法:

修改postgresql配置, 能從本地連接到postgresql

$ vim /var/opt/gitlab/postgresql/data/postgresql.conf
listen_addresses = '*'
# 最下面新增兩行
$ vim /var/opt/gitlab/postgresql/data/pg_hba.conf
local   all         all                               trust
host    all         all                               127.0.0.1/32 trust

重啟gitlab使得配置生效


gitlab-ctl restart

修改gitlab賬號為超級用戶

$ su - gitlab-psql
$ /opt/gitlab/embedded/bin/psql -h 127.0.0.1 gitlabhq_production
psql (9.2.8)
Type "help" for help.
 
gitlabhq_production=# ALTER USER gitlab WITH SUPERUSER;
ALTER ROLE
gitlabhq_production=# \q

修改完gitlab用戶權限后, 記得將postgresql的配置文件改回去

  1. 保證安全性, 防止誤操作
  2. 以免后續(xù)安裝postgresql數(shù)據(jù)庫是參數(shù)端口沖突

參考文檔: http://www.reibang.com/p/09a2b0c25ecd

問題 2:

解決Gitlab遷移后野来,項目的 CI/ CD頁面報500錯誤

原因是: gitlab默認的備份機制,是不會備份gitlab.rb和gitlab-secrets.json文件的,
如果這兩文件還存在則將其拷貝到新的服務器, 如果不存在則將secrets 清除重設
參考: http://www.reibang.com/p/c46aa8c8539c

8. 后記

本技術博客原創(chuàng)文章位于鵬叔的技術博客空間 - gitlab安裝升級及遷移, 要獲取最近更新請訪問原文.

更多技術博客請訪問: 鵬叔的技術博客空間

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末踪旷,一起剝皮案震驚了整個濱河市曼氛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌令野,老刑警劉巖舀患,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異气破,居然都是意外死亡聊浅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門现使,熙熙樓的掌柜王于貴愁眉苦臉地迎上來低匙,“玉大人,你說我怎么就攤上這事碳锈∨溃” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵殴胧,是天一觀的道長。 經(jīng)常有香客問我佩迟,道長团滥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任报强,我火速辦了婚禮灸姊,結果婚禮上,老公的妹妹穿的比我還像新娘秉溉。我一直安慰自己力惯,他們只是感情好,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布召嘶。 她就那樣靜靜地躺著父晶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弄跌。 梳的紋絲不亂的頭發(fā)上甲喝,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音铛只,去河邊找鬼埠胖。 笑死糠溜,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的直撤。 我是一名探鬼主播非竿,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谋竖!你這毒婦竟也來了红柱?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤圈盔,失蹤者是張志新(化名)和其女友劉穎豹芯,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驱敲,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡铁蹈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了众眨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片握牧。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖娩梨,靈堂內(nèi)的尸體忽然破棺而出沿腰,到底是詐尸還是另有隱情,我是刑警寧澤狈定,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布颂龙,位于F島的核電站,受9級特大地震影響纽什,放射性物質(zhì)發(fā)生泄漏措嵌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一芦缰、第九天 我趴在偏房一處隱蔽的房頂上張望企巢。 院中可真熱鬧,春花似錦让蕾、人聲如沸浪规。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笋婿。三九已至,卻和暖如春顿颅,著一層夾襖步出監(jiān)牢的瞬間萌抵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绍填,地道東北人霎桅。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像讨永,于是被迫代替她去往敵國和親滔驶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容