全部產品
Search
文件中心

Elastic Compute Service:部署GitLab代碼託管平台

更新時間:Nov 21, 2024

GitLab是一個基於Git的代碼託管和協作平台,提供了從代碼管理到持續整合/持續部署(CI/CD)的全方位 DevOps功能。本文為您介紹如何在Linux系統的ECS執行個體上部署GitLab,搭建屬於您自己的代碼託管平台。

準備工作

請確保您已建立一台ECS執行個體,並且ECS執行個體必須滿足以下條件:

安裝GitLab

GitLab版本包括企業版(EE)、社區版(CE)和極狐版(JH)。極狐GitLab(極狐版JH)是在中國大陸和港澳地區發行的企業級GitLab版本,極狐GitLab的伺服器都在國內,網路訪問速度更快。極狐版和社區版的對比和說明請參見is-it-any-goodwhy-jh

方式一:使用安裝包

社區版本和極狐版本在安裝命令和支援的作業系統上存在差異。

GitLab社區版

  • Alibaba Cloud Linux 3使用安裝包方式安裝時,僅支援安裝極狐GitLab。如果需要在Alibaba Cloud Linux 3安裝GitLab社區版,請使用Docker鏡像方式。

CentOS 7.x

  1. 遠端連線需要安裝GitLab的ECS執行個體。

    具體操作,請參見使用Workbench工具以SSH協議登入Linux執行個體

  2. 添加GitLab包倉庫。

    curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
  3. 安裝GitLab所需的依賴包。

    sudo yum install -y curl python3-policycoreutils openssh-server
  4. 安裝GitLab社區版。

    sudo EXTERNAL_URL=<GitLab伺服器的公網IP地址> sudo yum install -y gitlab-ce

    <GitLab伺服器的公網IP地址>請替換成安裝GitLab的ECS執行個體公網IP地址

    重要

    低於4 vCPU、8 GiB會因規格過小,導致長時間處於Installing狀態或安裝失敗。請升級規格以後再安裝,升級規格操作,請參見升降配方式概述

    當出現類似如下回顯資訊,表示GitLab已經安裝成功。

    image

Ubuntu

  1. 遠端連線需要安裝GitLab的ECS執行個體。

    具體操作,請參見使用Workbench工具以SSH協議登入Linux執行個體

  2. 安裝GitLab所需的依賴包。

    sudo apt-get update
    sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
  3. 添加GitLab軟體包倉庫。

    sudo curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

    說明

    由於網路原因,可能會出現無法添加GitLab軟體源鏡像的問題,建議您多嘗試幾次。

    當出現類似如下回顯資訊,表示GitLab軟體包倉庫已安裝。

    image

  4. 重新整理軟體包列表。

    sudo apt-get update
  5. 安裝GitLab。

    sudo EXTERNAL_URL=<GitLab伺服器的公網IP地址> apt-get install -y gitlab-ce

    <GitLab伺服器的公網IP地址>請替換成安裝GitLab的ECS執行個體更換公網IP地址

    重要

    低於4 vCPU、8 GiB會因規格過小,導致長時間處於Installing狀態或安裝失敗。請升級規格以後再安裝,升級規格操作,請參見升降配方式概述

    當出現類似如下回顯資訊,表示GitLab已經安裝成功。

    image

極狐GitLab

Alibaba Cloud Linux 3/CentOS 7.x

  1. 遠端連線需要安裝GitLab的ECS執行個體。

    具體操作,請參見使用Workbench工具以SSH協議登入Linux執行個體

  2. 安裝GitLab所需的依賴包。

    sudo yum install -y curl python3-policycoreutils openssh-server
  3. 添加GitLab軟體包倉庫。

    curl -fsSL https://get.gitlab.cn | sudo /bin/bash
    說明

    由於網路原因,可能會出現無法添加GitLab軟體源鏡像的問題,建議您多嘗試幾次。

    當出現類似如下回顯資訊,表示GitLab軟體包倉庫已安裝。

    image.png

  4. 安裝GitLab。

    sudo EXTERNAL_URL=<GitLab伺服器的公網IP地址> yum install -y gitlab-jh

    <GitLab伺服器的公網IP地址>請替換成安裝GitLab的執行個體公網IP地址。

    重要

    低於4 vCPU、8 GiB會因規格過小,導致長時間處於Installing狀態或安裝失敗。請升級規格以後再安裝,升級規格操作,請參見升降配方式概述

    當出現類似如下回顯資訊,表示GitLab已經安裝成功。

    image.png

Ubuntu

  1. 遠端連線需要安裝GitLab的ECS執行個體。

    具體操作,請參見使用Workbench工具以SSH協議登入Linux執行個體

  2. 安裝GitLab所需的依賴包。

    sudo apt-get update
    sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
  3. 配置安裝極狐GitLab的軟體源鏡像。

    curl -L get.gitlab.cn | bash

    image

  4. 安裝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已經安裝成功。

    image.png

方式二:使用Docker鏡像

使用Docker鏡像方式安裝

  1. 遠端連線需要安裝GitLab的ECS執行個體。

    具體操作,請參見使用Workbench工具以SSH協議登入Linux執行個體

  2. 安裝Docker。具體操作,請參見安裝Docker

  3. 建立Docker容器的掛載資料目錄,該目錄會作為GitLab配置、日誌和資料檔案所在的目錄。

    sudo mkdir -p /srv/gitlab 
  4. 設定環境變數$GITLAB_HOME

    export GITLAB_HOME=/srv/gitlab
  5. 執行如下命令,安裝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設定檔。

  6. 查看容器狀態。

    sudo docker ps -a

    當容器狀態為healthy時,說明GitLab容器已經正常啟動。

    image.png

進入GitLab管理頁面

  1. 在瀏覽器輸入網址。訪問網址:http://${ECS的公網IP}

    重要

    如果使用Docker鏡像方式安裝,並將HTTP的預設連接埠80映射成非標準連接埠,請在訪問連結後添加該連接埠號碼。

  2. 首次登入使用使用者名稱root,通過如下方式擷取密碼。

    擷取GitLab的登入密碼。在ECS執行個體執行以下命令:

    • Linux安裝包方式:sudo cat /etc/gitlab/initial_root_password

    • Docker安裝方式:sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

    回顯資訊類似如下所示,您可以在Password後擷取GitLab的初始登入密碼。

    image.png

    重要

    出於安全原因,24小時後該檔案會被自動刪除。建議您安裝成功首次登入之後,修改GitLab的初始密碼,操作步驟參見reset_user_password

    asda5

  3. 進入Admin頁面。

    image

  4. Users>Pending approval頁面審批新使用者的申請。其他動作例如管理專案、系統管理使用者等,請參見admin_area

    image

說明

本樣本介紹將檔案上傳到GitLab倉庫的步驟。如果您想瞭解更多的GitLab操作,例如GitLab常用命令、資料備份、配置選項、使用者管理、與其他服務整合、故障排除等,請參見極狐GitLabGitLab社區版

註冊使用者並設定免密訪問

  1. 訪問GitLab頁面。單擊Sign in按鈕下的Register now,建立一個新使用者。等待GitLab管理員通過申請後,使用新建立的使用者登入GitLab。

  2. 在本地產生金鑰組檔案。

    ssh-keygen

    產生金鑰組的過程中,系統會提示輸入金鑰組存放目錄(預設為目前使用者目錄下的.ssh/id_rsa,例如/home/test/.ssh/id_rsa)和金鑰組密碼,您可以手動輸入,也可以按Enter保持預設。

    回顯資訊類似如下所示。

    image.png

  3. 查看並複製公開金鑰檔案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****
  4. 添加SSH key。將擷取的公開金鑰添加了GitLab賬戶中,以便進行免密碼的身分識別驗證。

    1. 單擊頁面右上方的頭像,然後單擊Edit profile

      image

    2. 在左側導覽列,單擊SSH Keys。將公開金鑰檔案id_rsa.pub中的內容粘貼到Key所在的文字框中,然後單擊Add key

      image

    3. SSH Key添加完成後,如下圖所示。sda

建立專案並Managed 程式碼

建立新專案

  1. 在GitLab的首頁中,單擊頁面右側的New Project按鈕,然後單擊Create blank project

    ada55

  2. 單擊Create blank project,設定Project nameProject URL,然後單擊頁面底部的Create project。本文以mywork專案為例進行說明。

    image

  3. 回到專案頁面,複製SSH複製地址,該地址在進行複製操作時需要使用。

    image

複製遠程倉庫

  1. 在本地安裝Git

    sudo yum install git
  2. 在本地配置使用Git倉庫的人員資訊。

    1. 配置使用Git倉庫的使用者名稱。

      git config --global user.name "testname" 
    2. 配置使用Git倉庫的人員郵箱。

      git config --global user.email "abc@example.com" 
  3. 複製已建立的專案到本地。

    1. 輸入git clone並粘貼SSH複製地址,Git會自動建立一個以倉庫名稱命名的檔案夾並下載檔案。

      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

      簡單配置

    2. 進入到專案目錄。

      cd mywork/ 
    3. 查看當前分支的名稱,預設為主分支main

      git branch

建立分支並變更

在本地建立新的分支,便於變更檔。

  1. 建立一個分支example

     git checkout -b example     
  2. 建立需要上傳到GitLab中的目標檔案test.txt,並寫入內容Hello world!

    echo "Hello world!" > test.txt

提交並推送更改

將新分支example推送到遠程倉庫進行儲存。

  1. test.txt檔案添加到暫存區。

    git add test.txt
  2. 確認變更的檔案。

    git status

    獲得以下輸出:

    On branch example
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
            modified:   test.txt
  3. 提交暫存檔案test.txt

    git commit -m "測試用"
  4. example分支目前只在本地可用。將分支推送到GitLab倉庫,便於其他人訪問。

    git push origin example
  5. 推送到GitLab倉庫後,其他使用者也可以查看建立的分支。

    image

合并更改

將本地example 分支的更改合并到主分支 main,然後將合并後的主分支 main推送到遠程倉庫。

  1. 切換到主分支main

    git checkout main
  2. 將建立分支example 合并到主分支main

    git merge example
  3. 將合并後的主分支推送到GitLab倉庫。

    git push
  4. 變更已同步到GitLab倉庫的主分支main中。

    image

    image

後續步驟

配置郵件通知

GitLab需要一個郵件傳輸代理程式來寄送電子郵件通知,例如專案更新、密碼重設等。SMTP服務通常使用伺服器的25連接埠發送郵件,但基於安全考慮,ECS執行個體25連接埠預設受限,建議您使用SSL加密連接埠(通常是465連接埠)來對外發送郵件,常用連接埠的說明請參見常用連接埠。配置SMTP的步驟:

  1. 配置外部 SMTP 伺服器

  2. 驗證SMTP配置效果。

    1. 執行gitlab-rails console命令進入Rails控制台。

    2. 輸入以下命令,發送測試電子郵件:

      Notify.test_email('destination_email@address.com', 'Message Subject', 'Message Body').deliver_now
    3. 在目標郵箱中查看測試郵件,或者在ECS執行個體中執行sudo tail -f /var/log/mail.log查看郵件的日誌。

備份GitLab倉庫的資料

解析GitLab網站網域名稱

通過執行個體公網IP地址直接存取您的GitLab網站會降低服務端的安全性。如果您已有網域名稱或者想為GitLab網站註冊一個網域名稱,可以參考以下步驟。

  1. 註冊網域名稱。

    具體操作,參見通用網域名稱註冊基本流程如何註冊阿里雲網域名稱

  2. 備案網域名稱。

    如果您的網域名稱指向的網站託管在阿里雲中國內地節點伺服器,您需要進行備案。

  3. 解析網域名稱。設定網域名稱解析後,外部使用者可通過網域名稱訪問GitLab網站。

    網域名稱解析是使用網域名稱訪問您的網站的必備環節。具體操作,請參見新手引導

  4. 開啟HTTPS加密訪問。使用免費服務例如使用Let’s Encrypt免費的自動HTTPS,或者付費服務SSL認證快速上手

  5. 添加安全性群組規則:在ECS的安全性群組內,添加一條入方向規則,為了安全起見,建議只對授權的IP地址開放連接埠。

    • 安裝包方式:443(HTTPS)連接埠。

    • Docker Engine方式:對應於docker run命令中設定的主機HTTPS連接埠。

  6. 修改gitlab.rb中的external_url參數,配置完成後如下圖所示。

常見問題

伺服器卡頓、無法遠端連線

使用Docker方式啟動時,提示22連接埠被佔用

ECS執行個體預設啟動SSH服務,會佔用22(SSH)連接埠。使用Docker鏡像方式安裝時,需要將主機的22連接埠映射成其他連接埠,並修改gitlab_rails['gitlab_shell_ssh_port'] 參數:

  1. 在啟動Docker時指定非標連接埠,例如publish 2222:22

  2. 編輯GitLab設定檔。

    1. 執行sudo docker exec -it gitlab /bin/bash,進入會話。

    2. 編輯檔案/etc/gitlab/gitlab.rb

    3. 設定gitlab_rails['gitlab_shell_ssh_port'] = 2222

    4. 執行gitlab-ctl reconfigure,重新設定GitLab。

  3. 開啟專案頁面,驗證配置效果。

    image