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