Dockerで野良GitLab (Community Edition)を動かす

いろいろあって、Docker を使って野良 GitLab (Community Edition) を稼働させる手順を調べたので備忘録。

環境

  • OS: Ubuntu 18.04 (Dockerが動けば OS は基本的に何でもよい)
  • Docker 19.03.5
  • Docker イメージ
    • gitlab/gitlab-ce 12.4.5-ce.0

手順

非常に簡単で、大きく以下の 2 ステップで起動できる。

  1. Docker をインストール
  2. GitLab のコンテナーを起動
  3. root ユーザーのパスワードを登録

ここで使うのは「Omnibus package」という全部入りのインストーラーなので、一つのコンテナーに NGINX や PostgreSQL などが共存している。連携設定なども済んでいるため非常に簡単に稼働させられる一方で、マシンリソース的に負荷量が大きくなるため利用人数が増えてきたら、ちゃんとインストールした環境を用意した方が良いだろう。

1. Docker をインストール

Ubuntu の場合は以下の 5 ステップで完了する。

# 古い Docker が入っている場合はアンインストールしておく
sudo apt-get remove docker docker-engine docker.io containerd runc

# 前提となるパッケージをインストール
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

# Docker オフィシャル GPG キーを登録
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# Docker のインストール・更新に使う apt レポジトリを登録
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# Docker CE をインストール
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

その他の OS の場合は以下オフィシャルドキュメントを参照されたい。

docs.docker.com

(2019-12-09 追記)なお CentOS 7 ではオフィシャルドキュメント記載の方法でインストールすると OS 起動時に自動起動しないため、自動起動させるためには systemctl enable docker を追加で実行する必要があった。

2. GitLab のコンテナーを起動

Docker 環境が整ったなら、GitLab を起動する。コマンドラインは次のような感じ:

sudo docker run --detach \
--hostname gitlab.example.com \
--publish 80:80 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:12.4.5-ce.0

いくつかポイントを。

  • --detach--restart always を指定しているので、Docker ホストの Linux が起動するたびに GitLab のコンテナーも自動起動する
  • ホスト名として gitlab.example.com を仮置きしているが、ここは Docker ホストになっている Linux 機のホスト名(または IP アドレス)を指定する
  • コンテナーの 80/tcp をホストの 80/tcp にマッピングしているため、そのホストマシンに Web ブラウザで HTTP アクセスすれば GitLab を使える
  • GitLab で使う全データは Docker ホストの /srv/gitlab に記録される
    • Omnibus package に含まれる NGINX や PostgreSQL などの設定・データも含む
    • ここを丸ごとコピーすればバックアップになる

なお、さすがに複数のサービスを起動していくこともあり、起動に時間がかかる。

3. root ユーザーのパスワードを登録

無事に起動処理が終わった後にブラウザでアクセスすると、唯一作成されている GitLab の管理者ユーザー「root」用のパスワードを設定する画面になる。ここでパスワードを設定すると、通常のログイン画面に遷移するので、そのままユーザー名に root を指定して、先に設定したパスワードを入力してログインする。後は、実際に使う利用者など運用上必要な設定を Web 上で行っていく。なお

  • 左上の "More" から "Admin Area" とたどると、サービス全体の設定画面に入れる。
  • SMTP (Email) 設定をしないつもりなら、ユーザー追加後にパスワードをテキトーな値に強制設定してやる
    • "Admin Area" → "Overview" → "Users" → そのユーザー、とたどればパスワード変更画面にアクセスできる
    • ここで強制設定したパスワードで利用者がログインすると、すぐに別のパスワードに変更するよう求められるセキュアな仕組みになっている
    • メール設定ができているなら、利用者ごとにログイン画面の "Forgot your password?" をクリックしてもらい、勝手に再発行してもらえばよい(はず)

これぐらいの情報を調べておけば、Docker を使って野良 GitLab サーバーをたてるには十分だろうか。実際に稼働させることになったら、経験を積んで、もう少し実のある情報を追記していきたいところ。