GitLab を Docker Compose で建てる
オンプレで Git リポジトリを構築しようとすると第一候補に上がるのは GitLab かと思います.
今回はオンプレでよくありそうなユースケースを Docker Compose を用いて構築してみます.
公式イメージ vs. コミュニティイメージ
GitLab には公式イメージとコミュニティーの有志が作成したイメージがあるようでした.
公式イメージには以下のような様々なコンポーネントが含まれています.
※ gitlab.rb.template の設定項目より抜粋
- Nginx
- Unicorn
- Puma
- PostgreSQL
- Redis
- Mattermost
- GitLab Pages
- GitLab CI
- Prometheus
- Alertmanager
- Node Exporter
- Grafana
これらのコンポーネントを必要とするかで、どちらのイメージを選択するか意見が分かれるかもしれません. 個人的にはイメージサイズを気にしなければ公式イメージで良いかなと思います(各コンポーネントは無効にできますので).
Docker Compose での設定
以下のように LDAP と SMTP の設定を行いました.
version: "3"
services:
gitLab:
image: gitlab/gitlab-ce:13.1.1-ce.0
restart: always
extra_hosts:
- example.com:xx.xxx.xx.xx
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://example.com/gitlab'
gitlab_rails['gitlab_shell_ssh_port'] = 30022
gitlab_rails['time_zone'] = 'Asia/Tokyo'
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_host'] = 'example.com'
gitlab_rails['ldap_port'] = 389
gitlab_rails['ldap_uid'] = 'uid'
gitlab_rails['ldap_method'] = 'plain'
gitlab_rails['ldap_bind_dn'] = 'cn=Manager,dc=example,dc=com'
gitlab_rails['ldap_pasword' = 'password'
gitlab_rails['ldap_allow_username_or_email_login'] = true
gitlab_rails['ldap_base'] = 'ou=People,dc=example,dc=com'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = 'example.com'
gitlab_rails['smtp_port'] = 25
ports:
- "30080:80"
- "30443:443"
- "30022:22"
volumes:
- "/var/opt/gitlab/connfig:/etc/gitlab"
- "/var/opt/gitlab/logs:/var/log/gitlab"
- "/var/opt/gitlab/data:/var/opt/gitlab"
個人的なハマりどころは以下の3つです.
1. ホストサーバーの名前解決
Docker を使うときによく失念してしまうのですが、特に設定しなければ Docker コンテナ側からホストサーバーのホスト名は解決できません. 今回の設定例では gitlab_rails[‘ldap_host’] と gitlab_rails[‘smtp_address’] にホストサーバーを指定しています. 名前解決したければ extra_hosts を指定するか IP を直書きするかで対応することになるかと思います.
2. LDAP 設定の項目名
いくつか設定項目があります. GitLab 以外のツールでも LDAP を設定できることが多いですが、ツールごとに設定項目の表記揺れが大きいと感じました. 私自身 LDAP の不慣れだったので少々ハマったポイントでした. Docker Compose の設定では gitlab_rails[‘ldap_bind_dn’] と gitlab_rails[‘ldap_base’] が分かれば、あとはすんなり行くと思います.
3. SMTP の認証周り
SMTP の設定項目は多数あります. 公式ドキュメントではいくつかのパターンで設定例が紹介されています(とても親切ですね).
最初、認証周りの設定をいくつか記載していたのですが、それが逆に良くなかったようで、最終的には前述した設定例に落ち着きました(公式ドキュメントの SMTP on localhost と類似したパターン).
また、SMTP の設定確認には以下のテストコマンドが使えます. これはデバッグ行うのに非常に便利でした.
Notify.test_email('destination_email@address.com', 'Message Subject', 'Message Body').deliver_now
以上です.
参考URL