自建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:

avatar-img
15會員
40內容數
記錄IT社畜的自我學習筆記,如同專題名稱,主要是怕自已忘記自已做過什麼、學到什麼。索性就分享我自已在學習Kubernetes這條路上的各種測試、學習心得。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
超健忘閒人的沙龍 的其他內容
本文介紹了在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
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Windows : 下載Git (git-scm.com)並按照指示安裝。 安裝完成後,你可以通過運行以下命令來確認安裝是否成功: git --version 初次設定GIT 接下來就是按照初次設定git,會需要配置你的用戶名和電子郵件地址,這些信息將被記錄在您提交的每個變更中。 git
Thumbnail
本篇文章介紹如何使用Git Bash進行版本控制操作,包括創建repository、查看狀態、歷程以及加入暫存和提交暫存等操作。透過基本的Git指令,您可以更深入地瞭解Git工具的使用方法。
Thumbnail
GitLab為程式碼管理倉庫,且從8.0開始提供CI/CD。 安裝 更新套件索引 sudo apt update 安裝postfix sudo apt install ca-certifi​cates curl openssh-server postfix 切換目錄 cd /t
※ 需要做版本備份時: git init:初始化此資料夾,由git 開始追蹤版本控制。 git add:將檔案加入到暫存區。 git commit:把暫存區的內容提交到儲存庫。 git status:查看目前所有檔案的狀態。 git log:查看過去所有commit的記錄。 ※ 需要做修
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
※ 簡短說明Git 和 Git Flow 是什麼?如何應用? Git 是什麼? Git是一個分散式版本控制軟體,能夠紀錄檔案的狀態變化,以及協調多個開發者之間的工作。它允許團隊成員協作編輯和管理項目的代碼庫,並且能夠追蹤文件的歷史變更、恢復到以前的版本、合併不同版本的代碼,以及解決代碼衝突等。
※ 關於Git (二) 請寫下從 Github 上複製一個專案下來,做一次遞交,然後推上去會用到的所有 git 指令。 複製專案(Clone) markdown-here: git clone https://github.com/adam-p/markdown-here.git 如果在訊息
Thumbnail
在 Ubuntu 22.04 上使用 GitLab,請依照下列步驟操作。首先,使用nano文字編輯器開啟「gitlab.rb」檔案並尋找存取GitLab的URL: sudo nano /etc/gitlab/gitlab.rb 到下面的連結以使用 Ubuntu 22.04 上的 GitL
Thumbnail
GitLab 是一個 DevOps、基於 Web 的免費開源平台 Git 儲存庫,為開發人員提供了所有必要的功能。它是一個用於開發 DevOps 應用程式的一體式平台。 GitLab 允許您執行原始碼管理、監控、安全性和專案規劃任務。 Update system packages: sudo
Thumbnail
前言 大家好上次我們教了如何建立自己的 Docker Image,今天我們要來教怎麼把自己做好的 Docker Image 上傳到 Docker Hub,如果以後自己在公司有搭建 Docker Registry,也可以用同樣方式上傳到公司的 Docker Registry 私有倉庫 登入 Doc
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Windows : 下載Git (git-scm.com)並按照指示安裝。 安裝完成後,你可以通過運行以下命令來確認安裝是否成功: git --version 初次設定GIT 接下來就是按照初次設定git,會需要配置你的用戶名和電子郵件地址,這些信息將被記錄在您提交的每個變更中。 git
Thumbnail
本篇文章介紹如何使用Git Bash進行版本控制操作,包括創建repository、查看狀態、歷程以及加入暫存和提交暫存等操作。透過基本的Git指令,您可以更深入地瞭解Git工具的使用方法。
Thumbnail
GitLab為程式碼管理倉庫,且從8.0開始提供CI/CD。 安裝 更新套件索引 sudo apt update 安裝postfix sudo apt install ca-certifi​cates curl openssh-server postfix 切換目錄 cd /t
※ 需要做版本備份時: git init:初始化此資料夾,由git 開始追蹤版本控制。 git add:將檔案加入到暫存區。 git commit:把暫存區的內容提交到儲存庫。 git status:查看目前所有檔案的狀態。 git log:查看過去所有commit的記錄。 ※ 需要做修
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
※ 簡短說明Git 和 Git Flow 是什麼?如何應用? Git 是什麼? Git是一個分散式版本控制軟體,能夠紀錄檔案的狀態變化,以及協調多個開發者之間的工作。它允許團隊成員協作編輯和管理項目的代碼庫,並且能夠追蹤文件的歷史變更、恢復到以前的版本、合併不同版本的代碼,以及解決代碼衝突等。
※ 關於Git (二) 請寫下從 Github 上複製一個專案下來,做一次遞交,然後推上去會用到的所有 git 指令。 複製專案(Clone) markdown-here: git clone https://github.com/adam-p/markdown-here.git 如果在訊息
Thumbnail
在 Ubuntu 22.04 上使用 GitLab,請依照下列步驟操作。首先,使用nano文字編輯器開啟「gitlab.rb」檔案並尋找存取GitLab的URL: sudo nano /etc/gitlab/gitlab.rb 到下面的連結以使用 Ubuntu 22.04 上的 GitL
Thumbnail
GitLab 是一個 DevOps、基於 Web 的免費開源平台 Git 儲存庫,為開發人員提供了所有必要的功能。它是一個用於開發 DevOps 應用程式的一體式平台。 GitLab 允許您執行原始碼管理、監控、安全性和專案規劃任務。 Update system packages: sudo
Thumbnail
前言 大家好上次我們教了如何建立自己的 Docker Image,今天我們要來教怎麼把自己做好的 Docker Image 上傳到 Docker Hub,如果以後自己在公司有搭建 Docker Registry,也可以用同樣方式上傳到公司的 Docker Registry 私有倉庫 登入 Doc