開發者大遷徙!如何在 GCP 上安裝 GitLab
知名程式碼共享(ㄋㄢˊㄋㄢˊ)社交平台 GitHub 傳出被微軟收購的消息,風聲一出,立刻震驚全球的開源社群,也隨即引爆一場史無前例的開發者大遷徙現象。從 6 月 4 號開始,在 GitHub 上平均每小時有超過 1,000 個專案、3,000 個儲存庫正在轉移至另一開源平台 GitLab,時間持續了至少 8 小時以上。(資料來源:iThome,延伸閱讀:為什麼會引發這波逃亡潮?)
如果您也打算將 GitHub 的專案遷移至 GitLab,GitLab 已經與 Google Cloud Platform (GCP) 緊密整合、不但可自動部署應用程式至 Kubernetes,且提供了一個安全且易於管理的環境放置您的專案,這篇文章手把手教您如何在 GCP 上建置您自己的 GitLab:
在 GCP 上安裝 GitLab 的詳細步驟
創建 host VM for GitLab
進入到 GCP console 當中,點選左上角的 Menu 並選取 Cloud Launcher。
在搜尋欄位填入 GitLab,並選取 GitLab CE Certified by Bitnami。
點選藍色的按鈕,創建一台 VM for GitLab。
VM 創建好之後,會進入到 Deployment Manager 的頁面。右方選單有一欄 Admin URL,點選它會進入到 GitLab的登入頁面。Admin的帳號密碼就在 Admin URL 下方。
分配 Static IP 給 VM
在終端機中送出以下指令:[ADDRESS_NAME] 為此 address的名稱、[IP_ADDRESS]為此 VM的 External IP,可以在上方提供的 Site address取得、[REGION] 填入該 VM所屬的 region,在此為 us-central1。
$ gcloud compute addresses create [ADDRESS_NAME] --addresses [IP_ADDRESS] --region [REGION]
設定 Domain name
Admin帳號密碼的下方有一個按鈕可以 SSH到該 VM當中。
編輯 GitLab 設定檔
$ sudo vim /etc/gitlab/gitlab.rb
設定 Domain name,http://gitlab.example.com 填入使用者擁有的 Domain name。
external_url 'http://gitlab.example.com'
重啟設定
$ sudo gitlab-ctl reconfigure
跑完之後,即可以透過剛剛設定的 Domain 進入到 GitLab 登入頁面。
設定 HTTPS
有兩種方法可以啟用 HTTPS服務:
1. 手動設定
預設 GitLab是不支援 HTTPS,如果想要啟用 HTTPS,需要加入以下內容到 /etc/gitlab/gitlab.rb 。
external_url 'https://gitlab.example.com'
*注意:請將 gitlab.example.com 換成欲使用的 Domain
完成後, GitLab會找尋是否有該 Domain的 /etc/gitlab/ssl/gitlab.example.com.key 以及 /etc/gitlab/ssl/gitlab.example.com.crt。創建 /etc/gitlab/ssl 的目錄並貼入 key 以及 certificate 。
$ sudo mkdir -p /etc/gitlab/ssl
$ sudo chmod 700 /etc/gitlab/ssl
$ sudo cp gitlab.example.com.key gitlab.example.com.crt /etc/gitlab/ssl/
完成之後再重跑一次設定,如果設置成功即可瀏覽 https://gitlab.example.com
$ sudo gitlab-ctl reconfigure
如果 certificate key 是有密碼加密的話,在跑 sudo gitlab-ctl reconfigure 指令時會失敗,而且不會有任何警告。移除密碼請執行以下指令:
$ openssl rsa -in certificate_before.key -out certificate_after.key
如果有防火牆的話,請開啟 HTTPS的 443 port。
# UFW example (Debian, Ubuntu)
$ sudo ufw allow https
# lokkit example (RedHat, CentOS 6)
$ sudo lokkit -s https
# firewall-cmd (RedHat, Centos 7)
$ sudo firewall-cmd --permanent --add-service=https
$ sudo systemctl reload firewalld
2. Let’s Encrypt
GitLab 會自動幫使用者更新 Let’s Encrypt certificate。目前只有主要的 GitLab domain 以及 registry 有支援自動更新 certificate. 其他服務(如 pages 和 Mattermost)未來將會支援.如要啟用 Let’s Encrypt 需要貼入以下資訊至 /etc/gitlab/gitlab.rb
external_url 'https://gitlab.example.com'
letsencrypt['contact_emails'] = ['foo@email.com'] #Optional
建議是要填入聯絡信箱,因為當 certificate 剩 3個月就過期時,它會通知使用者。
設定 SMTP
以下有 SMTP Server的寄發範例,貼入到 /etc/gitlab/gitlab.rb,並執行 $ gitlab-ctl reconfigure
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.server"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "smtp user"
gitlab_rails['smtp_password'] = "smtp password"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
# If your SMTP server does not like the default 'From: gitlab@localhost' you
# can change the 'From' with this setting.
gitlab_rails['gitlab_email_from'] = 'gitlab@example.com'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@example.com'
設定範例:https://docs.gitlab.com/omnibus/settings/smtp.html#example-configuration
參考網址:https://docs.gitlab.com/ee/install/google_cloud_platform/