如何在自行架設的 Gitlab 導入 Gitlab Pages 服務?

如果你想要在自行架設的 Gitlab 導入 Gitlab Pages 服務,首先你要先注意你不能使用裸域做為 Gitlab 服務的網域,你應該要使用子網域作為 Gitlab 服務的網域。

注意事項

可架設的子網域範例可能是 gitlab.example.com (Gitlab) 與 gitlab-page.example.com (Gitlab Page),但如果是 example.com (Gitlab) 與 pages.example.com (Gitlab Page) 的話就不行。

DNS 與 gitlab.rb 設定

最初需要設定的是 DNS,你需要將 *.pages.example.com 指向你的主機 IP 位置,因為我們期待的 Gitlab Page 網址是:https://<namespace>.example.io/<project_slug>

你需要在 gitlab.rb 內加上以下內容:

pages_external_url "https://pages.example.com"
pages_nginx['redirect_http_to_https'] = true
pages_nginx['ssl_certificate'] = "/etc/gitlab/ssl/pages-nginx.crt"
pages_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/pages-nginx.key"

你可能有發現到當中需要 SSL 憑證,因此你需要先透過 certbot 申請 SSL,這邊建議可以使用 certbot + Cloudflare 的插件來完成申請,申請完成後你再將 SSL 憑證路徑修改為正確的路徑。

Gitlab 設定 pages

每個專案都可以前往 settings > pages 裡進行設定,或是你可以自行定義 .gitlab-ci.yml 檔案來發布 Gitlab Pages。下面是一個發布 Gitlab Page 的範例內容:

pages:
  stage: deploy
  environment: production
  script:
    - mkdir .public
    - cp -r ./* .public
    - rm -rf public
    - mv .public public
  artifacts:
    paths:
      - public
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH