自建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
留言分享你的想法!
avatar-img
超健忘閒人的沙龍
15會員
40內容數
記錄IT社畜的自我學習筆記,如同專題名稱,主要是怕自已忘記自已做過什麼、學到什麼。索性就分享我自已在學習Kubernetes這條路上的各種測試、學習心得。
2024/05/08
本文將介紹如何在Gitlab上部署和註冊runner,以進行CI/CD測試。透過Docker-compose方式進行部署,同時注意安裝時的一些注意事項。建議學習者至少掌握一種以上的Pipeline工具,以滿足實務上的需求。
Thumbnail
2024/05/08
本文將介紹如何在Gitlab上部署和註冊runner,以進行CI/CD測試。透過Docker-compose方式進行部署,同時注意安裝時的一些注意事項。建議學習者至少掌握一種以上的Pipeline工具,以滿足實務上的需求。
Thumbnail
2024/04/19
上一篇說明了如何在Kubernetes上建立基本的MySQL standalone,並加入phpmyadmin(PMA)來進行圖形化的管理,本篇就再進階一步,實作MySQL replication架構(master-salve),並進行驗證是否成功。
Thumbnail
2024/04/19
上一篇說明了如何在Kubernetes上建立基本的MySQL standalone,並加入phpmyadmin(PMA)來進行圖形化的管理,本篇就再進階一步,實作MySQL replication架構(master-salve),並進行驗證是否成功。
Thumbnail
2024/04/09
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
2024/04/09
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
本篇文章介紹如何使用Git Bash進行版本控制操作,包括創建repository、查看狀態、歷程以及加入暫存和提交暫存等操作。透過基本的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
Thumbnail
GitLab為程式碼管理倉庫,且從8.0開始提供CI/CD。 安裝 更新套件索引 sudo apt update 安裝postfix sudo apt install ca-certifi​cates curl openssh-server postfix 切換目錄 cd /t
Thumbnail
本文將介紹如何在Gitlab上部署和註冊runner,以進行CI/CD測試。透過Docker-compose方式進行部署,同時注意安裝時的一些注意事項。建議學習者至少掌握一種以上的Pipeline工具,以滿足實務上的需求。
Thumbnail
本文將介紹如何在Gitlab上部署和註冊runner,以進行CI/CD測試。透過Docker-compose方式進行部署,同時注意安裝時的一些注意事項。建議學習者至少掌握一種以上的Pipeline工具,以滿足實務上的需求。
Thumbnail
本文將介紹Gitlab與GitHub的差異,以及在本地環境部署Gitlab的流程與實作。文章內容包括版本管理系統的選擇,Gitlab的基本功能,以及使用Docker進行部署的詳細步驟。
Thumbnail
本文將介紹Gitlab與GitHub的差異,以及在本地環境部署Gitlab的流程與實作。文章內容包括版本管理系統的選擇,Gitlab的基本功能,以及使用Docker進行部署的詳細步驟。
Thumbnail
在 Ubuntu 22.04 上使用 GitLab,請依照下列步驟操作。首先,使用nano文字編輯器開啟「gitlab.rb」檔案並尋找存取GitLab的URL: sudo nano /etc/gitlab/gitlab.rb 到下面的連結以使用 Ubuntu 22.04 上的 GitL
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
GitLab 是一個 DevOps、基於 Web 的免費開源平台 Git 儲存庫,為開發人員提供了所有必要的功能。它是一個用於開發 DevOps 應用程式的一體式平台。 GitLab 允許您執行原始碼管理、監控、安全性和專案規劃任務。 Update system packages: sudo
Thumbnail
前言 上次我們講到 CI/CD 中的 when 使用,今天我們要來傳授一套必殺技,我們要把過去所學的全部融合再一起,相信各位都準備好了,將 Gitlab 從枷鎖中解放出來吧,讓我們來詠唱「武裝完全支配術」 「System Call. Connect Armament. Search Archiv
Thumbnail
前言 上次我們講到 CI/CD 中的 when 使用,今天我們要來傳授一套必殺技,我們要把過去所學的全部融合再一起,相信各位都準備好了,將 Gitlab 從枷鎖中解放出來吧,讓我們來詠唱「武裝完全支配術」 「System Call. Connect Armament. Search Archiv
Thumbnail
上次我們了解 Pipeline 各自在做什麼是,今天來講解 Gitlab CI/CD 工作相依性,來了解 CI/CD 怎麼依據不同階段,進行工作。 上傳四個工作查看 CI/CD 運作 首先我們先定義我們要做的工作,然後上傳到 GitLab,看結果怎麼樣 run-unit-test: bef
Thumbnail
上次我們了解 Pipeline 各自在做什麼是,今天來講解 Gitlab CI/CD 工作相依性,來了解 CI/CD 怎麼依據不同階段,進行工作。 上傳四個工作查看 CI/CD 運作 首先我們先定義我們要做的工作,然後上傳到 GitLab,看結果怎麼樣 run-unit-test: bef
Thumbnail
前言 今天我們要做一個初體驗,讓各位感受一下,在 GitLab CD/CD 的過程,我們今天使用官方提供的 Gitlab,如果您有自架 Gitlab ,也可以使用自架的 Gitlab 練習,我們這邊為了讓各位學習方便,所以使用官方提供的 Gitlab 作為練習,實際寫一個簡單的 CI/CD 腳本,
Thumbnail
前言 今天我們要做一個初體驗,讓各位感受一下,在 GitLab CD/CD 的過程,我們今天使用官方提供的 Gitlab,如果您有自架 Gitlab ,也可以使用自架的 Gitlab 練習,我們這邊為了讓各位學習方便,所以使用官方提供的 Gitlab 作為練習,實際寫一個簡單的 CI/CD 腳本,
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News