2020年8月9日 星期日

CentOS 7 安裝 GitLab

到官網 https://about.gitlab.com/install/
有相對應的作業系統安裝說明 https://about.gitlab.com/install/#centos-7
這邊安裝的版本是 gitlab-ce 13.2.2

安裝(設定nginx SSL憑證,使用 HTTPS 連線)
  1. 安裝依賴的的套件
    $ yum install -y curl policycoreutils-python openssh-server
    
    
  2. 啟動 SSH 服務
    $ systemctl enable sshd
    $ systemctl start sshd
    
  3. 防火牆開啟網頁要用的PORT網頁
    這邊開 9000 PORT,預計當 HTTPS PORT
    //firewall-cmd --permanent --add-service=http
    //firewall-cmd --permanent --add-service=https
    $ firewall-cmd --permanent --zone=public --add-port=9000/tcp
    $ systemctl reload firewalld
    $ firewall-cmd --list-all --zone=public
  4. 安裝 SMTP Server (Postfix)
    使用者註冊、初次修改密碼、忘記密碼使用
    $ yum install postfix
    $ systemctl enable postfix
    $ systemctl start postfix
  5. 安裝 GitLab 套件的yum儲存庫(repo)
    有兩個版本,CE社群版(Community Edition),EE企業版(Enterprise Edition)
    Community Edition or Enterprise Edition | GitLab
    這邊安裝 CE 版,若要安裝 EE 版,將指令中的「ce」改成「ee」即可
    $ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
  6. 使用 yum 指令安裝 GitLab 套件,GitLab 自帶很多會用到的其他套件(nginx、puma、...)
    我在2G RAM虛擬機器上安裝時,跑很久都沒跑完,記憶體被吃光。
    後來看到官網建議要4G RAM,改成4G RAM才在可忍受的時間安裝完畢。
    $ yum install -y gitlab-ce
  7. 預計使用 HTTPS 加密連線,先產生 nginx 使用的 SSL 憑證
    (這邊選擇用自己發的憑證,若有合法網域,可略過此步驟,GitLab 會自動申請Let's Encrypt的憑證)
    $ mkdir /etc/gitlab/ssl
    $ chmod 755 /etc/gitlab/ssl
    $ openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/gitlab/ssl/nginx.key -out /etc/gitlab/ssl/nginx.crt
  8. 修改 GitLab 設定檔 gitlab.rb,設定網頁訪問用的外部網址,與設定 nginx 使用的SSL憑證
    $ vi /etc/gitlab/gitlab.rb
    external_url 改為要瀏覽的網址
    external_url 'https://192.168.0.100:9999'

    修改 GetLab 自帶 Nginx 的 ssl_certificate、ssl_certificate_key 設定
    預設為
    # nginx['ssl_certificate'] = "/etc/gitlab/ssl/#{node['fqdn']}.crt"
    # nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/#{node['fqdn']}.key"
    改為
    nginx['ssl_certificate'] = "/etc/gitlab/ssl/nginx.crt"
    nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/nginx.key"
    若沒改,預設會取得 external_url 設定中的網域,自動向 Let's Encrypt 申請憑證
    但如果設定的網域是自訂的,或設定的是IP,無法申請 Let's Encrypt 認證的憑證
    所以這邊選擇設定自發憑證的位置

    更新GitLab服務設定
    $ gitlab-ctl reconfigure
    執行 gitlab-ctl reconfigure  後,即可使用 external_url 設定的網址訪問
    (若出現 502 錯誤,可稍等一下,我測試 gitlab-ctl reconfigure 一跑玩,馬上試,出現502,似乎相關服務還沒重新跑)

    若依然出現502錯誤
    502-Whoops, GitLab is taking too much time to respond
    檢查 GetLab 自帶且目前啟動的服務中(gitlab-ctl status),有哪些可能是 PORT 跟系統原本的服務相衝突了
    可在 /etc/gitlab/gitlab.rb 中修改各服務使用的 PORT
    (自帶 Nginx 使用的PORT,依 external_url 設定的網址而定)
  9. 安裝成功,系統預設有一個 root 帳號,瀏覽 external_url 設定的網址
    會出現設定root密碼的畫面,設定後,即可用 root 登入
  10. 若為自發的HTTPS憑證,則專案的git config須設定 http.sslVerify false才能存取
    $ git config [--global] http.sslVerify false


其他:
  1. GitLab專案儲存庫(repositories),存放位置修改
    例如,改到 /home/git-data
    $ mkdir /home/git-data
    #參考原本repositories資料夾位置 /var/opt/gitlab/git-data 權限,做了一樣的修改(雖然官網說明沒寫)
    $ chown git.root /home/git-data
    $ chmod 700 /home/git-data
    修改 gitlab.rb 設定檔中的 git_data_dirs 設定,改為新的資料夾位置路徑
    $ vi /etc/gitlab/gitlab.rb
    git_data_dirs({
      "default" => {"path" => "/home/git-data"}
    })
    讓設定生效
    $ gitlab-ctl reconfigure
    若原本repositories 已有資料,可用以下操作移到新位置
    $ gitlab-ctl stop
    # Note there is _no_ slash behind 'repositories', but there _is_ a
    # slash behind 'git-data'
    $ rsync -av /var/opt/gitlab/git-data/repositories /home/git-data/
    $ gitlab-ctl upgrade
    $ gitlab-ctl start
  2. GitLab 關閉開放自行註冊帳號
    管理者登入後 > Admin Area > General > Sign-up restrictions >Sign-up enabled
  3. GitLab 關閉SSH,只通過https存取
    管理者登入後 > Admin Area > General > Visibility and access controls > Enabled Git access protocols
  4. 相關指令
    gitlab-ctl reconfigure   # 更新GitLab服務設定
    gitlab-ctl restart       # 重新啟動GitLab
    gitlab-ctl status        # 檢視GitLab服務狀態
    gitlab-ctl tail          # 查看GitLab服務執行期間的log
    gitlab-ctl stop nginx    # 停止GitLab自帶的nginx
    gitlab-ctl start nginx   # 啟動GitLab自帶的nginx

參考:
https://docs.gitlab.com/omnibus/settings/nginx.html#manually-configuring-https
https://docs.gitlab.com/omnibus/settings/configuration.html#storing-git-data-in-an-alternative-directory
https://docs.gitlab.com/omnibus/package-information/defaults.html



2 則留言: