GitLab是一個基於Git的代碼託管和協作平台,提供了從代碼管理到持續整合/持續部署(CI/CD)的全方位 DevOps功能。本文為您介紹如何在Linux系統的ECS執行個體上部署GitLab,搭建屬於您自己的代碼託管平台。
準備工作
請確保您已建立一台ECS執行個體,並且ECS執行個體必須滿足以下條件:
安裝GitLab
GitLab版本包括企業版(EE)、社區版(CE)和極狐版(JH)。極狐GitLab(極狐版JH)是在中國大陸和港澳地區發行的企業級GitLab版本,極狐GitLab的伺服器都在國內,網路訪問速度更快。極狐版和社區版的對比和說明請參見is-it-any-good和why-jh。
方式一:使用安裝包
社區版本和極狐版本在安裝命令和支援的作業系統上存在差異。
GitLab社區版
CentOS 7.x
遠端連線需要安裝GitLab的ECS執行個體。
具體操作,請參見使用Workbench工具以SSH協議登入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社區版。
sudo EXTERNAL_URL=<GitLab伺服器的公網IP地址> sudo yum install -y gitlab-ce
<GitLab伺服器的公網IP地址>
請替換成安裝GitLab的ECS執行個體公網IP地址。
重要 低於4 vCPU、8 GiB會因規格過小,導致長時間處於Installing狀態或安裝失敗。請升級規格以後再安裝,升級規格操作,請參見升降配方式概述。
當出現類似如下回顯資訊,表示GitLab已經安裝成功。
Ubuntu
遠端連線需要安裝GitLab的ECS執行個體。
具體操作,請參見使用Workbench工具以SSH協議登入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
說明
由於網路原因,可能會出現無法添加GitLab軟體源鏡像的問題,建議您多嘗試幾次。
當出現類似如下回顯資訊,表示GitLab軟體包倉庫已安裝。
重新整理軟體包列表。
sudo apt-get update
安裝GitLab。
sudo EXTERNAL_URL=<GitLab伺服器的公網IP地址> apt-get install -y gitlab-ce
<GitLab伺服器的公網IP地址>
請替換成安裝GitLab的ECS執行個體更換公網IP地址。
重要
低於4 vCPU、8 GiB會因規格過小,導致長時間處於Installing狀態或安裝失敗。請升級規格以後再安裝,升級規格操作,請參見升降配方式概述。
當出現類似如下回顯資訊,表示GitLab已經安裝成功。
極狐GitLab
Alibaba Cloud Linux 3/CentOS 7.x
遠端連線需要安裝GitLab的ECS執行個體。
具體操作,請參見使用Workbench工具以SSH協議登入Linux執行個體。
安裝GitLab所需的依賴包。
sudo yum install -y curl python3-policycoreutils openssh-server
添加GitLab軟體包倉庫。
curl -fsSL https://get.gitlab.cn | sudo /bin/bash
說明 由於網路原因,可能會出現無法添加GitLab軟體源鏡像的問題,建議您多嘗試幾次。
當出現類似如下回顯資訊,表示GitLab軟體包倉庫已安裝。
安裝GitLab。
sudo EXTERNAL_URL=<GitLab伺服器的公網IP地址> yum install -y gitlab-jh
<GitLab伺服器的公網IP地址>
請替換成安裝GitLab的執行個體公網IP地址。
重要 低於4 vCPU、8 GiB會因規格過小,導致長時間處於Installing狀態或安裝失敗。請升級規格以後再安裝,升級規格操作,請參見升降配方式概述。
當出現類似如下回顯資訊,表示GitLab已經安裝成功。
Ubuntu
遠端連線需要安裝GitLab的ECS執行個體。
具體操作,請參見使用Workbench工具以SSH協議登入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地址>
請替換成安裝GitLab的執行個體公網IP地址,樣本命令如下:
sudo EXTERNAL_URL=101.132.XX.XX apt-get install -y gitlab-jh
重要 低於4 vCPU、8 GiB會因規格過小,導致長時間處於Installing狀態或安裝失敗。請升級規格以後再安裝,升級規格操作,請參見升降配方式概述。
當出現類似如下回顯資訊,表示GitLab已經安裝成功。
方式二:使用Docker鏡像
使用Docker鏡像方式安裝
遠端連線需要安裝GitLab的ECS執行個體。
具體操作,請參見使用Workbench工具以SSH協議登入Linux執行個體。
安裝Docker。具體操作,請參見安裝Docker。
建立Docker容器的掛載資料目錄,該目錄會作為GitLab配置、日誌和資料檔案所在的目錄。
sudo mkdir -p /srv/gitlab
設定環境變數$GITLAB_HOME
。
export GITLAB_HOME=/srv/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 \
gitlab/gitlab-ce:latest
容器參數 | 主機參數說明 |
hostname | 指定的主機名稱,建議修改為當前ECS執行個體的公網IP地址。 |
publish 443:443 | 將主機的443連接埠映射到容器的443連接埠,使用HTTPS訪問需要的連接埠。如果出現連接埠被主機連接埠已經被佔用的報錯時,請替換為非標準連接埠,如publish 8443:443 。
說明 如替換成非標連接埠,需要在安全性群組中添加開放對應連接埠的入方向規則例如8443,請參見添加安全性群組規則。 |
publish 80:80 | 將主機的80連接埠映射到容器的80連接埠,使用HTTP訪問需要的連接埠。如果出現連接埠被主機連接埠已經被佔用的報錯時,請替換為非標準連接埠,例如publish 8080:80 。
說明 如替換成非標連接埠,需要在安全性群組中添加開放對應連接埠的入方向規則例如8080,請參見添加安全性群組規則。 |
publish 2222:22 | 將主機的2222連接埠映射到容器的22連接埠,使用Git操作進行程式碼複製品、推送和拉取操作,需要使用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訪問需要的連接埠。如果出現連接埠被主機連接埠已經被佔用的報錯時,請替換為非標準連接埠,如publish 8443:443 。
說明 如替換成非標連接埠,需要在安全性群組中添加開放對應連接埠的入方向規則例如8443,請參見添加安全性群組規則。 |
publish 80:80 | 將主機的80連接埠映射到容器的80連接埠,使用HTTP訪問需要的連接埠。如果出現連接埠被主機連接埠已經被佔用的報錯時,請替換為非標準連接埠,例如publish 8080:80 。
說明 如替換成非標連接埠,需要在安全性群組中添加開放對應連接埠的入方向規則例如8080,請參見添加安全性群組規則。 |
publish 2222:22 | 將主機的2222連接埠映射到容器的22連接埠,使用Git操作進行程式碼複製品、推送和拉取操作,需要使用SSH服務。 |
ECS執行個體的路徑和容器路徑的對應關係如下:
ECS路徑 | 容器路徑 | 說明 |
$GITLAB_HOME/data
| /var/opt/gitlab
| 儲存應用程式資料。 |
$GITLAB_HOME/logs
| /var/log/gitlab
| 儲存GitLab設定檔。 |
$GITLAB_HOME/config
| /etc/gitlab
| 儲存GitLab設定檔。 |
查看容器狀態。
sudo docker ps -a
當容器狀態為healthy時,說明GitLab容器已經正常啟動。
進入GitLab管理頁面
在瀏覽器輸入網址。訪問網址:http://${ECS的公網IP}
。
重要 如果使用Docker鏡像方式安裝,並將HTTP的預設連接埠80映射成非標準連接埠,請在訪問連結後添加該連接埠號碼。
首次登入使用使用者名稱root
,通過如下方式擷取密碼。
擷取GitLab的登入密碼。在ECS執行個體執行以下命令:
回顯資訊類似如下所示,您可以在Password
後擷取GitLab的初始登入密碼。
進入Admin頁面。
在Users>Pending approval頁面審批新使用者的申請。其他動作例如管理專案、系統管理使用者等,請參見admin_area。
說明 本樣本介紹將檔案上傳到GitLab倉庫的步驟。如果您想瞭解更多的GitLab操作,例如GitLab常用命令、資料備份、配置選項、使用者管理、與其他服務整合、故障排除等,請參見極狐GitLab和GitLab社區版。
註冊使用者並設定免密訪問
訪問GitLab頁面。單擊Sign in按鈕下的Register now,建立一個新使用者。等待GitLab管理員通過申請後,使用新建立的使用者登入GitLab。
在本地產生金鑰組檔案。
ssh-keygen
產生金鑰組的過程中,系統會提示輸入金鑰組存放目錄(預設為目前使用者目錄下的.ssh/id_rsa
,例如/home/test/.ssh/id_rsa
)和金鑰組密碼,您可以手動輸入,也可以按Enter保持預設。
回顯資訊類似如下所示。
查看並複製公開金鑰檔案id_rsa.pub
中的內容,便於後續步驟使用。
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添加完成後,如下圖所示。
建立專案並Managed 程式碼
建立新專案
在GitLab的首頁中,單擊頁面右側的New Project按鈕,然後單擊Create blank project。
單擊Create blank project,設定Project name和Project URL,然後單擊頁面底部的Create project。本文以mywork專案為例進行說明。
回到專案頁面,複製SSH複製地址,該地址在進行複製操作時需要使用。
複製遠程倉庫
在本地安裝Git。
sudo yum install git
在本地配置使用Git倉庫的人員資訊。
配置使用Git倉庫的使用者名稱。
git config --global user.name "testname"
配置使用Git倉庫的人員郵箱。
git config --global user.email "abc@example.com"
複製已建立的專案到本地。
輸入git clone
並粘貼SSH複製地址,Git會自動建立一個以倉庫名稱命名的檔案夾並下載檔案。
git clone ${SSH URL}
如果使用Docker鏡像安裝,需要在連結中添加ssh://
和docker run命令中的映射連接埠,例如:
git clone ssh://git@{IP網域名稱}:{SSH連接埠}/root/mywork
進入到專案目錄。
cd mywork/
查看當前分支的名稱,預設為主分支main
。
git branch
建立分支並變更
在本地建立新的分支,便於變更檔。
建立一個分支example
。
git checkout -b example
建立需要上傳到GitLab中的目標檔案test.txt
,並寫入內容Hello world!
。
echo "Hello world!" > test.txt
提交並推送更改
將新分支example
推送到遠程倉庫進行儲存。
將test.txt
檔案添加到暫存區。
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
中。
後續步驟
配置郵件通知
GitLab需要一個郵件傳輸代理程式來寄送電子郵件通知,例如專案更新、密碼重設等。SMTP服務通常使用伺服器的25連接埠發送郵件,但基於安全考慮,ECS執行個體25連接埠預設受限,建議您使用SSL加密連接埠(通常是465連接埠)來對外發送郵件,常用連接埠的說明請參見常用連接埠。配置SMTP的步驟:
配置外部 SMTP 伺服器。
驗證SMTP配置效果。
執行gitlab-rails console
命令進入Rails控制台。
輸入以下命令,發送測試電子郵件:
Notify.test_email('destination_email@address.com', 'Message Subject', 'Message Body').deliver_now
在目標郵箱中查看測試郵件,或者在ECS執行個體中執行sudo tail -f /var/log/mail.log
查看郵件的日誌。
解析GitLab網站網域名稱
通過執行個體公網IP地址直接存取您的GitLab網站會降低服務端的安全性。如果您已有網域名稱或者想為GitLab網站註冊一個網域名稱,可以參考以下步驟。
註冊網域名稱。
具體操作,參見通用網域名稱註冊基本流程如何註冊阿里雲網域名稱。
備案網域名稱。
如果您的網域名稱指向的網站託管在阿里雲中國內地節點伺服器,您需要進行備案。
解析網域名稱。設定網域名稱解析後,外部使用者可通過網域名稱訪問GitLab網站。
網域名稱解析是使用網域名稱訪問您的網站的必備環節。具體操作,請參見新手引導。
開啟HTTPS加密訪問。使用免費服務例如使用Let’s Encrypt免費的自動HTTPS,或者付費服務SSL認證快速上手。
添加安全性群組規則:在ECS的安全性群組內,添加一條入方向規則,為了安全起見,建議只對授權的IP地址開放連接埠。
修改gitlab.rb中的external_url參數,配置完成後如下圖所示。
常見問題
使用Docker方式啟動時,提示22連接埠被佔用
ECS執行個體預設啟動SSH服務,會佔用22(SSH)連接埠。使用Docker鏡像方式安裝時,需要將主機的22連接埠映射成其他連接埠,並修改gitlab_rails['gitlab_shell_ssh_port']
參數:
在啟動Docker時指定非標連接埠,例如publish 2222:22
。
編輯GitLab設定檔。
執行sudo docker exec -it gitlab /bin/bash
,進入會話。
編輯檔案/etc/gitlab/gitlab.rb
。
設定gitlab_rails['gitlab_shell_ssh_port'] = 2222
。
執行gitlab-ctl reconfigure
,重新設定GitLab。
開啟專案頁面,驗證配置效果。