CentOS8.1中搭建Gitlab服務器


  依舊是寫在前面的話♠:很多IT人從業N年也許都還沒有親自搭過一次Gitlab服務器,是不是?有木有?!通常都是背着自己的筆記電腦到一家公司入職,或入職后領到公司分配的電腦,然后分配了Git賬號,拿到將要負責的項目的Git地址把項目clone下來!然后日復一日的coding、commit、pull、push、checkout、merge,直到離職!現在全民Git的年代(IT農民工的“民”),也許你自己也用了幾百年Git了,要是從來沒有親自部署過Gitlab服務器,會不會不太好!雖然現在社會分工越來越細,部署Gitlab服務器通常都是運維的兄弟去做了,但如果你去一家創業公司,很可能就要你來部署的!所以我決定把這個過程和要注意的一些細節記錄一下,就有了這篇隨筆了!

  Gitlab和Github的區別就不多說了,一句話來概括就是:Gitlab是給企業私有化部署的Git服務器,Github是互聯網在線版的Git服務器

  Github對於開源項目建倉是免費使用的,那么Gitlab收不收費呢?分布式版本控制方面的功能Gitlab也是免費使用的,提供了社區版(Gitlab CE)給大家!Gitlab現在可強大了(2020年),已經有自己成套的DevOps落地解決方案(提高生產力的利器),但是這部分功能是在收費的旗艦版/企業版(Gitlab EE)上提供的!就像Github建私有化倉庫的功能也是收費的一樣,很正常!

  本文內容簡單輕松,車速也不快,各位同學不用坐太好也不用扶太穩!現在來正式從“零”開始搭建Gitlab服務器:

  首先,百度里找到Giblab官網,先進去首頁!不要太深入!(未來各位同學看到的界面可能會不一樣,時代在進步,網站也在持續更新嘛!我這里的一系列截圖是2020.06的)

  看看這首屏的廣告和設計,多么科技和魅力→DevOps、CI、CD,一個個的關鍵字都是當前中國各類互聯網公司研發體系正在努力改造的方向(2020年)!看到那個大大的騷黃色寫着“Try Gitlab fro FREE”的按鈕沒有→“免費試用Gitlab”的意思,也就是試用完后要收費的旗艦版Gitlab EE的入口。在首頁看了一圈也沒看到傳說中的免費的社區版Gitlab CE的入口,咱到頂部導航菜單項"Install Gitlab"里看看:

  還是30天試用期的旗艦版(企業版)的入口和安裝說明!不過這里有個重要的信息要留意下“recommend at least 4GB of free RAM to run GitLab”,官方建議使用至少4GB的可用內存來運行Gitlab,那我們一會安裝虛擬機或選用服務器時就要注意了,至少要4GB以上,最好是6GB以上,因為還要留些空間給操作系統用!我們再點進CentOS 8的Gitlab安裝說明里,看看有沒有咱想要的社區版(Gitlab CE):

  乍一看好像還是沒有的樣子,只是展開了在CentOS 8下的安裝步驟和方法!那就看看CentOS 8中怎么裝吧,看着看着,在最后發現了些什么:

  在安裝步驟的最后,有一個短短的鏈接,寫着"CE or EE",似乎有個CE版的入口,點進去:

  新頁面前面的好幾段依然在講使用旗艦版(企業版Gitlab EE)有多少好處....直到最后才放了一個免費社區版(Gitlab CE)的鏈接“Install GitLab Community Edition”,藏得這么深,這是怕別人知道啊!續繼點進去:

  終於到了,現在瀏覽地址欄和頁面中的安裝說明的內容都已變成CE版的(將來看到這文章的同學,那時可能Gitlab官網已經改版了,社區版(Gitlab CE)的入口位置和地址也可能換了,但只要Gitlab還有免費版,就肯定會在官網某個地方有個入口的!)。

  找到了Gitlab CE版的安裝說明,我們老樣子,准備好新的CentOS 8.1虛擬機,根據官方建議,這台虛擬機內存和硬盤都設置大一點:

  虛擬機准備好后,按着官方Gitlab CE版的安裝說明進行安裝即可,其實很簡單,認真算起來只有三步(由於我是root身份,所以不用sudo):

  第一步:安裝和啟用policycoreutils、openssh-server和openssh-clients組件,並將它們開放防火牆(不要忘了reload防火牆):

# dnf install -y curl policycoreutils openssh-server openssh-clients
# systemctl enable sshd
# systemctl start sshd
# firewall-cmd --permanent --add-service=http
# firewall-cmd --permanent --add-service=https
# systemctl reload firewalld

  與郵件通知相關的Postfix組件其實可以暫時不用安裝和配置,這個可以放到后面再來配置一個外部的SMTP服務器:

# dnf install postfix
# systemctl enable postfix
# systemctl start postfix

 


 

  第二步:使用curl工具下載並配置Gitlab CE版RPM安裝包的倉庫配置腳本(請確認你的虛擬機能聯接網絡,注意這只是RPM安裝包的倉庫配置腳本,並不是真正的安裝包)

# curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash

 

  第三步:安裝Gitlab CE版並指定外部訪問的URL地址,這里注意一下:外部訪問URL地址使用一個自定義的域名,即使該域名實際上沒有也沒關系!另外如果你的服務器沒有https相關的證書,那就不要用https,直接用http協議!客戶端使用時你可以在HOST里做一下映射的,當然,有真實可以的域名就最好了!為什么要用域名來指定外部訪問URL地址呢?因為后面你使和Gitlab時會發現這是一個明智的選擇!

# EXTERNAL_URL="http://gitlab.xgclassroom.com" dnf install -y gitlab-ce

  到這里你會發現要從第二步中配置的國外站下載多達700M的gitlab-ce包是有多么的艱難,預計耗時估計要10幾個鍾,驚不驚喜,意不意外!當然,如果你有國際網絡VPN就當我沒說!!!

 


 

  第三步的蝸牛速度是無法忍受的,Ctrl+C 掐斷下載過程吧,換其它方法:

  1. 自己先從其他地方下載到gitlab-ce的rmp包,再上傳到服務器進行安裝;
  2. 使用一個國內鏡像地址進行在線安裝;

  這里我們講一下第二種辦法,使用國內鏡像地址進行在線安裝,這里我們選擇清華大學提供的鏡像服務器,因為它提供了比較全面的使用說明(https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/),現在我們按說明來安裝一下Gitlab CE版(以下步驟是從承接上面的第二步開始的):

  的第二步:使用vi或vim新建並編輯yum源配置文件 /etc/yum.repos.d/gitlab-ce.repo

# vim /etc/yum.repos.d/gitlab-ce.repo

  填入以下yum源配置信息:

[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1

 

  新的第三步:使用yum包管理器安裝Gitlab CE版

# yum makecache
# yum -y install gitlab-ce

  有沒有發現,在“新的第三步”里比原來的第三步少了個東西,啥東西呢?細心的同學肯定發現了,沒有配置Gitlab服務器的外部訪問地址(EXTERNAL_URL)!不要急,等待Gitlab裝完后我們再去配一下就好了!國內鏡像還是比較快的,幾分鍾就下載並裝好了,出現騷氣的狐狸頭圖標!

  好了,現在該來補上“新的第三步”里缺失的Gitlab服務器的外部訪問地址(EXTERNAL_URL),在哪里配置呢?熟悉Linux服務器各目錄作的人應該都能猜到:Gitlab這么全球通用的版本控制軟件,配置文件應該會也按照Linux約定放在 /etc 目錄中吧!使用cd到/etc目錄看一看或用 ls /etc/gitl 再tab一下就知道了!

# ls /etc/gitlab/
gitlab.rb

  果然是有一個Gitlab的配置文件!使用cat命令查看一下發現內容不是一般的多,眼睛都會看瞎!那么我們用grep命令先過濾出包含外部訪問地址(EXTERNAL_URL)配置內容先:

# grep -i 'EXTERNAL_URL' /etc/gitlab/gitlab.rb 
##! For more details on configuring external_url see:
##! EXTERNAL_URL will be used to populate/replace this value.
external_url 'http://gitlab.example.com'
# registry_external_url 'https://registry.example.com'
# pages_external_url "http://pages.example.com/"
# gitlab_pages['artifacts_server_url'] = nil # Defaults to external_url + '/api/v4'
# gitlab_pages['auth_redirect_uri'] = nil # Defaults to projects subdomain of pages_external_url and + '/auth'
# gitlab_pages['gitlab_server'] = nil # Defaults to external_url
# mattermost_external_url 'http://mattermost.example.com'
# When the registry is automatically enabled using the same domain as `external_url`,
# For example, if external_url is the same for two secondaries, you must specify
# If it is blank, it defaults to external_url.

  很好,現在確認與外部訪問地址(EXTERNAL_URL)相關的內容就這么多,動手前先用cp命令備份一下/etc/gitlab/gitlab.rb文件,因為后面我們要做字符串直接替換這種高險操作!有備無患!

# cp /etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb.bak
# ls /etc/gitlab/
gitlab.rb  gitlab.rb.bak

  最后 ls確認備份成功后就可以動手了!

     現在使用sed命令替換/etc/gitlab/gitlab.rb文件中的 http://gitlab.example.com 為 http://gitlab.xgclassroom.com 

  sed命令字符串替換格式: sed -i "s$要查找的字段$替換成的字段&g" 文件名 ,-i 表示是in place edit的意思,即就地編輯更改;參數里開頭的s是search的意思,可以換成d表示delete,最后的g是global的意思,即全文搜索;

# sed -i "s#http://gitlab.example.com#http://gitlab.xgclassroom.com#g" /etc/gitlab/gitlab.rb

  完了后,我們再用grep命令先篩選一下與外部訪問地址(EXTERNAL_URL)相關的內容:

# grep -i 'EXTERNAL_URL' gitlab.rb 
##! For more details on configuring external_url see:
##! EXTERNAL_URL will be used to populate/replace this value.
external_url 'http://gitlab.xgclassroom.com'
# registry_external_url 'https://registry.example.com'
# pages_external_url "http://pages.example.com/"
# gitlab_pages['artifacts_server_url'] = nil # Defaults to external_url + '/api/v4'
# gitlab_pages['auth_redirect_uri'] = nil # Defaults to projects subdomain of pages_external_url and + '/auth'
# gitlab_pages['gitlab_server'] = nil # Defaults to external_url
# mattermost_external_url 'http://mattermost.example.com'
# When the registry is automatically enabled using the same domain as `external_url`,
# For example, if external_url is the same for two secondaries, you must specify
# If it is blank, it defaults to external_url.

  發現替換成功了!但是不要太激動,還要使用gitlab-ctl工具根據修改后的配置文件重新配置gitlab服務實例使配置生效:

# gitlab-ctl reconfigure
...
由於gitlab體系龐大,這將是一個要點時間的過程,等吧!
...

  gitlab服務實例重新配置完成后,可以使用gitlab-ctl工具查看一下gitblab的服務狀態:

# gitlab-ctl status
run: alertmanager: (pid 32119) 292s; run: log: (pid 31878) 325s
run: gitaly: (pid 32004) 294s; run: log: (pid 31180) 401s
run: gitlab-exporter: (pid 32013) 293s; run: log: (pid 31778) 342s
run: gitlab-workhorse: (pid 31980) 294s; run: log: (pid 31506) 366s
run: grafana: (pid 32136) 291s; run: log: (pid 31951) 302s
run: logrotate: (pid 31615) 357s; run: log: (pid 31703) 354s
run: nginx: (pid 31548) 363s; run: log: (pid 31568) 360s
run: node-exporter: (pid 31998) 294s; run: log: (pid 31729) 347s
run: postgres-exporter: (pid 32129) 291s; run: log: (pid 31905) 321s
run: postgresql: (pid 31219) 398s; run: log: (pid 31326) 397s
run: prometheus: (pid 32103) 293s; run: log: (pid 31843) 331s
run: puma: (pid 31412) 377s; run: log: (pid 31433) 376s
run: redis: (pid 30999) 410s; run: log: (pid 31038) 407s
run: redis-exporter: (pid 32017) 293s; run: log: (pid 31807) 337s
run: sidekiq: (pid 31436) 375s; run: log: (pid 31454) 371s

  還可以使用以下命令查看一下操作系統內存的使用情況,看看內存是否夠gitlab用:

# free -m
              total        used        free      shared  buff/cache   available
Mem:           3757        2063         394          82        1299        1376
Swap:          8191          12        8179

  如果上述的結果中Swap分區使用得不是很多,那基本上表示內存是夠gitlab服務用的,如果Swap分區占用了很多,那就要考慮給機器增加內存了,虛擬機增加內存很簡單就不多說了!

 

  最后從虛擬機的宿主機瀏覽器上用IP地址或域名(用域名的話需要先在宿主機的C:\Windows\System32\drivers\etc\hosts配置域名與IP地址映射,所以實際上還是IP)訪問一下gitlab服務:

  如上述截圖,可以看到能正常訪問我自己的搭的Gitlab服務器了,首次使用要求我們更改Gitlab服務的超級管理員root賬號的密碼,改密之后再登錄就可以愉快的玩耍了!

  Gitlab的使用相信IT人應該都比較熟,暫時就不多講了!除了客戶端SSH密鑰應用方面要注意一點:不要嘗試修改ssh-keygen生成的客戶機默認密鑰文件名,因為像Git for Windows類的Git客戶端工具默認讀取的密鑰文件名是約定好的(雖然也可以通過配置更改,但很麻煩的)


免責聲明!

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



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