Gitlab部署全流程


0. 序言

開發組的成員漸漸多了起來,需要使用 git 對項目進行版本控制,在公司內網里面部署一個 gitlab 服務

1. 前置任務

在正式開始部署之前需要准備一些硬件和軟件

1.1 硬件

  1. 一台至少 4G 內存的電腦,用來運行 gitlab 服務,下文稱為服務機

  2. 一台 Windows 電腦,用來制作系統鏡像和服務測試,下文稱為客戶機

  3. 一個至少 8G 的 U 盤,用作安裝 linux 的啟動 U 盤

1.2 軟件

  1. Ubuntu Server 鏡像

  2. USBWriter

2. 開始部署

米准備好了,就開始燒火做飯

2.1 啟動U盤

在客戶機上使用 USBWriter 將 Ubuntu Server 系統鏡像燒錄到准備好的 U 盤中

2.2 安裝系統

在服務機上安裝系統之前務必將硬盤中的數據備份,除非你確定不再需要里面的數據。雖然 Ubuntu Server 沒有圖形 UI,但也比安裝 ArchLinux 容易得多。

2.2.1 系統安裝流程

  1. 啟動服務機進入 BIOS 系統調整遇到順序,讓 BIOS 引導 U 盤中的 Ubuntu Server

  2. 進入 Ubuntu Server 后直接按 Enter 選擇 install ubuntu

  3. 進入安裝界面之后依次需要設置語言、鍵盤布局,直接按 Enter 繼續即可
    語言
    鍵盤布局

  4. 接下來需要設置網絡,這里選擇離線安裝,沒有聯網,直接按 Enter 繼續
    網絡

  5. 之后是代理和鏡像,也不用管,直接按 Enter 繼續
    代理
    鏡像
    更新

  6. 下面就是磁盤分區了,筆者選擇自己分區,所以選擇了 Custom
    磁盤分區

  7. 先選擇引導設備,再分區,分成了兩個,分別是掛載在 /home 的用戶分區和掛載在 / 的系統分區
    引導設備
    進行分區
    用戶分區
    系統分區
    分區完成

  8. 分區完成后需要設置系統名稱和要登錄的用戶
    用戶設置

  9. 其它設置,主要是選擇安裝 OpenSSH 服務,其它保持默認即可
    功能令牌
    勾選 SSH

  10. 等待系統安裝完成,重啟即可
    重啟

2.3 配置系統

系統安裝完成后需要為服務機設置固定 IP 便於訪問、設置 SSH 免密登陸便於管理、設置鏡像方便軟件安裝和更新

2.3.1 設置固定 IP

Ubuntu Server 20.04.4 LTS 的 IP 配置文件路徑為 /etc/netplan/xx-installer-config.yaml,編輯該文件,設置需要的 IP 地址並禁用 DHCP,下面是示例

1、終端命令

sudo vim /etc/netplan/xx-installer-config.yaml

2、xx-installer-config.yaml文件內容

network:
  ethernets:
    eth0: # 網卡名
      addresses: [xxx.xxx.xxx.xxx/24] # 需要的靜態 IP 地址
      gateway4: xxx.xxx.xxx.xxx # 網關
      nameservers: # DNS
        addresses: [xxx.xxx.xxx.xxx,yyy.yyy.yyy.yyy] # 多個 DNS 之間使用 , 隔開
      dhcp4: no # 禁用 DHCP
      optional: true # 不知道是干嘛的,不用管
    version: 2
    renderer: networkd # 指定后端采用systemd-networkd或者Network Manager,可不填寫則默認使用systemd-workd

3、使能配置

sudo netplan apply # 使能
ip addr show dev eth0 # 驗證

2.3.2 設置 SSH 免密登陸

為了方便控制服務機系統,這里使用 SSH 在客戶機進行免密登陸

1、修改服務端 SSH 配置,路徑:/etc/ssh/sshd_config

注釋如下選項,禁用 sshd 反查客戶端 dns 信息,提高登錄速度

# GSSAPIAuthentication yes
# GSSAPIDelegateCredentials no

打開如下選項

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

重啟 ssh 服務,使配置生效

sudo systemctl restart ssh

2、修改服務機端 SSH 配置權限

# 要保證.ssh和authorized_keys都只有用戶自己有寫權限
sudo chmod 600 ~/.ssh/authorized_keys
sudo chmod 700 ~/.ssh
sudo chmod g-w /home/user

3、修改服務器端防火牆策略,以 ufw 為例

sudo ufw allow ssh
sudo ufw enable
sudo ufw status

4、客戶機生成密鑰,命令:ssh-keygen -t rsa

C:\Users\sparrow>ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\sparrow/.ssh/id_rsa): gitlab
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in gitlab.
Your public key has been saved in gitlab.pub.
The key fingerprint is:
SHA256:dEPHRhPU6bAQemh8WIs1z4qML9xMh30Zk2RmgiHNyBc sparrow@DESKTOP-OP64Q1L
The key's randomart image is:

5、將客戶機公鑰復制到服務機,命令:ssh-copy-id -i xxx.pub user@xxx.xxx.xxx.xxx

C:\Users\sparrow\.ssh>ssh-copy-id -i gitlab.pub sparrow@192.168.10.247

6、編輯客戶機配置,路徑:~/.ssh/config

Host [Nickname] # 配置名稱
	HostName [ip addr|host name] # 服務機 IP 或者 主機名
	User [username] # 登陸服務機的用戶名
	IdentityFile /home/user/.ssh/private # 私鑰路徑

在客戶機使用 ssh [NickName] 即可登陸服務機,比如這里就是:ssh gitlab

2.3.3 設置鏡像

1、設置鏡像
在安裝系統時跳過了這一步,現在補上,參考清華大學 Ubuntu 鏡像使用幫助,鏡像配置文件路徑:/etc/apt/sources.list,選擇版本,這里是20.04 LTS,文件內容如下

# 默認注釋了源碼鏡像以提高 apt update 速度,如有需要可自行取消注釋
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# 預發布軟件源,不建議啟用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse

2、使能鏡像

sudo apt update

2.4 安裝 gitlab

2.4.1 下載並使能安裝腳本

# 這里選擇的是社區版,對我們來說已經夠用了
curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
sudo bash script.deb.sh

2.4.2 修改鏡像源

鏡像路徑:/etc/apt/sources.list.d/gitlab_gitlab-ce.list

# 原鏡像
deb https://packages.gitlab.com/gitlab/gitlab-ce/ubuntu/ focal main
deb-src https://packages.gitlab.com/gitlab/gitlab-ce/ubuntu/ focal main
# 新鏡像
deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu focal main
deb-src https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu focal main

2.4.3 安裝 gitlab

安裝命令

sudo apt update
sudo apt install gitlab-ce

安裝完成


       *.                  *.
      ***                 ***
     *****               *****
    .******             *******
    ********            ********
   ,,,,,,,,,***********,,,,,,,,,
  ,,,,,,,,,,,*********,,,,,,,,,,,
  .,,,,,,,,,,,*******,,,,,,,,,,,,
      ,,,,,,,,,*****,,,,,,,,,.
         ,,,,,,,****,,,,,,
            .,,,***,,,,
                ,*,.



     _______ __  __          __
    / ____(_) /_/ /   ____ _/ /_
   / / __/ / __/ /   / __ `/ __ \
  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/\__/_____/\__,_/_.___/


Thank you for installing GitLab!
GitLab was unable to detect a valid hostname for your instance.
Please configure a URL for your GitLab instance by setting `external_url`
configuration in /etc/gitlab/gitlab.rb file.
Then, you can start your GitLab instance by running the following command:
  sudo gitlab-ctl reconfigure

For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md

Help us improve the installation experience, let us know how we did with a 1 minute survey:
https://gitlab.fra1.qualtrics.com/jfe/form/SV_6kVqZANThUQ1bZb?installation=omnibus&release=14-9

2.5 配置 gitlab

根據安裝完成時的提示對 gitlab 進行配置,配置文件路徑:/etc/gitlab/gitlab.rb,下文未顯式注明的配置都是在 gitlab.rb 中

2.5.1 external_url

##! Note: During installation/upgrades, the value of the environment variable
##! EXTERNAL_URL will be used to populate/replace this value.
##! On AWS EC2 instances, we also attempt to fetch the public hostname/IP
##! address from AWS. For more details, see:
##! https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
# 這里就直接使用服務機的 IP 了
# 因為直接用的內網 IP,無法申請證書,也就無法使用 https 協議
external_url 'https://192.168.10.247'
# 如果下面需要修改端口號,如改成 90 則是
external_url 'https://192.168.10.247:90'

2.5.2 端口設置

gitlab 運行時會使用 80 和 8080 兩個端口,如果系統中沒有其它服務使用這兩個端口,gitlab就能正常啟動,否則就會出現端口沖突,gitlab 無法啟動。解決端口沖突方案之一就是修改 gitlab 使用的端口

# 8080 端口
puma['port'] = 9090 # 14.0 及以后的版本
unicorn['port'] = 9090 # 14.0 以前的版本
# 80 端口
nginx['listen_port'] = 90

8080 端口修改
14.0 及以后的版本 puma:/var/opt/gitlab/gitlab-rails/etc/puma.rb

bind 'tcp://127.0.0.1:9090' # 將 8080 改為 9090

14.0 以前的版本 unicorn:/var/opt/gitlab/gitlab-rails/etc/unicorn.rb

listen “127.0.0.1:9090”, :tcp_nopush => true # 將 8080 改為 9090

80 端口修改
nginx:/var/opt/gitlab/nginx/conf/gitlab-http.conf

server { ## HTTPS server
  listen *:90; # 將 80 改為 90

2.5.3 郵箱配置

# gitlab 郵箱設置
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'xxxxxxxxx@163.com'
gitlab_rails['gitlab_email_display_name'] = 'xxxxxxxxxxx'
# smtp 設置
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "xxxxxxxxxx@163.com"
gitlab_rails['smtp_password'] = "xxxxxxxxxxxxxxxxxx" # 授權碼
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
# git 用戶配置
user['git_user_name'] = "xxxxxxxxxx"
user['git_user_email'] = "xxxxxxxxxx@163.com"

可以在使能配置之后,使用如下命令測試郵箱配置是否成功

# 如果配置正確,相應的郵箱會收到一封郵件
sudo gitlab-rails console
irb(main):001:0> Notify.test_email('xxxxxxx@163.com', 'gitlab郵件測試', 'gitlab測試郵件正文').deliver_now

2.5.4 修改數據存儲位置

數據默認存儲在 /var/opt/gitlab/git-data/repositories,但為了數據安全和方便備份,可能需要把數據存儲在另一塊硬盤上,這里就是存儲到掛載在 /home 上的硬盤里

### For setting up different data storing directory
###! Docs: https://docs.gitlab.com/omnibus/settings/configuration.html#store-git-data-in-an-alternative-directory
###! **If you want to use a single non-default directory to store git data use a
###!   path that doesn't contain symlinks.**
git_data_dirs({
	"default" => {
		"path" => "/home/sparrow/data/gitlab"
	}
})

如果是已經用過一段時間,需要進行數據遷移

sudo gitlab-ctl stop
sudo rsync -av /var/opt/gitlab/git-data/repositories /home/sparrow/data/gitlab/
sudo gitlab-ctl reconfigure
sudo gitlab-ctl start

2.5.5 使能配置

重新配置命令的執行時間較長,所以先完成所有的配置,再使其生效

# 保存配置文件后,在終端中執行
sudo gitlab-ctl reconfigure

2.5.6 設置管理員用戶密碼

# 在終端中執行
sudo gitlab-rails console
...
irb(main):001:0> u=User.where(id:1).first # User.all 可以查看所有用戶
=> #<User id:1 @root>
irb(main):002:0> u.password='xxxx1111111'
=> "xxxx1111111"
irb(main):002:0> u.password_confirmation='xxxx1111111'
=> "xxxx1111111"
irb(main):003:0> u.save!
=> true
irb(main):014:0> exit

2.5.7 設置防火牆

# 允許 http 服務
sudo ufw allow http
# 如果前面修改過端口,則應該是
sudo ufw allow 90
# 查看
sudo ufw status

2.5.8 啟動並設為開機自啟

sudo systemctl enable gitlab-runsvdir.service # 開機自啟
sudo systemctl start gitlab-runsvdir.service  # 啟動
sudo systemctl status gitlab-runsvdir.service  # 查看啟動情況

如果 gitlab 服務正常啟動,就可以在客戶機上訪問 gitlab 服務了


免責聲明!

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



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