GitLab是一個基于Git的代碼托管和協(xié)作平臺,提供了從代碼管理到持續(xù)集成/持續(xù)部署(CI/CD)的全方位 DevOps功能。本文為您介紹如何在Linux系統(tǒng)的ECS實例上部署GitLab,搭建屬于您自己的代碼托管平臺。
準備工作
請確保您已創(chuàng)建一臺ECS實例,并且ECS實例必須滿足以下條件:
操作系統(tǒng):Linux系統(tǒng)。具體支持的系統(tǒng)說明,請參見Supported OSes。
實例已分配公網IP地址或綁定彈性公網IP(EIP)。具體操作,請參見綁定EIP。
已在安全組內添加入方向規(guī)則放行80、443、22端口。具體操作,請參見添加安全組規(guī)則。端口說明,請參見常用端口。
實例規(guī)格:安裝GitLab所需的實例規(guī)格與項目規(guī)模和團隊規(guī)模有關,建議最小規(guī)格為4 vCPU、8 GiB。更多信息,請參見Installation system requirements和Running GitLab in a memory-constrained environment。
重要低于4 vCPU、8 GiB會因規(guī)格過小,導致長時間處于Installing狀態(tài)或安裝失敗。請升級規(guī)格以后再安裝,升級規(guī)格操作,請參見升降配方式概述。
安裝GitLab
GitLab版本包括企業(yè)版(EE)、社區(qū)版(CE)和極狐版(JH)。極狐GitLab(極狐版JH)是在中國大陸和港澳地區(qū)發(fā)行的企業(yè)級GitLab版本,極狐GitLab的服務器都在中國或中國內地,網絡訪問速度更快。極狐版和社區(qū)版的對比和說明請參見is-it-any-good和why-jh。
方式一:使用安裝包
社區(qū)版本和極狐版本在安裝命令和支持的操作系統(tǒng)上存在差異。
Alibaba Cloud Linux 3使用安裝包方式安裝時,僅支持安裝極狐GitLab。如果需要在Alibaba Cloud Linux 3安裝GitLab社區(qū)版,請使用Docker鏡像方式。
CentOS 7.x
遠程連接需要安裝GitLab的ECS實例。
具體操作,請參見使用Workbench工具以SSH協(xié)議登錄Linux實例。
添加GitLab包倉庫。
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
安裝GitLab所需的依賴包。
sudo yum install -y curl python3-policycoreutils openssh-server
安裝GitLab社區(qū)版。
Ubuntu
遠程連接需要安裝GitLab的ECS實例。
具體操作,請參見使用Workbench工具以SSH協(xié)議登錄Linux實例。
安裝GitLab所需的依賴包。
sudo apt-get update sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
添加GitLab軟件包倉庫。
sudo curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
說明
由于網絡原因,可能會出現(xiàn)無法添加GitLab軟件源鏡像的問題,建議您多嘗試幾次。
當出現(xiàn)類似如下回顯信息,表示GitLab軟件包倉庫已安裝。
刷新軟件包列表。
sudo apt-get update
安裝GitLab。
極狐GitLab支持的操作系統(tǒng)參見supported_os。
Alibaba Cloud Linux 3/CentOS 7.x
遠程連接需要安裝GitLab的ECS實例。
具體操作,請參見使用Workbench工具以SSH協(xié)議登錄Linux實例。
安裝GitLab所需的依賴包。
sudo yum install -y curl python3-policycoreutils openssh-server
添加GitLab軟件包倉庫。
curl -fsSL https://get.gitlab.cn | sudo /bin/bash
說明由于網絡原因,可能會出現(xiàn)無法添加GitLab軟件源鏡像的問題,建議您多嘗試幾次。
當出現(xiàn)類似如下回顯信息,表示GitLab軟件包倉庫已安裝。
安裝GitLab。
sudo EXTERNAL_URL=<GitLab服務器的公網IP地址> yum install -y gitlab-jh
<GitLab服務器的公網IP地址>
請?zhí)鎿Q成安裝GitLab的實例公網IP地址。重要低于4 vCPU、8 GiB會因規(guī)格過小,導致長時間處于Installing狀態(tài)或安裝失敗。請升級規(guī)格以后再安裝,升級規(guī)格操作,請參見升降配方式概述。
當出現(xiàn)類似如下回顯信息,表示GitLab已經安裝成功。
Ubuntu
遠程連接需要安裝GitLab的ECS實例。
具體操作,請參見使用Workbench工具以SSH協(xié)議登錄Linux實例。
安裝GitLab所需的依賴包。
sudo apt-get update sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
配置安裝極狐GitLab的軟件源鏡像。
curl -L get.gitlab.cn | bash
安裝GitLab。
sudo EXTERNAL_URL=<GitLab服務器的公網IP地址> apt-get install -y gitlab-jh
<GitLab服務器的公網IP地址>
請?zhí)鎿Q成安裝GitLab的實例公網IP地址,示例命令如下:sudo EXTERNAL_URL=101.132.XX.XX apt-get install -y gitlab-jh
重要低于4 vCPU、8 GiB會因規(guī)格過小,導致長時間處于Installing狀態(tài)或安裝失敗。請升級規(guī)格以后再安裝,升級規(guī)格操作,請參見升降配方式概述。
當出現(xiàn)類似如下回顯信息,表示GitLab已經安裝成功。
方式二:使用Docker鏡像
遠程連接需要安裝GitLab的ECS實例。
具體操作,請參見使用Workbench工具以SSH協(xié)議登錄Linux實例。
安裝Docker。具體操作,請參見安裝Docker。
創(chuàng)建Docker容器的掛載數據目錄,該目錄會作為GitLab配置、日志和數據文件所在的目錄。
sudo mkdir -p /srv/gitlab
設置環(huán)境變量
$GITLAB_HOME
。export GITLAB_HOME=/srv/gitlab
執(zhí)行如下命令,安裝GitLab容器鏡像。
重要由于運營商網絡原因,會導致您拉取Docker Hub鏡像變慢,甚至下載失敗。您可以使用阿里云容器鏡像服務ACR提供的官方鏡像加速器,加速官方鏡像的下載。具體操作,請參見官方鏡像加速。
GitLab社區(qū)版
sudo docker run --detach \ --hostname gitlab.example.com \ --publish 443:443 --publish 80:80 --publish 2222:22 \ --name gitlab \ --restart always \ --volume $GITLAB_HOME/config:/etc/gitlab \ --volume $GITLAB_HOME/logs:/var/log/gitlab \ --volume $GITLAB_HOME/data:/var/opt/gitlab \ --shm-size 256m \ gitlab/gitlab-ce:latest
容器參數
主機參數說明
hostname
指定的主機名,建議修改為當前ECS實例的公網IP地址。
publish 443:443
將主機的443端口映射到容器的443端口,使用HTTPS訪問需要的端口。如果出現(xiàn)端口被主機端口已經被占用的報錯時,請?zhí)鎿Q為非標準端口,如
publish 8443:443
。說明如替換成非標端口,需要在安全組中添加開放對應端口的入方向規(guī)則例如8443,請參見添加安全組規(guī)則。
publish 80:80
將主機的80端口映射到容器的80端口,使用HTTP訪問需要的端口。如果出現(xiàn)端口被主機端口已經被占用的報錯時,請?zhí)鎿Q為非標準端口,例如
publish 8080:80
。說明如替換成非標端口,需要在安全組中添加開放對應端口的入方向規(guī)則例如8080,請參見添加安全組規(guī)則。
publish 2222:22
將主機的2222端口映射到容器的22端口,使用Git操作進行代碼克隆、推送和拉取操作,需要使用SSH服務。
說明ECS實例默認啟動SSH服務,會占用22端口。
替換成非標端口例如2222后,需要先在安全組中添加開放對應端口的入方向規(guī)則,然后修改gitlab.rb文件中的SSH端口號。
ECS實例的路徑和容器路徑的對應關系如下:
ECS路徑
容器路徑
說明
$GITLAB_HOME/data
/var/opt/gitlab
存儲應用程序數據。
$GITLAB_HOME/logs
/var/log/gitlab
存儲GitLab配置文件。
$GITLAB_HOME/config
/etc/gitlab
存儲GitLab配置文件。
極狐GitLab
sudo docker run --detach \ --hostname gitlab.example.com \ --publish 443:443 --publish 80:80 --publish 2222:22 \ --name gitlab \ --restart always \ --volume $GITLAB_HOME/config:/etc/gitlab \ --volume $GITLAB_HOME/logs:/var/log/gitlab \ --volume $GITLAB_HOME/data:/var/opt/gitlab \ --shm-size 256m \ registry.gitlab.cn/omnibus/gitlab-jh:latest
容器參數
主機參數說明
hostname
指定的主機名,建議修改為當前ECS實例的公網IP地址。
publish 443:443
將主機的443端口映射到容器的443端口,使用HTTPS訪問需要的端口。如果出現(xiàn)端口被主機端口已經被占用的報錯時,請?zhí)鎿Q為非標準端口,如
publish 8443:443
。說明如替換成非標端口,需要在安全組中添加開放對應端口的入方向規(guī)則例如8443,請參見添加安全組規(guī)則。
publish 80:80
將主機的80端口映射到容器的80端口,使用HTTP訪問需要的端口。如果出現(xiàn)端口被主機端口已經被占用的報錯時,請?zhí)鎿Q為非標準端口,例如
publish 8080:80
。說明如替換成非標端口,需要在安全組中添加開放對應端口的入方向規(guī)則例如8080,請參見添加安全組規(guī)則。
publish 2222:22
將主機的2222端口映射到容器的22端口,使用Git操作進行代碼克隆、推送和拉取操作,需要使用SSH服務。
說明ECS實例默認啟動SSH服務,會占用22端口。
替換成非標端口例如2222后,需要先在安全組中添加開放對應端口的入方向規(guī)則,然后修改gitlab.rb文件中的SSH端口號。
ECS實例的路徑和容器路徑的對應關系如下:
ECS路徑
容器路徑
說明
$GITLAB_HOME/data
/var/opt/gitlab
存儲應用程序數據。
$GITLAB_HOME/logs
/var/log/gitlab
存儲GitLab配置文件。
$GITLAB_HOME/config
/etc/gitlab
存儲GitLab配置文件。
查看容器狀態(tài)。
sudo docker ps -a
當容器狀態(tài)為healthy時,說明GitLab容器已經正常啟動。
方式三:使用ECS擴展程序
ECS擴展程序是用于增強和擴展ECS實例功能的插件。Alibaba Cloud Linux 3系統(tǒng)會安裝極狐GitLab,其他系統(tǒng)會安裝GitLab社區(qū)版。
擴展程序的安裝步驟請參見OOS擴展程序,支持的系統(tǒng)版本請參見控制臺界面。Alibaba Cloud Linux 3系統(tǒng)會安裝極狐GitLab,其他系統(tǒng)會安裝GitLab社區(qū)版。
進入GitLab管理頁面
在瀏覽器輸入網址。訪問網址:
http://${ECS的公網IP}
。重要如果使用Docker鏡像方式安裝,并將HTTP的默認端口80映射成非標準端口,請在訪問鏈接后添加該端口號。
首次登錄使用用戶名
root
,通過如下方式獲取密碼。獲取GitLab的登錄密碼。在ECS實例執(zhí)行以下命令:
Linux安裝包方式:
sudo cat /etc/gitlab/initial_root_password
Docker安裝方式:
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
回顯信息類似如下所示,您可以在
Password
后獲取GitLab的初始登錄密碼。重要出于安全原因,24小時后該文件會被自動刪除。建議您安裝成功首次登錄之后,修改GitLab的初始密碼,操作步驟參見reset_user_password。
進入Admin頁面。
在Users>Pending approval頁面審批新用戶的申請。其他操作例如管理項目、管理用戶等,請參見admin_area。
本示例介紹將文件上傳到GitLab倉庫的步驟。如果您想了解更多的GitLab操作,例如GitLab常用命令、數據備份、配置選項、用戶管理、與其他服務集成、故障排除等,請參見極狐GitLab和GitLab社區(qū)版。
注冊用戶并設置免密訪問
訪問GitLab頁面。單擊Sign in按鈕下的Register now,創(chuàng)建一個新用戶。等待GitLab管理員通過申請后,使用新創(chuàng)建的用戶登錄GitLab。
在本地生成密鑰對文件。
ssh-keygen
生成密鑰對的過程中,系統(tǒng)會提示輸入密鑰對存放目錄(默認為當前用戶目錄下的
.ssh/id_rsa
,例如/home/test/.ssh/id_rsa
)和密鑰對密碼,您可以手動輸入,也可以按Enter保持默認。回顯信息類似如下所示。
查看并復制公鑰文件
id_rsa.pub
中的內容,便于后續(xù)步驟使用。cat ~/.ssh/id_rsa.pub
回顯信息類似如下所示。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQVwWjF3KXmI549jDI0fuCgl+syJjjn55iMUDRRiCd/B+9TwUda3l9WXH5i7RU53QGRCsDVFZxixLOlmXr9E3VSqkf8xXBnHs/5E2z5PIOCN0nxfB9xeA1db/QxPwK4gkHisep+eNHRn9x+DpCYDoSoYQN0nBg+H3uqfOqL42mJ+tqSfkyqbhjBf1kjtDTlBfVCWtI0siu7owm+c65+8KNyPlj5/0AyJ4Aqk1OX2jv+YE4nTipucn7rHwWuowasPU86l+uBsLNwOSb+H7loJvQyhEINX2FS1KnpRU+ld20t07n+N3ErfX5xBAGfxXpoN9BKKSP+RT7rvTeXTVE**** test@iZuf63zs0dn0qccsisy****
添加SSH key。將獲取的公鑰添加了GitLab賬戶中,以便進行免密碼的身份驗證。
單擊頁面右上角的頭像,然后單擊Edit profile。
在左側導航欄,單擊SSH Keys。將公鑰文件
id_rsa.pub
中的內容粘貼到Key
所在的文本框中,然后單擊Add key。SSH Key添加完成后,如下圖所示。
創(chuàng)建項目并托管代碼
創(chuàng)建新項目
在GitLab的主頁中,單擊頁面右側的New Project按鈕,然后單擊Create blank project。
單擊Create blank project,設置Project name和Project URL,然后單擊頁面底部的Create project。本文以mywork項目為例進行說明。
回到項目頁面,復制SSH克隆地址,該地址在進行克隆操作時需要使用。
克隆遠程倉庫
sudo yum install git
在本地配置使用Git倉庫的人員信息。
配置使用Git倉庫的用戶名。
git config --global user.name "testname"
配置使用Git倉庫的人員郵箱。
git config --global user.email "abc@example.com"
克隆已創(chuàng)建的項目到本地。
輸入
git clone
并粘貼SSH克隆地址,Git會自動創(chuàng)建一個以倉庫名稱命名的文件夾并下載文件。git clone ${SSH URL}
如果使用Docker鏡像安裝,需要在鏈接中添加
ssh://
和docker run命令中的映射端口,例如:重要如果不想修改SSH鏈接,需要修改
gitlab_rails['gitlab_shell_ssh_port']
參數,以便在GitLab頁面中正確顯示,請參見使用Docker方式啟動時,提示22端口被占用。git clone ssh://git@{IP域名}:{SSH端口}/root/mywork
進入到項目目錄。
cd mywork/
查看當前分支的名稱,默認為主分支
main
。git branch
新建分支并進行更改
在本地創(chuàng)建新的分支,便于更改文件。
新建一個分支
example
。git checkout -b example
新建需要上傳到GitLab中的目標文件
test.txt
,并寫入內容Hello world!
。echo "Hello world!" > test.txt
提交并推送更改
將新分支example
推送到遠程倉庫進行保存。
將
test.txt
文件添加到暫存區(qū)。git add test.txt
確認變更的文件。
git status
獲得以下輸出:
On branch example Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: test.txt
提交暫存文件
test.txt
。git commit -m "測試用"
example
分支目前只在本地可用。將分支推送到GitLab倉庫,便于其他人訪問。git push origin example
推送到GitLab倉庫后,其他用戶也可以查看新建的分支。
合并更改
將本地example
分支的更改合并到主分支 main
,然后將合并后的主分支 main
推送到遠程倉庫。
切換到主分支
main
。git checkout main
將新建分支
example
合并到主分支main
。git merge example
將合并后的主分支推送到GitLab倉庫。
git push
變更已同步到GitLab倉庫的主分支
main
中。
后續(xù)步驟
配置郵件通知
GitLab需要一個郵件傳輸代理來發(fā)送電子郵件通知,例如項目更新、密碼重置等。SMTP服務通常使用服務器的25端口發(fā)送郵件,但基于安全考慮,ECS實例25端口默認受限,建議您使用SSL加密端口(通常是465端口)來對外發(fā)送郵件,常用端口的說明請參見常用端口。配置SMTP的步驟:
驗證SMTP配置效果。
執(zhí)行
gitlab-rails console
命令進入Rails控制臺。輸入以下命令,發(fā)送測試電子郵件:
Notify.test_email('destination_email@address.com', 'Message Subject', 'Message Body').deliver_now
在目標郵箱中查看測試郵件,或者在ECS實例中執(zhí)行
sudo tail -f /var/log/mail.log
查看郵件的日志。
備份GitLab倉庫的數據
在ECS上安裝GitLab后,GitLab倉庫的數據通常會存儲在服務器的
/var/opt/gitlab/git-data
路徑中,倉庫存儲在名為repositories
的子文件夾中。備份方式:
如果您只想保存?zhèn)}庫數據,可以為當前ECS實例的云盤創(chuàng)建快照,操作步驟參見創(chuàng)建快照和通過ECS快照備份恢復數據。
如果您想備份倉庫數據、GitLab配置、已安裝的其他軟件等全量數據,可以為ECS實例創(chuàng)建鏡像,操作步驟參見使用實例創(chuàng)建自定義鏡像和通過ECS鏡像備份恢復數據。
如果您需要使用多臺ECS來部署GitLab服務器:
創(chuàng)建NAS文件系統(tǒng):用于存儲GitLab的數據。
多臺ECS實例批量掛載同一NAS文件系統(tǒng):將NAS系統(tǒng)同時掛載到所有ECS實例,以便這些實例可以共享GitLab的數據。
配置GitLab數據路徑:將Git倉庫的數據存儲路徑配置到已經掛載的NAS路徑,具體的操作步驟參見將 Git 數據存儲在備用目錄中。
解析GitLab網站域名
通過實例公網IP地址直接訪問您的GitLab網站會降低服務端的安全性。如果您已有域名或者想為GitLab網站注冊一個域名,可以參考以下步驟。
注冊域名。
具體操作,參見通用域名注冊基本流程如何注冊阿里云域名。
備案域名。
如果您的域名指向的網站托管在阿里云中國內地節(jié)點服務器,您需要進行備案。首次備案,請參見ICP備案流程,其他情況請參見ICP備案流程。
解析域名。設置域名解析后,外部用戶可通過域名訪問GitLab網站。
域名解析是使用域名訪問您的網站的必備環(huán)節(jié)。具體操作,請參見新手引導。
開啟HTTPS加密訪問。使用免費服務例如使用Let’s Encrypt免費的自動HTTPS,或者付費服務SSL證書快速上手。
添加安全組規(guī)則:在ECS的安全組內,添加一條入方向規(guī)則,為了安全起見,建議只對授權的IP地址開放端口。
安裝包或擴展程序方式:443(HTTPS)端口。
Docker Engine方式:對應于docker run命令中設置的主機HTTPS端口。
修改gitlab.rb中的external_url參數,配置完成后如下圖所示。
安裝包方式:配置 GitLab 的外部 URL。
Docker鏡像方式:編輯配置文件。
常見問題
服務器卡頓、無法遠程連接
低于4 vCPU、8 GiB會因規(guī)格過小,導致長時間處于Installing狀態(tài)或安裝失敗。請升級規(guī)格以后再安裝,升級規(guī)格操作,請參見升降配方式概述。
如果無法遠程連接服務器,可以使用VNC登錄實例,然后進行配置SWAP、優(yōu)化Sidekiq等操作,具體步驟參見memory_constrained_envs。
監(jiān)控ECS實例的vCPU使用率、網絡流量和磁盤I/O的操作步驟,請參見查看實例監(jiān)控信息。
使用Docker方式啟動時,提示22端口被占用
ECS實例默認啟動SSH服務,會占用22(SSH)端口。使用Docker鏡像方式安裝時,需要將主機的22端口映射成其他端口,并修改gitlab_rails['gitlab_shell_ssh_port']
參數:
在啟動Docker時指定非標端口,例如
publish 2222:22
。編輯GitLab配置文件。
執(zhí)行
sudo docker exec -it gitlab /bin/bash
,進入會話。編輯文件
/etc/gitlab/gitlab.rb
。設置
gitlab_rails['gitlab_shell_ssh_port'] = 2222
。執(zhí)行
gitlab-ctl reconfigure
,重新配置GitLab。
打開項目頁面,驗證配置效果。