🦊

【前編】HugoでビルドしたポートフォリオをGitLab Pagesで良い感じにホスティングする: 自前のGitLabインスタンスを立てる

2023/11/08に公開

🐋始めに

入社4年目になって、そろそろ4年目だから~と発破をかけられることが多くなりました。
勘弁してほしい、お給料は新入社員のまま、まだピカピカなんですが…。
来年から牛や馬にも募集かけた方が良い、僕より役に立つはず。

https://geekom.jp/products/nuc-mini-it12-12450h-12650h-i5-i7?variant=46572677267740
https://www.amazon.co.jp/GEEKOM-IT12-i5-12450H-ミニコンピューター-デスクトップコンピューターサポート/dp/B0CFHH9F45?th=1
ミニPC新調して、Debian入れて、Docker入れて、何かしたい!となり。
業務でGitLabを使うことが多いので、僕も自前のGitLabが欲しい!となり。
静的サイトをPagesでホスティングすることを念頭に、コンテナでGitLabを構築してみました。

https://www.youtube.com/watch?v=7P4UGvHZUNM

🛠構築手順

DockerやDocker Composeについての説明は省略します。
GitLabにはEnterprise EditionとCommunity Editionがあります。
今回は深く考えずCEを使いました。
(詳細な手順は公式ドキュメントの方が分かりやすいかも…。)
https://hub.docker.com/r/gitlab/gitlab-ce
https://docs.gitlab.com/ee/install/docker.html

ディレクトリ構成

プロジェクトのディレクトリ構成は下記の通りです。
(ディレクトリ構成は好みで変更してください、動けば何でも良いです。)

repository_management
|-- compose.yml   ★
|-- .env
|-- gitlab
|   |-- src
|   |   `-- etc
|   |       `-- gitlab
|   |           `-- gitlab.rb
|   `-- volume
|       |-- etc
|       |   `-- gitlab
|       |       `-- gitlab.rb   ★
|       `-- var
|           |-- log
|           |   `-- gitlab
|           `-- opt
|               `-- gitlab
`-- script
    |-- compose_down.sh
    |-- compose_up.sh
    `-- run_groundwork.sh

★を付けたファイルが大事です。

compose.yml

compose.yml
services:
  gitlab:
    image: gitlab/gitlab-ce:latest   ★本当はバージョン固定した方が良いらしい
    container_name: rm-gitlab
    restart: always
    networks:
      - repository-management
      - reverse-proxy
    labels:
      - traefik.enable=true
      # HTTP
      - traefik.http.routers.gitlab.rule=Host(`rm.zetsubo.net`)
      - traefik.http.routers.gitlab.entrypoints=websecure
      - traefik.http.routers.gitlab.tls=true
      - traefik.http.routers.gitlab.service=gitlab
      - traefik.http.services.gitlab.loadbalancer.server.port=80
    # environment:
    stdin_open: true
    tty: true
    # user: ${USER_ID}:${GROUP_ID}
    volumes:
      - ./gitlab/volume/etc/gitlab:/etc/gitlab
      - ./gitlab/volume/var/log/gitlab:/var/log/gitlab
      - ./gitlab/volume/var/opt/gitlab:/var/opt/gitlab
      # - /etc/group:/etc/group:ro
      # - /etc/passwd:/etc/passwd:ro
      - /usr/share/zoneinfo/Asia/Tokyo:/etc/localtime:ro
    # shm_size: 256m

networks:
  repository-management:
    external: true
  reverse-proxy:
    external: true

ネットワークとかラベルはご自身の環境に合わせて変更してください。
僕はTraefik(リバースプロキシ)の後ろにGitLabを立てていて、SSL証明書をTraefikで管理してるので記述しています。
ローカルでしか使わない場合は80番ポートをフォワードすれば動くと思います。

gitlab.rb

gitlab.rb
# リバースプロキシを使うために設定
external_url "https://your.domain"
letsencrypt['enable'] = false
nginx['listen_https'] = false
nginx['listen_port'] = 80

# メールサーバー(SMTP)を使うために設定
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp-relay.sendinblue.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "your@email.com"
gitlab_rails['smtp_password'] = "your-password"
gitlab_rails['smtp_domain'] = "your.domain"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = "gitlab@your.domain"
gitlab_rails['gitlab_email_reply_to'] = "noreply@your.domain"

リバースプロキシを使うための設定はそのままです。
メールサーバー(SMTP)を使うための設定は一例です。
僕は1日300通まで無料で送信できるBrevoを使いました。
https://www.brevo.com/
設定例は公式ドキュメントに詳しいです。
https://docs.gitlab.com/omnibus/settings/smtp.html
メールサーバーとの連携はテストした方が良いと思います。
https://docs.gitlab.com/omnibus/settings/smtp.html#testing-the-smtp-configuration

起動/ログイン/初期設定

コンテナを起動してください。
起動には少し時間がかかりますが、コンテナの状態がhealthyになっていたらOKです。
ブラウザでGitLabのログイン画面にアクセスします。
ログイン画面
下記のユーザー/パスワードでログインできます。
ユーザー: root
パスワード: "docker container exec -it <コンテナID> cat /etc/gitlab/initial_root_password"で表示されるパスワード

初期設定としては下記をやりました。
・ユーザー/パスワードの変更
・新規登録の制限
・2FAの設定
https://docs.gitlab.com/ee/user/profile/account/two_factor_authentication.html
・アクセストークンの発行
https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html

🎉リポジトリの作成

ここまで来れば、自前のGitLabが使えるようになっていると思います。
リポジトリを作成して色々遊びましょう!

🦊その他の設定(オプション)

GitLabのリポジトリをGitHubにミラーリングできるようなので、やってみました。
https://docs.gitlab.com/ee/user/project/repository/mirror/push.html#set-up-a-push-mirror-from-gitlab-to-github

まずはGitHubで空のリポジトリを作成します。
次にGitHubでパーソナルアクセストークンを発行します。
(Settings→Developer Settingsから発行できます。)
GitHubのパーソナルアクセストークン
名前と期限はお好みです。
スコープはrepoを選択しました。
発行したトークンはGitLabで使うのでコピーしておいてください。

次にGitLabのリポジトリ設定でミラーリング設定をします。
GitLabのミラーリング設定
GitリポジトリのURLには、GitHubのリポジトリURLを入力してください。
パスワードにはGitHubで発行したトークンを入力してください。

設定後、更新ボタンをクリックしてGitHubに同期されたら成功です!
今すぐ更新

🐳終わりに

以前から興味のあったGitLabをコンテナで構築しました。
メールサーバーとも連携できましたし、GitHubにもミラーリングできました。
個人的には大成功です、皆さんの参考になれば嬉しいです。
中編に続きます。
https://zenn.dev/jolly96k/articles/4fad0aa9a536aa

Discussion