プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2016/09/30

GitLab を docker-compose で動かしてみる

update2022/05/18 event_note2016/09/30 5:09

GitLab の公式の Docker イメージがあるみたいなので、それを使用します。
英語ですが、公式のドキュメントもあります。

環境

ホスト OS は CentOS7 です。
会社の自チーム内のLANに環境を構築するため、プロキシ環境下で動作するように設定します。
メール通知やLDAP認証も全てプロキシ経由で行っています。

docker-compose.yml の内容

使用する Docker イメージは1つですが、設定などを簡単に行えるようにするため、docker-compose を使用します。
結果的に作成した docker-compose.yml は以下になりました。

version: '3.5'
services:
  gitlab:
    container_name: gitlab
    image: gitlab/gitlab-ce
    volumes:
      - etc:/etc/gitlab
      - log:/var/log/gitlab
      - opt:/var/opt/gitlab
    ports:
      - "80:80"
      - "10443:443"
      - "10022:22"
    restart: unless-stopped
    hostname: 'example.com'
    environment:
      #http_proxy: http://xxx.xxx.xxx.xxx
      #https_proxy: http://xxx.xxx.xxx.xxx
      #no_proxy: xxx.xxx.xxx.xxx
      GITLAB_OMNIBUS_CONFIG: |
        #gitlab_rails['gitlab_host'] = 'xxx.xxx.xxx.xxx'
        # ログ(肥大化しないようにローテーションさせる)
        logging['logrotate_frequency'] = "weekly"
        logging['logrotate_rotate'] = 10
        logging['logrotate_compress'] = "compress"
        logging['logrotate_method'] = "copytruncate"
        # アバター(何故か失敗するので無効化しておく)
        gitlab_rails['gravatar_enabled'] = false
        # タイムゾーン
        gitlab_rails['time_zone'] = 'Asia/Tokyo'
        # SSH(22番ポートから変更している場合)
        gitlab_rails['gitlab_ssh_host'] = 'example.com:10022'
        # 送信元メールと返信先メール(適当)
        gitlab_rails['gitlab_email_from'] = 'system-gitlab@example.com'
        gitlab_rails['gitlab_email_reply_to'] = 'noreply@example.com'
        # バックアップファイルの保存期間 (1week)
        gitlab_rails['backup_keep_time'] = 86400
        # メール設定 (共通)
        gitlab_rails['smtp_enable'] = true
        gitlab_rails['smtp_port'] = 25
        gitlab_rails['smtp_tls'] = false
        gitlab_rails['smtp_enable_starttls_auto'] = false
        # メール設定 (Cybermail)
        #gitlab_rails['smtp_domain'] = "xxx.xxx.xxx.xxx"
        #gitlab_rails['smtp_address'] = "xxx.xxx.xxx.xxx"
        # Pages
        pages_external_url "http://example.com"
        gitlab_pages['enable'] = true
        gitlab_pages['dir'] = "/var/opt/gitlab/gitlab-pages"
        gitlab_pages['log_directory'] = "/var/log/gitlab/gitlab-pages"
        # LDAP認証
        gitlab_rails['ldap_enabled'] = false
        gitlab_rails['ldap_servers'] = YAML.load <<-'EOS' # remember to close thise this block with 'EOS' below
          main: # 'main' is the GitLab 'provider ID' of this LDAP server
            label: 'LDAP'
            host: 'xxx.xxx.xxx.xxx' # プロキシサーバーのIPアドレス
            port: 389 # プロキシサーバーのポート
            uid: 'sAMAccountName'
            method: 'plain' # "tls" or "ssl" or "plain"
            bind_dn: 'hoge@domain.org'
            password: 'password'
            active_directory: true
            allow_username_or_email_login: false
            base: 'dc=domain,dc=org'
        EOS
volumes:
  etc:
  log:
  opt:

解決していないこと

Gravatar からのアイコン取得が無効にならない

gitlab_rails['gravatar_enabled'] = false を指定しているにも関わらず、Gravatar からアイコンを取得してしまいます。
仕方ないので、GitLab に root でログインし、Admin Area から無効に設定しました。

名前解決できない

プロジェクト作成時に他のリポジトリからインポートしようとすると、名前解決できずに失敗してしまいます。
DNS の設定がきちんとできていないのかよくわかりませんが、解決できていません。

はまったところ

アバターの画像をアップロードしても反映されない

最初、ホスト側のポートを 10080 にし、コンテナ側のポートは 80 にしていたのですが、画像のパスを見てみると、URLがコンテナ側のポートになっていました。
解決方法がわからなかったので、コンテナ側のポートも 10080 にし、ホスト側と同じポートにすることで解決させました。

SSH で接続できない

上記で http のポートを合わせたので、SSH のポートもホスト側とコンテナ側で 10022 に合わせてみたのですが、接続できなかったので、ホスト側のポートは 10022 にし、コンテナ側は 22 にしました。
これで一応接続できるようにはなったのですが、GitLab に表示される Clone の URL が正しく表示されませんでした。
これは一応、以下の設定を追加することで正しく表示されるようになりました。

gitlab_rails['gitlab_ssh_host'] = 'xxx.xxx.xxx.xxx:10022'

参考URL