自建GitLab環境:使用Docker的詳盡部署指南

閱讀時間約 16 分鐘

今天跟大家分享CI/CD流程中的一個重要的階段:版本管理系統。由於筆者的LAB環境需要有一個版本管理的做法,所以就想到非常普遍的Git系統。並且因為想要在本地直接建立專屬環境,所以就想到了gitlab。

raw-image

本文將說明以下內容:

  1. Gitlab vs GitHub
  2. Gitlab的基本說明
  3. 使用Docker來進行部署
  4. 安裝後:MTA設定
  5. 結論

1.Gitlab vs GitHub

我想這是最常被問到的第一個問題了吧…我到底要用Gitlab 還是用GitHub?

raw-image

首先,不管是Gitlab或是GitHub,說穿了就是以Git為基礎建構出來的版本管理系統。基本上Git是由Linus Torvalds為Linux Kernel所設計的版本控制軟體,雖然當初是專門為了Linux所設計,但因為真的太好用,所以許多開源專案也都使用這套方法來進行管理。

為怕有人不清楚,簡單說明它們是什麼:

raw-image
  • Gitlab: 是GitHub的另一個替代方案,該系統也基於Git。 當然,它是為託管開放原始碼專案而設計的,目的是使開發人員的生活更輕鬆,但是與前一個有所不同,除了倉庫管理和版本控制,它還提供Wiki託管和錯誤跟踪系統。 還可以用來創建和管理各種項目。
  • GitHub: 一個協作的開發平台並具有Web服務和版本控制系統。該平台專注於開發人員之間的合作,以傳播和支持他們的軟體(雖然也有許多人用來做開發軟體以外的其他目的)。該平台是用Ruby on Rails編寫的。GitHub上存儲了大量可公開訪問的開源項目。 這就是它的價值讓微軟在2018年選擇購買該平台,貢獻了不少於7500億美元的數字。

※ 接下來就是這二套系統的優點:

(1) GitLab:

  • 免費計劃無限制,儘管它有付款計劃。
  • 開源。
  • 允許在任何計劃上進行自我託管。
  • 它與Git很好地集成在一起。

(2) GitHub:

  • 免費服務,儘管它也提供付費服務。
  • 非常快速的搜索。
  • 社區很大,很容易找到幫助。
  • 它提供了與Git合作和良好集成的實用工具。
  • 易於與其他第三方服務集成。
  • 它還可以與TFS,HG和SVN一起使用

當然它們也都各自有各自的缺點,例如GitHub如果使用量超過1GB就要轉成付費帳戶,Gitlab相對於GitHub可能資源就沒有這麼龐大,但也相對的具備有完全的控制權的好處。


2.Gitlab的基本說明

上述簡單說明了與GitHub的差異,本節就專門針對Gitlab做更進一步的說明。

現在GitLab已分成GitLab CE(社群版)GitLab EE(企業版)。核心程式碼都是相同的。如果不想架設GitLab的話,也可以直接使用gitlab.com的服務。

常見的功能如下:

  • Git 版本控制系統
  • CI/CD Pipeline
  • 可以根據使用者存放在不同專案內的特定YAML檔案自動建立
  • 目前已經可以順利整合從測試到部署的常見工具
  • 提供一個整合的開發Workflow : GitLab Workflow
  • CI/CD Pipeline的Job必須透過GitLab Runner來協助執行
  • 程式碼專案管理功能(Ex. Wiki, Issue Tracking, Kanban….)

針對相關設定、記錄檔、資料檔的存放位置,另外需要建立掛載的目錄,可以在家目錄內,也可以另外建立。

※ Gitlab容器所會使用的位置與說明如下:

raw-image

※ Gitlab使用者權限:

raw-image

3.使用Docker來進行部署

接下來就進入部署階段,大家可以試著跟據這邊提供的做法實際部署看看,Gitlab有許多種部署方式,可以到官網上去看相關文件說明。

以下使用docker image 來進行部署,該image已包含所有需要的元件。安裝的方式有以下三種:

  • Docker engine
  • Docker compose
  • Docker swarm

本LAB使用Docker compose來進行部署,此外官方的Image並沒有包含MTA元件,如果有寄信的需求,建議在另外建立一個Container或服務來實現。

如果要部署在K8S環境,建議使用官方另一個部署的方式(Operator),不然可能造成單點失誤。

此處使用:gitlab/gitlab-ce:latest

#---------------------------------------------------
# S3-1. 建立目錄
#---------------------------------------------------
[root]# mkdir -p /srv/gitlab
[root]# vim /root/.bash_profile
export GITLAB_HOME=/srv/gitlab
#---------------------------------------------------
# S3-2. Change the GitLab Shell SSH port
# GitLab使用SSH來與Git溝通,預設是22 Port,但會與主機相衝
# 可以選擇直接改主機的SSH不要使用22,或是修改GitLab不要用22 Port
#---------------------------------------------------
=> 用docker-compose的話,直接改內容即可
#---------------------------------------------------
# S3-3. 建立docker-compose.yaml
#---------------------------------------------------
[root]# mkdir -p /root/gitlab/
[root]# vim docker-compose.yml
version: '3.6'
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
restart: always
hostname: 'gitlab.test.example.poc'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.test.example.poc:8929'
gitlab_rails['gitlab_shell_ssh_port'] = 2424
ports:
- '8929:8929'
- '8443:8443'
- '2424:2424'
volumes:
- '$GITLAB_HOME/config:/etc/gitlab'
- '$GITLAB_HOME/logs:/var/log/gitlab'
- '$GITLAB_HOME/data:/var/opt/gitlab'
shm_size: '256m'

[root]# docker-compose up -d
[root]# docker ps
#---------------------------------------------------
# S3-4. 登入Web
#---------------------------------------------------
http://gitlab.test.example.poc:8929
=> 修改初始密碼 (root/P@ssw0rd)

如果沒出現,可以到$GITLAB_HOME/config/initial_root_password取得登入密碼
[root]# docker exec -it gitlab /bin/bash (cat $GITLAB_HOME/config/initial_root_password)
Password: I+UkaZl6xT0iMBBXJ3TIZNor+M+ZnOz//Hhoz01zSHk=
raw-image
raw-image

4.安裝後:MTA設定

以下是一般安裝完GitLab之後會做的幾件任務,可跟據需求進行安裝設定:

  • Email and Notification
  • CI/CD
  • Security
  • Authentication
  • Backup and Upgrade

本文將進行Email and Notification的設定,使用本機的smtp server進行發信。

#-------------------------------------------------
# S4-1. 取得docker host ip
#-------------------------------------------------
[root]# ip a
10.107.88.7
#-------------------------------------------------
# S4-2. 修改docker-compose, 加入本機IP
#-------------------------------------------------
[root]# vim docker-compose.yaml
version: '3.6'
services:
gitlab:
image: gitlab/gitlab-ce:latest
extra_hosts:
- "dockerhost:10.107.88.7"
container_name: gitlab
restart: always

[root]# docker-compose up -d
#-------------------------------------------------
# S4-3. 確認container內部的/etc/hosts
#-------------------------------------------------
[root]# docker exec -it gitlab /bin/bash
root# cat /etc/hosts
10.107.88.7 dockerhost
172.18.0.2 gitlab.test.example.poc gitlab
#-------------------------------------------------
# S4-4. 修改sendmail
#-------------------------------------------------
[root]# yum install sendmail
[root]# vim /etc/mail/sendmail.cf (開啟25 Port可連線)
#註解以下
#O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA
#新增以下
O DaemonPortOptions=Port=smtp,Addr=0.0.0.0, Name=MTA

[root]# systemctl restart sendmail
[root]# nc -v localhost 25s
raw-image
#-------------------------------------------------
# S4-5. 允許relay清單
#-------------------------------------------------
[root]# vim /etc/mail/access
最後加上
Connect:10.107.88 RELAY
#-------------------------------------------------
# S4-6. 讓gitlab透過host的sendmail寄信
#-------------------------------------------------
[root]# vim /srv/gitlab/config/gitlab.rb
gitlab_rails[‘smtp_enable’] = true
gitlab_rails[‘smtp_address’] = “dockerhost"
gitlab_rails[‘smtp_port’] = 25
#gitlab_rails[‘smtp_user_name’] = “"
#gitlab_rails[‘smtp_password’] = “"
gitlab_rails[‘smtp_domain’] = “dockerhost"
#gitlab_rails[‘smtp_authentication’] = “none"
gitlab_rails[‘smtp_openssl_verify_mode’] = ‘none’
gitlab_rails[‘smtp_enable_starttls_auto’] = false
gitlab_rails[‘smtp_tls’] = false
gitlab_rails[‘smtp_ssl’] = false
gitlab_rails[‘smtp_force_ssl’] = false
#gitlab_rails[‘smtp_pool’] = false

設定寄件者
gitlab_rails[‘gitlab_email_from’] = ‘gitlabuser@test.example.poc’
gitlab_rails[‘gitlab_email_display_name’] = ‘gitlabuser’

設定gitlab admin寄件者
alertmanager[‘admin_email’] = ‘c’

[root]# docker exec -it gitlab /bin/bash
root# gitlab-ctl reconfigure

[2024-02-16T03:19:10+00:00] INFO: Report handlers complete
Infra Phase complete, 7/778 resources updated in 55 seconds
gitlab Reconfigured!
#-------------------------------------------------
# S4-7. 測試localhost寄信
# 此為測試,確認可從gitlab container發信到localhost即可
#-------------------------------------------------
[root]# nc -v localhost 25
EHLO localhost (跟主機打招呼)
MAIL FROM:<gitlabuser@test.example.poc>
RCPT TO:<gitlabuser@test.example.poc>
DATA
SUBJECT: mail server text!
Test!!
raw-image

5.結論

今天說明了Gitlab與GitHub的差異與在自已的環境內部署Gitlab來進行測試的分享。筆者實務上Gitlab與GitHub都有在使用。但GitHub的主要內容是做為測試文章的異地備份點,同時GitHub也有自已的App,讓筆者可以隨時透過手機就可以查看自已的筆記內容。

未來也將繼續針對安裝完後的一些實務作法,例如實務上建構出CI/CD的Pipeline,部署在K8S內的做法等等進行分享,也希望大家持續關注。

最後,也希望大家可以給筆者一個鼓勵,如果想要第一時間看到後續的文章也請大家follow我~那我們下期再見~~~


※ References:

15會員
40內容數
記錄IT社畜的自我學習筆記,如同專題名稱,主要是怕自已忘記自已做過什麼、學到什麼。索性就分享我自已在學習Kubernetes這條路上的各種測試、學習心得。
留言0
查看全部
發表第一個留言支持創作者!
超健忘閒人的沙龍 的其他內容
本文介紹了在K8S Cluster出現問題時,透過ETCD的備份來還原Cluster的方法。包括ETCD的資料類型、備份、還原以及相關建議,並提出了自動進行ETCD備份作業和備份存放位置的重要性。
本文將探討Kubernetes內部DNS解析的相關流程,並介紹如何利用DNS來找到服務。透過瞭解DNS的工作原理,可以讓應用服務的問題處理更有效率,並提供基本測試與結論。
本篇將介紹Minio的功能和如何與Harbor進行整合,並說明這樣做的好處。包括Minio的優勢及Harbor x Minio的部署和測試。
本文闡述了Kubernetes內部網路通訊的基本概念,從容器到服務的溝通流程,並討論了Kubernetes使用的各種技術。重要的是,管理Kubernetes叢集時理解這些基本概念是極其重要的。
在Kubernetes cluster上建立Jenkins,並且使用動態方式建立Jenkins Agent。透過K8S解決傳統的Jenkins一對多架構的問題,最終建立基本Pipeline在Jenkins Web UI上,簡單驗證Jenkins engine正常運行。
本篇說明如何利用Kubernetes特色,將PostgreSQL DB以HA的架構來提供服務,並說明相關的實作流程與說明。
本文介紹了在K8S Cluster出現問題時,透過ETCD的備份來還原Cluster的方法。包括ETCD的資料類型、備份、還原以及相關建議,並提出了自動進行ETCD備份作業和備份存放位置的重要性。
本文將探討Kubernetes內部DNS解析的相關流程,並介紹如何利用DNS來找到服務。透過瞭解DNS的工作原理,可以讓應用服務的問題處理更有效率,並提供基本測試與結論。
本篇將介紹Minio的功能和如何與Harbor進行整合,並說明這樣做的好處。包括Minio的優勢及Harbor x Minio的部署和測試。
本文闡述了Kubernetes內部網路通訊的基本概念,從容器到服務的溝通流程,並討論了Kubernetes使用的各種技術。重要的是,管理Kubernetes叢集時理解這些基本概念是極其重要的。
在Kubernetes cluster上建立Jenkins,並且使用動態方式建立Jenkins Agent。透過K8S解決傳統的Jenkins一對多架構的問題,最終建立基本Pipeline在Jenkins Web UI上,簡單驗證Jenkins engine正常運行。
本篇說明如何利用Kubernetes特色,將PostgreSQL DB以HA的架構來提供服務,並說明相關的實作流程與說明。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
分享攝影愛好者面臨的就業困難和找尋合作夥伴的經歷,強調風格的重要性,並鼓勵大家放下焦慮,尋找合作對象時,專注於自己喜歡且擅長的事情。
Thumbnail
在現代數位時代,自建網站已成為常態,但許多人對於成本感到困惑。本文將探討自建網站的基本成本和相關考量因素。
Win10不知從何時取消數字鍵盤預設開啟,每次登入時都很不方便,於是我上網找了大家分享的方式終於解決了長期的困擾: Win+R輸入regedit開啟登錄編輯程式
Thumbnail
什麼是RSS? 知道什麼是RSS訂閱服務嗎? 很久很久以前,我使用Google Reader來訂閱各個Blog的RSS,這樣每次這些Blog有更新,我也會在Google Reader中看到新文章,不用特意逐個Blog拜訪。 後來Google Reader停止服務,我立即尋找取代品,當時選擇了F
Thumbnail
在 Docker 上自建 GitLab Server 是一種方便且有效的方式來託管和管理您的程式碼。使用 Docker,您可以快速建立一個 GitLab 伺服器並且輕鬆進行配置和擴展。
房價貴桑桑,讓許多有意買房的民眾望屋興嘆,於是便有人想另闢蹊徑,萌生買地自建的念頭。那麼買地自建的方案真的能省下不少冤枉錢? 一名網友於臉書社團「靠北建商」中發文,他表示其夢想擁有屬於自己的房子,但手頭僅有300萬元現金,不想委屈自己住在屋況差的中古屋,也不願被建商魚肉,好奇詢問眾人,「買地自建」的
    真輪到了自己,才發覺毛遂自薦應當是世界上數一數二的難事了。     何以說它難呢?因為自薦等於是一個人飾演雙角:既是新娘,也是媒人。一個傳統的新娘子要得到婆家的青眼,可是要端莊自持的,講話要輕聲細語、婉約含蓄,舉止娉婷柔巧、溫惠慈孝,更要記得女子無才便是德,不得張揚顯擺。過份地誇耀自己的好處
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
分享攝影愛好者面臨的就業困難和找尋合作夥伴的經歷,強調風格的重要性,並鼓勵大家放下焦慮,尋找合作對象時,專注於自己喜歡且擅長的事情。
Thumbnail
在現代數位時代,自建網站已成為常態,但許多人對於成本感到困惑。本文將探討自建網站的基本成本和相關考量因素。
Win10不知從何時取消數字鍵盤預設開啟,每次登入時都很不方便,於是我上網找了大家分享的方式終於解決了長期的困擾: Win+R輸入regedit開啟登錄編輯程式
Thumbnail
什麼是RSS? 知道什麼是RSS訂閱服務嗎? 很久很久以前,我使用Google Reader來訂閱各個Blog的RSS,這樣每次這些Blog有更新,我也會在Google Reader中看到新文章,不用特意逐個Blog拜訪。 後來Google Reader停止服務,我立即尋找取代品,當時選擇了F
Thumbnail
在 Docker 上自建 GitLab Server 是一種方便且有效的方式來託管和管理您的程式碼。使用 Docker,您可以快速建立一個 GitLab 伺服器並且輕鬆進行配置和擴展。
房價貴桑桑,讓許多有意買房的民眾望屋興嘆,於是便有人想另闢蹊徑,萌生買地自建的念頭。那麼買地自建的方案真的能省下不少冤枉錢? 一名網友於臉書社團「靠北建商」中發文,他表示其夢想擁有屬於自己的房子,但手頭僅有300萬元現金,不想委屈自己住在屋況差的中古屋,也不願被建商魚肉,好奇詢問眾人,「買地自建」的
    真輪到了自己,才發覺毛遂自薦應當是世界上數一數二的難事了。     何以說它難呢?因為自薦等於是一個人飾演雙角:既是新娘,也是媒人。一個傳統的新娘子要得到婆家的青眼,可是要端莊自持的,講話要輕聲細語、婉約含蓄,舉止娉婷柔巧、溫惠慈孝,更要記得女子無才便是德,不得張揚顯擺。過份地誇耀自己的好處