GitLab私有倉庫概述及環境部署

尹正杰發表於2024-11-19

                                              作者:尹正傑

版權宣告:原創作品,謝絕轉載!否則將追究法律責任。

目錄
  • 一.gitlab概述
    • 1.gitlab介紹
    • 2.gitlab架構
    • 3.gitlab推薦配置
  • 二.部署gitlab前準備
    • 1.ubuntu系統環境安裝前準備
      • 1.1 配置Ubuntu主機名
      • 1.2 配置Ubuntu遠端連結
      • 1.3 配置ubuntu倉庫
      • 1.4 修改終端顏色
      • 1.5 重啟虛擬機器
    • 2.RHEL系統環境安裝前準備
      • 2.1 修改centos主機名
      • 2.2 關閉centos防火牆並禁用selinux
      • 2.3 配置epel源
      • 2.4 修改終端顏色
      • 2.5 重啟虛擬機器
  • 三.部署gitlab
    • 1.選擇gitlab的安裝方式
    • 2. 下載gitlab軟體包
      • 2.1 從gitlab官方下載軟體包
      • 2.2 從國內映象倉庫下載軟體包
    • 3 安裝gitlab軟體包
      • 3.1 ubuntu安裝gitlab
      • 3.2 centos安裝gitlab
    • 4.初始化gitlab
      • 4.1 gitlab相關目錄說明
      • 4.2 測試郵箱是否正常
      • 4.3 gitlab初始化配置
    • 5.gitlab服務基礎管理
    • 6.在K8S叢集部署gitlab
    • 7.其他部署方式

一.gitlab概述

1.gitlab介紹

gitlab是一個基於Ruby on Rails構建用於倉庫管理系統的開源專案,使用git作為程式碼管理工具,提供了web介面進行訪問公開或者私有的專案。

gitlab優勢:
	- 開源免費
	- 開源作為git程式碼倉庫
	- 提供了方便易用的web管理介面
	- 支援離線提交
	- 安全性高,開源對不同的使用者設定不同的許可權,並且支援不同使用者只能訪問特定的程式碼,實現程式碼部分可見

2.gitlab架構

如上圖所示,gitlab是一個複雜的系統,由很多應用組成。
	
	
如下圖所示,gitlab服務由多個元件構成:
	- nginx:
		提供靜態web伺服器。
	- gitlab-shell:
		用於處理git命令和修改authorized keys列表。
	- gitlab-workhorse:
		輕量級的反向代理伺服器,它旨在充當智慧反向代理,以幫助整個gitlab加速。
	- postgresql:
		資料庫。
	- redis:
		快取資料庫。
	- sidekiq:
		使用者在後臺執行佇列任務(非同步執行)
	- unicorn:
		gitlab rails應用託管在這個伺服器上面的。


參考連結:
	https://panlw.github.io/15365441001781.html
	https://docs.gitlab.com/ee/development/architecture.html

3.gitlab推薦配置

- gitlab硬體和軟體的環境要求:
	https://docs.gitlab.com/ee/install/requirements.html

- gitlab服務的安裝文件
	https://docs.gitlab.com/ee/install/install_methods.html

- 硬體配置要求:
	CPU:
		- CPU需求取決於使用者數量和預期工作負載,比如:
			4核心支援500使用者
			8核心支援1000使用者
		- 如果有更多的使用者需求,可參考官網:
			https://docs.gitlab.com/ee/administration/reference_architectures/index.html
		
	memory:
		- 根據您的需求配置相應記憶體即可,比如:
			4GB記憶體支援500使用者
			8GB記憶體支援1000使用者
		- 如果有更多的使用者需求,可參考官網:
        	https://docs.gitlab.com/ee/administration/reference_architectures/index.html
        - 建議設定至少2GB的交換記憶體,儘管您有足夠的實體記憶體空間:
        	如果可用記憶體發生變化,交換有助於減少發生錯誤的機會。並將"swappiness"的值設定為10以充分利用實體記憶體。

	Disk:
		根據您的gitlab儲存預期配置相應的儲存大小即可。支援nfs,lvm等技術棧。
		
	DataBase:
		如下圖所示,gitlab 12.1版本開始就移除了對MySQL資料庫的支援,PostGreSQL是目前唯一支援的資料庫喲。
		
	其他更詳細文件可參考:
		https://docs.gitlab.com/ee/install/requirements.html

溫馨提示:
	學習環境中,建議搭大家使用2c4G基本上夠用了。

二.部署gitlab前準備

1.ubuntu系統環境安裝前準備

1.1 配置Ubuntu主機名

# hostnamectl set-hostname ubuntu11.yinzhengjie.com

1.2 配置Ubuntu遠端連結

# grep ^PermitRootLogin /etc/ssh/sshd_config

1.3 配置ubuntu倉庫

# cat /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu focal main restricted
deb http://mirrors.aliyun.com/ubuntu focal-updates main restricted
deb http://mirrors.aliyun.com/ubuntu focal universe
deb http://mirrors.aliyun.com/ubuntu focal-updates universe
deb http://mirrors.aliyun.com/ubuntu focal multiverse
deb http://mirrors.aliyun.com/ubuntu focal-updates multiverse
deb http://mirrors.aliyun.com/ubuntu focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu focal-security main restricted
deb http://mirrors.aliyun.com/ubuntu focal-security universe
deb http://mirrors.aliyun.com/ubuntu focal-security multiverse



參考連結:
	https://developer.aliyun.com/mirror/ubuntu

1.4 修改終端顏色

cat <<EOF >>  ~/.bashrc 
PS1='[\[\e[30;1m\]\u@\[\e[0m\]\[\e[31;1m\]\H\[\e[0m\]\[\e[32;1m\] \W\[\e[0m\]]# '
EOF
source ~/.bashrc 

1.5 重啟虛擬機器

# reboot 

2.RHEL系統環境安裝前準備

2.1 修改centos主機名

# hostnamectl set-hostname centos10.yinzhengjie.com

2.2 關閉centos防火牆並禁用selinux

# systemctl disable firewalld
# sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config

2.3 配置epel源

# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

2.4 修改終端顏色

cat <<EOF >>  ~/.bashrc 
PS1='[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\]\[\e[31;1m\] \W\[\e[0m\]]# '
EOF
source ~/.bashrc 

2.5 重啟虛擬機器

# reboot 

三.部署gitlab

1.選擇gitlab的安裝方式

如上圖所示,gitlab有很多種安裝方式,咱們選擇包安裝方式。

如下圖所示,我們需要手動下載對應的軟體包。

參考連結:
	https://docs.gitlab.com/ee/install/install_methods.html
	https://docs.gitlab.com/omnibus/installation/

2. 下載gitlab軟體包

2.1 從gitlab官方下載軟體包

如上圖所示,我們要去訪問官方的倉庫。


如下圖所示,我們選擇docker-ce版本進行安裝即可。

參考連結:
	https://packages.gitlab.com/gitlab/gitlab-ce

2.2 從國內映象倉庫下載軟體包

如上圖所示,我們也可以在國內網站進行下載喲。

如果從官網下載速度較慢的小夥伴們,可以使用給你的映象地址即可,也可以使用迅雷下載速度會更快喲!

參考連結:
	https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/

3 安裝gitlab軟體包

3.1 ubuntu安裝gitlab

# dpkg -i gitlab-ce_15.6.7-ce.0_amd64.deb 

3.2 centos安裝gitlab

# yum -y localinstall gitlab-ce-15.6.7-ce.0.el7.x86_64.rpm 

4.初始化gitlab

4.1 gitlab相關目錄說明

- /etc/gitlab/
	配置檔案目錄。
	
- /run/gitlab
	執行目錄,存放很多資料庫檔案。該目錄需要執行gitlab服務後會自動生成。
	
- /opt/gitlab/
	gitlab安裝目錄。
	
- /var/opt/gitlab
	數目目錄,原始碼存放在此目錄。初次執行gitlab服務會自動生成初始化資料喲。
	
- /var/log/gitlab/
	日誌目錄。

4.2 測試郵箱是否正常

	(1)安裝mail服務
# yum -y install mailx

	(2)修改配置檔案
# vim /etc/mail.rc 
...
set from=2771787258@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=2771787258@qq.com
set smtp-auth-password=crpdkjfvmoymdggd

	(3)測試郵箱是否能夠正常傳送,測試結構如上圖所示。
# echo JasonYin2020 | mail -s hello y1053419035@qq.com

4.3 gitlab初始化配置

	(1)修改配置檔案
# grep "^[a-Z]" /etc/gitlab/gitlab.rb
...
# 對外暴露服務的uri地址,注意配置hosts檔案解析喲~
external_url 'http://gitlab11.yinzhengjie.com'
# 可選郵箱通知配置~
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "2771787258@qq.com"
gitlab_rails['smtp_password'] = "crpdkjfvmoymdggd"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = "2771787258@qq.com"

# 新增版本中,為gitlab的webUI設定root使用者初始登入密碼~
gitlab_rails['initial_root_password'] = "yinzhengjie"


	(2)將配置檔案生效
# gitlab-ctl reconfigure

	
	(3)新增hosts檔案解析
cat >> /etc/hosts <<EOF
10.0.0.11 gitlab11.yinzhengjie.com
EOF


	(4)檢視gitlab的狀態,如上圖所示
# gitlab-ctl status


	(5)訪問gitlab的WebUI
如下圖所示。



溫馨提示:
	如果沒有在配置檔案中對密碼做初始化設定,可以從"/etc/gitlab/initial_root_password"檔案中找到初始密碼。

5.gitlab服務基礎管理

- gitlab-ctl status
	檢視服務狀態。
	
- gitlab-ctl stop
	停止gitlab服務。
	
- gitlab-ctl start
	啟動服務。

- gitlab-ctl reconfigure
	重新配置應用。
	
- gitlab-ctl -h
	檢視幫助資訊。

6.在K8S叢集部署gitlab

	1.匯入映象到harbor倉庫
[root@master231 ~]# wget http://192.168.13.253/Resources/Kubernetes/images/Project/DevOps/yinzhengjie-gitlab-ce-v17.5.2.tar.gz

[root@master231 ~]# docker load -i yinzhengjie-gitlab-ce-v17.5.2.tar.gz 

	
	2.編寫資源清單
[root@master231 case-demo]# cat 06-devops-gitlab.yaml 
apiVersion: v1
kind: Namespace
metadata:
  name: devops

---

apiVersion: v1
kind: ReplicationController
metadata:
  name: yinzhengjie-gitlab
  namespace: devops
spec:
  replicas: 1
  selector:
    apps: gitlab
  template:
    spec:
      nodeName: worker233
      containers:
      - name: c1
        # image: gitlab/gitlab-ce:17.5.2-ce.0
        image: harbor.yinzhengjie.com/yinzhengjie-devops/gitlab-ce:17.5.2-ce.0
        # 配置宿主機的埠對映
        ports:
          # 定義容器的埠
        - containerPort: 80
          # 繫結到宿主機的埠
          hostPort: 8080
    metadata:
      labels:
        apps: gitlab
[root@master231 case-demo]# 

	
	3.建立資源
[root@master231 case-demo]# kubectl apply -f 06-devops-gitlab.yaml 
namespace/devops created
replicationcontroller/yinzhengjie-gitlab created
[root@master231 case-demo]# 
[root@master231 case-demo]# 
[root@master231 case-demo]# kubectl get pods -o wide -n devops 
NAME                     READY   STATUS    RESTARTS   AGE    IP            NODE        NOMINATED NODE   READINESS GATES
yinzhengjie-gitlab-sw2n6   1/1     Running   0          6m1s   10.100.2.60   worker233   <none>           <none>
[root@master231 case-demo]# 
[root@master231 case-demo]# kubectl -n devops exec -it yinzhengjie-gitlab-sw2n6 -- bash
root@yinzhengjie-gitlab-sw2n6:/# netstat -untal | egrep ":80"
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      
..
root@yinzhengjie-gitlab-sw2n6:/# 

	
	4.檢視預設的root密碼
[root@master231 case-demo]# kubectl -n devops exec yinzhengjie-gitlab-sw2n6 -- cat /etc/gitlab/initial_root_password
# WARNING: This value is valid only in the following conditions
#          1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run).
#          2. Password hasn't been changed manually, either via UI or via command line.
#
#          If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

Password: Pm9uyDtMdoR1FEw4rGcKsjl55VQQ3iOGxrNFuz/Dj9o=

# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.
[root@master231 case-demo]# 


	5.windows修改root密碼
http://10.0.0.233:8080/
	
	
	
推薦閱讀:
	https://docs.gitlab.com/ee/install/docker/installation.html#install-gitlab-by-using-docker-compose
	



預設的密碼存放路徑:
	/etc/gitlab/initial_root_password

7.其他部署方式

如上圖所示,官方提供了多種安裝方式供咱們選擇。

推薦閱讀:
	https://docs.gitlab.com/ee/install/install_methods.html

相關文章