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'