GitLabをDockerで構築する方法

GitLabをDockerで構築する方法を説明します。

前提条件

次のソフトウェアがインストールされていることを前提とします。

  • Docker

GitLabのインストール

次の1コマンドで構築できます。コマンドは適宜修正してください。

  • GitLabのバージョンは最新のものにする
  • 環境変数GITLAB_HOMEにホスト側のGitLabのデータを格納するパスを指定する
  • ホスト側のポート番号は状況に合わせて変更する
# データを保存するパスを設定
export GITLAB_HOME=$HOME/gitlab
# GitLabを起動
sudo docker run \
  --detach \
  --name gitlab \
  --hostname gitlab.example.com \
  --publish 8443:443 --publish 8080:80 --publish 2022:22 \
  --env GITLAB_OMNIBUS_CONFIG="
    gitlab_rails['time_zone'] = 'Asia/Tokyo';
  " \
  --volume "$GITLAB_HOME/config:/etc/gitlab" \
  --volume "$GITLAB_HOME/logs:/var/log/gitlab" \
  --volume "$GITLAB_HOME/data:/var/opt/gitlab" \
  --log-opt "max-size=1g" \
  --restart always \
  gitlab/gitlab-ce:13.6.3-ce.0

起動するまで数分から数十分程度待ちます。 http://localhost:8080/にアクセスしてGitLabが起動したことを確認してください。 rootユーザのパスワード設定画面が表示されます。

起動しない場合は、次のコマンドでログを確認してください。

docker logs -f gitlab

GitLabのバージョンアップ

次の手順でコンテナを削除し、新しいバージョンのコンテナを起動します。

コンテナを削除します(念のため削除前にバックアップを実行します)。

sudo docker exec -t gitlab gitlab-backup create
sudo docker stop gitlab
sudo docker rm gitlab

構築時のコマンドのバージョン部分を更新し、新規コンテナを起動します。

正常に起動できたことを確認し、バージョンアップ完了です。

GitLabのバックアップ

次のコマンドでバックアップします。 保存先は$GITLAB_HOME/data/backupsディレクトリです。

# GitLab 12.2以降の場合
docker exec -t gitlab gitlab-backup create
# GitLab 12.1以前の場合
docker exec -t gitlab gitlab-rake gitlab:backup:create

cronの設定サンプルは次の通りです。

0 0 * * * ec2-user docker exec -t gitlab gitlab-rake gitlab:backup:create CRON=1

GitLabのリストア

次の手順でリストアします。バックアップファイルを用いてリストアします。

DBに接続するプロセスを停止します。

docker exec -it gitlab gitlab-ctl stop unicorn
docker exec -it gitlab gitlab-ctl stop puma
docker exec -it gitlab gitlab-ctl stop sidekiq

プロセスが停止されたことを確認します。

docker exec -it gitlab gitlab-ctl status

バックアップをリストアします。

環境変数BACKUPにリストア対象のバックアップファイルを指定します。 BACKUPはファイル末尾の_gitlab_backup.tarを除いた名前を指定します。

  • パス例:$GITLAB_HOME/data/backups/1234567890_2021_01_01_13.6.3_gitlab_backup.tar
  • BACKUP:1234567890_2021_01_01_13.6.3
docker exec -it gitlab gitlab-backup restore BACKUP=1234567890_2021_01_01_13.6.3

コンテナを再起動します。

docker restart gitlab

GitLabが正常に動作していることを確認します。

docker exec -it gitlab gitlab-rake gitlab:check SANITIZE=true

AWSによるHTTPS・SSL/TLS・独自ドメインの対応

AWSのALB・ACM・Route53を用いて、独自ドメインと証明書の取得し、HTTPS通信を終端する場合、 環境変数GITLAB_OMNIBUS_CONFIGに次のように設定します。

    gitlab_rails['time_zone'] = 'Asia/Tokyo';

    # プロトコルやドメインを指定
    external_url 'https://gitlab.example.com';

    # HTTPSをALBで終端し、GitLabへはHTTPで通信する
    nginx['listen_port'] = 80;
    nginx['listen_https'] = false;

    # バックアップをS3に保存する
    gitlab_rails['backup_keep_time'] = 604800;
    gitlab_rails['backup_upload_connection'] = {
      'provider' => 'AWS',
      'region' => 'ap-northeast-1',
      'aws_access_key_id' => 'change me',
      'aws_secret_access_key' => 'change me'
    };
    gitlab_rails['backup_upload_remote_directory'] = 'your bucket name';

参考リンク

https://docs.gitlab.com/omnibus/docker/