GitLab
docker

GitLab サーバの構築方法 2018

最近の GitLab は Docker で動かせる & Let's Encrypt による証明書自動生成をサポートするようになり、昔と比べるとサーバ構築がかなり簡単になったので、あらためてイマドキの GitLab サーバの構築方法についてまとめる。

Docker で GitLab を動かす方法は公式ドキュメントにも詳しく書かれている。1

環境

今回は以下のような環境を想定する。

  • Docker が動く Unix サーバ
  • sshd のポートがデフォルトの 22 から変更されている (GitLab がポート 22 を使うので)
  • (Let's Encrypt 機能で SSL 証明書を取得する場合)
    • 使用するドメイン (今回は例として gitlab.example.com) の A レコードがあらかじめ設定されている
    • ポート 80 がインターネット全体に公開されている (ドメイン認証のため)

Docker のインストール

何らかの方法で Docker をインストールする。

Ubuntu 18.04 LTS であれば、標準リポジトリの apt でもそれなりに新しいバージョンの Docker が入るので楽。

$ sudo apt install docker.io

GitLab 用ディレクトリの作成

ホストに /gitlab というディレクトリといくつかのサブディレクトリを作り、これらをコンテナにマウントすることにする。

$ sudo mkdir -p /gitlab/{config,data,logs}

設定ファイルの記述

あらかじめ設定ファイルを記述して配置しておくことでそれを読み込んでくれる。

別に設定ファイルは無くても起動する。(自動生成される)

/gitlab/config/gitlab.rb
# URL の設定
external_url 'https://gitlab.example.com'

# タイムゾーンの設定
gitlab_rails['time_zone'] = 'Asia/Tokyo'

# SSL 証明書の設定
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['admin@example.com']

# G Suite アカウントでログインできるようにする設定
gitlab_rails['omniauth_enabled'] = true
gitlab_rails['omniauth_allow_single_sign_on'] = ['google_oauth2']
gitlab_rails['omniauth_block_auto_created_users'] = false
gitlab_rails['omniauth_providers'] = [
  {
    "name" => "google_oauth2",
    "app_id" => "YOUR_APP_ID",
    "app_secret" => "YOUR_APP_SECRET",
    "args" => { "access_type" => "offline", "approval_prompt" => "" },
    "hd" => "example.com", # ドメインを制限する場合
  }
]

external_urlletsencrypt['enable'] = true を設定するだけで、あとは起動時に Let's Encrypt から SSL 証明書を発行してもらって配置するところまで自動でやってくれる。便利。2

コンテナを起動する

GitLab の公式 Docker イメージ3を使ってコンテナを起動する。

$ docker run --rm -d --name gitlab \
        -p 80:80 -p 443:443 -p 22:22 \
        -v /gitlab/config:/etc/gitlab \
        -v /gitlab/logs:/var/log/gitlab \
        -v /gitlab/data:/var/opt/gitlab \
        -h gitlab.example.com \
        gitlab/gitlab-ce

起動時に reconfigure が実行されるので少し時間がかかる。

動作確認

設定したドメイン (今回の例では https://gitlab.example.com/) にアクセスしたら動いているはず。

簡単!