0. 序言
開發組的成員漸漸多了起來,需要使用 git 對項目進行版本控制,在公司內網里面部署一個 gitlab 服務
1. 前置任務
在正式開始部署之前需要准備一些硬件和軟件
1.1 硬件
-
一台至少 4G 內存的電腦,用來運行 gitlab 服務,下文稱為服務機
-
一台 Windows 電腦,用來制作系統鏡像和服務測試,下文稱為客戶機
-
一個至少 8G 的 U 盤,用作安裝 linux 的啟動 U 盤
1.2 軟件
2. 開始部署
米准備好了,就開始燒火做飯
2.1 啟動U盤
在客戶機上使用 USBWriter 將 Ubuntu Server 系統鏡像燒錄到准備好的 U 盤中
2.2 安裝系統
在服務機上安裝系統之前務必將硬盤中的數據備份,除非你確定不再需要里面的數據。雖然 Ubuntu Server 沒有圖形 UI,但也比安裝 ArchLinux 容易得多。
2.2.1 系統安裝流程
-
啟動服務機進入 BIOS 系統調整遇到順序,讓 BIOS 引導 U 盤中的 Ubuntu Server
-
進入 Ubuntu Server 后直接按
Enter
選擇install ubuntu
-
進入安裝界面之后依次需要設置語言、鍵盤布局,直接按
Enter
繼續即可
-
接下來需要設置網絡,這里選擇離線安裝,沒有聯網,直接按
Enter
繼續
-
之后是代理和鏡像,也不用管,直接按
Enter
繼續
-
下面就是磁盤分區了,筆者選擇自己分區,所以選擇了 Custom
-
先選擇引導設備,再分區,分成了兩個,分別是掛載在
/home
的用戶分區和掛載在/
的系統分區
-
分區完成后需要設置系統名稱和要登錄的用戶
-
其它設置,主要是選擇安裝 OpenSSH 服務,其它保持默認即可
-
等待系統安裝完成,重啟即可
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 服務了