ネットで調べてみると、sameersbn/gitlab を使用しているものが多いですが、GitLab には公式の Docker イメージがあるみたいなので、それを使用します。
英語ですが、公式のドキュメントもあります。
Docker は触り始めたばかりの初心者ですが、とりあえず動作するところまではいきました。
環境
ホスト OS は CentOS7 です。
会社の自チーム内のLANに環境を構築するため、プロキシ環境下で動作するように設定します。
メール通知やLDAP認証も全てプロキシ経由で行っています。
docker-compose.yml の内容
使用する Docker イメージは1つですが、設定などを簡単に行えるようにするため、docker-compose を使用します。
結果的に作成した docker-compose.yml は以下になりました。
gitlab:
image: gitlab/gitlab-ce
volumes:
- /srv/docker/gitlab/data:/var/opt/gitlab
- /srv/docker/gitlab/config:/etc/gitlab
- /srv/docker/gitlab/logs:/var/log/gitlab
ports:
- "10080:10080"
- "10443:443"
- "10022:22"
restart: always
hostname: 'xxx.xxx.xxx.xxx' # ホストPCのローカルアドレス
dns:
- xxx.xxx.xxx.xxx # 後述しますが、これだと解決していないです。
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['gravatar_enabled'] = false
gitlab_rails['time_zone'] = 'Asia/Tokyo'
gitlab_rails['gitlab_ssh_host'] = 'xxx.xxx.xxx.xxx:10022'
gitlab_rails['gitlab_email_from'] = 'gitlab@example.com'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@example.com'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "xxx.xxx.xxx.xxx" # プロキシサーバーのIPアドレス
gitlab_rails['smtp_port'] = 8025 # プロキシサーバーのポート
gitlab_rails['smtp_domain'] = "xxx.xxx.xxx.xxx" # プロキシサーバーのIPアドレス
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['ldap_enabled'] = true
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
解決していないこと
Gravatar からのアイコン取得が無効にならない
gitlab_rails['gravatar_enabled'] = false
を指定しているにも関わらず、Gravatar からアイコンを取得してしまいます。
仕方ないので、GitLab に root でログインし、Admin Area から無効に設定しました。
名前解決できない
プロジェクト作成時に他のリポジトリからインポートしようとすると、名前解決できずに失敗してしまいます。
DNS の設定がきちんとできていないのかよくわかりませんが、解決できていません。
おそらくこれのせいで Push をフックして Jenkins に通知することもできていません。
何かわかる方がいらっしゃれば教えていただきたいです。
はまったところ
アバターの画像をアップロードしても反映されない
最初、ホスト側のポートを 10080 にし、コンテナ側のポートは 80 にしていたのですが、画像のパスを見てみると、URLがコンテナ側のポートになっていました。
解決方法がわからなかったので、コンテナ側のポートも 10080 にし、ホスト側と同じポートにすることで解決させました。
SSH で接続できない
上記で http のポートを合わせたので、SSH のポートもホスト側とコンテナ側で 10022 に合わせてみたのですが、接続できなかったので、ホスト側のポートは 10022 にし、コンテナ側は 22 にしました。
これで一応接続できるようにはなったのですが、GitLab に表示される Clone の URL が正しく表示されませんでした。
これは一応、以下の設定を追加することで正しく表示されるようになりました。
gitlab_rails['gitlab_ssh_host'] = 'xxx.xxx.xxx.xxx:10022'
参考URL
以下のサイトを参考にさせていただきました。