【前編】HugoでビルドしたポートフォリオをGitLab Pagesで良い感じにホスティングする: 自前のGitLabインスタンスを立てる
🐋始めに
入社4年目になって、そろそろ4年目だから~と発破をかけられることが多くなりました。
勘弁してほしい、お給料は新入社員のまま、まだピカピカなんですが…。
来年から牛や馬にも募集かけた方が良い、僕より役に立つはず。
業務でGitLabを使うことが多いので、僕も自前のGitLabが欲しい!となり。
静的サイトをPagesでホスティングすることを念頭に、コンテナでGitLabを構築してみました。
🛠構築手順
DockerやDocker Composeについての説明は省略します。
GitLabにはEnterprise EditionとCommunity Editionがあります。
今回は深く考えずCEを使いました。
(詳細な手順は公式ドキュメントの方が分かりやすいかも…。)
ディレクトリ構成
プロジェクトのディレクトリ構成は下記の通りです。
(ディレクトリ構成は好みで変更してください、動けば何でも良いです。)
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
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
# リバースプロキシを使うために設定
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を使いました。
設定例は公式ドキュメントに詳しいです。
メールサーバーとの連携はテストした方が良いと思います。
起動/ログイン/初期設定
コンテナを起動してください。
起動には少し時間がかかりますが、コンテナの状態がhealthyになっていたらOKです。
ブラウザでGitLabのログイン画面にアクセスします。
下記のユーザー/パスワードでログインできます。
ユーザー: root
パスワード: "docker container exec -it <コンテナID> cat /etc/gitlab/initial_root_password"で表示されるパスワード
初期設定としては下記をやりました。
・ユーザー/パスワードの変更
・新規登録の制限
・2FAの設定
・アクセストークンの発行
🎉リポジトリの作成
ここまで来れば、自前のGitLabが使えるようになっていると思います。
リポジトリを作成して色々遊びましょう!
🦊その他の設定(オプション)
GitLabのリポジトリをGitHubにミラーリングできるようなので、やってみました。
まずはGitHubで空のリポジトリを作成します。
次にGitHubでパーソナルアクセストークンを発行します。
(Settings→Developer Settingsから発行できます。)
名前と期限はお好みです。
スコープはrepoを選択しました。
発行したトークンはGitLabで使うのでコピーしておいてください。
次にGitLabのリポジトリ設定でミラーリング設定をします。
GitリポジトリのURLには、GitHubのリポジトリURLを入力してください。
パスワードにはGitHubで発行したトークンを入力してください。
設定後、更新ボタンをクリックしてGitHubに同期されたら成功です!
🐳終わりに
以前から興味のあったGitLabをコンテナで構築しました。
メールサーバーとも連携できましたし、GitHubにもミラーリングできました。
個人的には大成功です、皆さんの参考になれば嬉しいです。
中編に続きます。
Discussion