- 1. gitlab簡介
- 2. 安裝環(huán)境介紹
- 3. gitlab 安裝
- 4. 系統(tǒng)要求
- 5. gitlab升級
- 6. gitlab遷移
- 7. 徹底卸載gitlab
- 問題排查
- 8. 后記
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
關閉gitlabgitlab-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的配置文件改回去
- 保證安全性, 防止誤操作
- 以免后續(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安裝升級及遷移, 要獲取最近更新請訪問原文.
更多技術博客請訪問: 鵬叔的技術博客空間