docker-compose.yml を使った GitLab CE の構築ガイド

システム開発

GitLab CE を Docker Compose で手軽に構築・運用する方法を、具体的な設定例や運用のコツとともに徹底解説します。この記事では、環境の再現性を保ちつつ、設定ファイル・データ・ログの永続化や初回ログインの手順、さらにバックアップや SSL 設定によるセキュアな運用方法まで、幅広い内容を網羅。Docker のシンプルな管理手法を活用し、エンタープライズレベルの GitLab 環境をすぐにでも試せる魅力的なガイドです。

1. docker-compose.yml の概要

GitLab CE(Community Edition)は、リポジトリ管理や CI/CD 機能を備えたオープンソースの Git サーバーです。Docker Compose を利用することで、GitLab CE を簡単にデプロイし、管理することが可能になります。

Docker Compose を使用するメリット:

  • 簡単なセットアップ:YAML ファイルに設定を記述するだけで、複雑な環境構築が不要。
  • 環境の再現性:同じ docker-compose.yml を使えば、どの環境でも同じ設定で GitLab をデプロイできる。
  • 永続化とスケーラビリティ:ボリューム設定により、データを保持しつつコンテナを再起動可能。

このガイドでは、Docker Compose を使って GitLab CE をセットアップする方法を詳しく解説します。


2. docker-compose.yml の全体構成

GitLab CE を Docker コンテナで動作させるために、以下の docker-compose.yml を使用します。この設定では、GitLab CE の最新バージョンをデプロイし、データを永続化しながら運用できるようになっています。

version: '3'
services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    restart: always
    hostname: 'gitlab.local'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url '<http://localhost>'
    ports:
      - "80:80"
      - "443:443"
      - "22:22"
    volumes:
      - "./config:/etc/gitlab"
      - "./logs:/var/log/gitlab"
      - "./data:/var/opt/gitlab"
    shm_size: '256m'

この構成のポイント:

  • GitLab CE の公式 Docker イメージ (gitlab/gitlab-ce:latest) を使用
  • コンテナが停止しても自動再起動 するように設定 (restart: always)
  • ホスト名を gitlab.local に設定
  • ポートマッピング (80:80, 443:443, 22:22) により、ホストマシンのポートとコンテナ内のポートを接続
  • ボリューム設定 により、GitLab の設定・ログ・データを永続化
  • 共有メモリサイズを 256MB に拡張 (shm_size: '256m') し、安定動作を確保

3. 各設定項目の詳細解説

このセクションでは、docker-compose.yml の各設定項目の意味を詳しく解説します。

version: '3' – Docker Compose のバージョン指定

Docker Compose の構文バージョンを指定します。

  • version: '3'比較的新しいバージョン で、広く使用されています。
  • バージョンによって利用できる機能が異なりますが、GitLab CE のデプロイには 3 で十分です。

services: – コンテナサービスの定義

複数のコンテナを一括で管理するための設定です。

  • gitlab: は、GitLab CE 用のコンテナのサービス名です。
  • 必要に応じて redis:postgresql: などを追加し、マルチコンテナ構成にすることも可能です。

image: gitlab/gitlab-ce:latest – 使用する Docker イメージ

GitLab CE の公式 Docker イメージを指定します。

  • latest タグを使用すると、最新バージョンが取得されます。
  • バージョンを固定したい場合は、例えば gitlab/gitlab-ce:16.6.0 のように指定可能です。

restart: always – 自動再起動の設定

コンテナが停止した場合の動作を定義します。

  • always にすると、コンテナが異常終了しても 自動的に再起動 されます。
  • サーバーを再起動した場合でも、GitLab のコンテナが自動で立ち上がります。

hostname: 'gitlab.local' – コンテナのホスト名

コンテナ内でのホスト名を gitlab.local に設定します。

  • external_url の設定と組み合わせることで、独自ドメインを利用できます。
  • docker-compose.yml 内でホスト名を設定することで、DNS や証明書の管理が容易になります。

environment: – 環境変数の設定

GitLab CE の環境設定を行います。

environment:
  GITLAB_OMNIBUS_CONFIG: |
    external_url '<http://localhost>'
  • external_url '<http://localhost>'
    • GitLab にアクセスするための URL を指定します。
    • http://localhost の場合、ローカル環境から http://localhost でアクセスできます。
    • https://gitlab.example.com のように変更すれば、独自ドメインでも利用可能。

ports: – ポートマッピングの設定

ホスト(ローカルマシン)とコンテナのポートを関連付けます。

ports:
  - "80:80"
  - "443:443"
  - "22:22"
ホストのポート コンテナのポート 用途
80:80 80 HTTP 接続
443:443 443 HTTPS 接続
22:22 22 SSH 接続(Git リポジトリのクローン用)

ポートを変更したい場合は、以下のように設定を変えることも可能です。

ports:
  - "8080:80"
  - "8443:443"
  - "10022:22"

この場合、http://localhost:8080 でアクセスできます。

volumes: – データの永続化設定

GitLab のデータをコンテナ外に保存するための設定です。

volumes:
  - "./config:/etc/gitlab"
  - "./logs:/var/log/gitlab"
  - "./data:/var/opt/gitlab"
ホスト側のディレクトリ コンテナ内のディレクトリ 保存されるデータ
./config /etc/gitlab GitLab の設定ファイル
./logs /var/log/gitlab ログファイル
./data /var/opt/gitlab リポジトリやデータ

この設定により、コンテナを削除してもデータが失われません。

shm_size: '256m' – 共有メモリサイズの設定

GitLab は一部の処理で共有メモリ(/dev/shm)を使用するため、デフォルト(64MB)よりも増やします。

  • shm_size: '256m' にすることで、より安定した動作を確保できます。
  • メモリが十分ある場合は、512MB (shm_size: '512m') 以上に増やすことも可能です。

4. GitLab の初回ログイン情報

GitLab を初めて起動すると、管理者ユーザー (root) のパスワードを設定する必要があります。

デフォルトでは、GitLab の初回パスワードは コンテナ内のファイルに自動生成 されます。

初回ログイン時の root パスワード確認方法

  1. GitLab コンテナの ID を取得
    docker ps
    

    CONTAINER ID のカラムに表示される GitLab のコンテナ ID を確認します。

  2. コンテナ内の初回パスワードを確認
    docker exec -it <コンテナID> cat /etc/gitlab/initial_root_password
    

    例:

    docker exec -it 123abc456 cat /etc/gitlab/initial_root_password
    

    出力例:

    # WARNING: This value will be removed after the first reconfigure!
    Password: Xyz123SecurePassword!
    
  3. ブラウザで GitLab にアクセスし、ログイン
    • http://localhost または設定した external_url にアクセス
    • ユーザー名root
    • パスワード:取得したパスワード (Xyz123SecurePassword!) を入力
  4. 初回ログイン後、パスワードを変更
    • セキュリティのため、SettingsPassword からパスワードを変更してください。

パスワードを忘れた場合のリセット方法

もし initial_root_password の値が削除された後にパスワードを忘れてしまった場合、以下のコマンドでリセットできます。

docker exec -it <コンテナID> gitlab-rails console -e production

次に、以下のコマンドを実行し、新しいパスワードを設定します。

user = User.find_by(username: 'root')
user.password = 'NewSecurePassword123'
user.password_confirmation = 'NewSecurePassword123'
user.save!

5. GitLab データのバックアップと復元

GitLab CE を運用するうえで、データのバックアップは重要 です。誤操作や障害に備えて、定期的にバックアップを取得し、必要に応じて復元できるようにしておきましょう。

バックアップの作成方法

  1. GitLab コンテナの ID を確認
    docker ps
    

    CONTAINER ID をメモしておきます。

  2. バックアップを作成以下のコマンドを実行すると、GitLab の設定、リポジトリ、データベースなどをバックアップできます。
    docker exec -t <コンテナID> gitlab-backup create
    

    例:

    docker exec -t 123abc456 gitlab-backup create
    

    実行すると、/var/opt/gitlab/backups/.tar ファイルが作成されます。

  3. ホスト側にバックアップファイルをコピー
    docker cp <コンテナID>:/var/opt/gitlab/backups ./
    

    これでホストマシンにバックアップデータが保存されます。

バックアップデータの保存場所

GitLab のバックアップファイルは、デフォルトで次のディレクトリに保存されます。

データの種類 コンテナ内の保存場所 ホスト側の保存場所 (volumes 設定)
リポジトリやデータ /var/opt/gitlab ./data
設定ファイル /etc/gitlab ./config
ログファイル /var/log/gitlab ./logs
バックアップデータ /var/opt/gitlab/backups/ ./data/backups/

バックアップの復元方法

  1. GitLab のコンテナを停止
    docker-compose down
    
  2. バックアップファイルを /var/opt/gitlab/backups/ にコピーもしホスト側にバックアップファイルがある場合、以下のようにコンテナ内へコピーできます。
    docker cp ./data/backups/xxxxx_gitlab_backup.tar <コンテナID>:/var/opt/gitlab/backups/
    

    xxxxx_gitlab_backup.tar はバックアップファイルの名前に置き換えてください。

  3. GitLab を復元モードで起動
    docker-compose up -d
    
  4. バックアップを復元
    docker exec -it <コンテナID> gitlab-backup restore BACKUP=xxxxx
    

    xxxxx はバックアップファイル名の前方部分です(例:1703010123_2025_02_28_10.0.0)。

  5. 権限の修正
    docker exec -it <コンテナID> chown -R git:git /var/opt/gitlab/backups
    
  6. GitLab を再起動
    docker restart <コンテナID>
    

バックアップの自動化(推奨)

定期的なバックアップを自動化するには、cron を利用します。

  1. **cron ジョブを作成(ホストマシン上)**例:毎日深夜 3 時にバックアップを取得する場合これで、毎日自動でバックアップが作成されます。
    crontab -e
    
    0 3 * * * docker exec -t <コンテナID> gitlab-backup create
    

6. Let’s Encrypt を使った SSL 設定

GitLab を安全に運用するために、Let’s Encrypt を利用した無料の SSL 証明書を設定 する方法を解説します。

1. external_url を HTTPS に設定

docker-compose.ymlGITLAB_OMNIBUS_CONFIG で、external_urlhttps:// で始まる URL に変更します。

environment:
  GITLAB_OMNIBUS_CONFIG: |
    external_url '<https://gitlab.example.com>'
  • gitlab.example.com の部分は、実際に使用するドメインに変更してください。
  • このドメインは インターネットからアクセス可能 である必要があります。

2. Let’s Encrypt の自動証明書発行を有効化

GitLab には Let’s Encrypt を使って自動で SSL 証明書を取得・更新する機能 があります。

これを有効化するには、gitlab.rb の設定を変更する必要があります。

まず、GitLab コンテナ内に入ります。

docker exec -it <コンテナID> /bin/bash

次に、設定ファイルを編集します。

nano /etc/gitlab/gitlab.rb

以下の行を探して、有効化(true に設定)します。

letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['your-email@example.com']
letsencrypt['auto_renew'] = true
letsencrypt['auto_renew_hour'] = 3
letsencrypt['auto_renew_day_of_month'] = "*/7"

設定の意味

  • letsencrypt['enable'] = true → Let’s Encrypt を有効化
  • letsencrypt['contact_emails'] = ['your-email@example.com'] → 証明書の更新に関する通知を受け取るメールアドレス
  • letsencrypt['auto_renew'] = true → 証明書の自動更新を有効化
  • letsencrypt['auto_renew_hour'] = 3 → 毎日 午前3時 に更新を試みる
  • letsencrypt['auto_renew_day_of_month'] = "*/7"7日ごと に更新を試みる

3. 設定を適用して SSL 証明書を取得

  1. 設定を適用(GitLab の再構成)
    gitlab-ctl reconfigure
    
    • これにより、Let’s Encrypt の証明書が取得され、GitLab の設定が更新されます。
  2. GitLab を再起動
    gitlab-ctl restart
    

4. ファイアウォール設定の確認

Let’s Encrypt で SSL 証明書を取得するには、以下の ポートが開放 されている必要があります。

プロトコル ポート 説明
HTTP 80 証明書発行時に必要
HTTPS 443 GitLab へのアクセス用

もしサーバーで ufw を使っている場合、以下のコマンドでポートを開放できます。

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

5. 証明書の更新を手動で実行する場合

Let’s Encrypt の証明書は 90日ごとに有効期限が切れる ため、自動更新がうまく動作しない場合は、手動で更新できます。

gitlab-ctl renew-le-certs

更新後、GitLab を再起動してください。

gitlab-ctl restart

6. 証明書のトラブルシューティング

証明書が取得できない場合

Let’s Encrypt の証明書が取得できない場合、まずログを確認します。

cat /var/log/gitlab/letsencrypt/letsencrypt.log

よくあるエラーと対策:

  • ポート 80 が開放されていないsudo ufw allow 80/tcp で開放
  • external_url のドメインが正しくないgitlab.example.com の設定を確認
  • DNS 設定が正しくないping gitlab.example.com でドメインが正しく解決されるか確認

7. docker-compose.yml の適用方法

ここでは、GitLab CE を Docker Compose を使って実際に起動し、動作を確認する方法を説明します。

1. docker-compose.yml の作成

まず、適当なディレクトリを作成し、そこで docker-compose.yml を作成します。

mkdir gitlab-docker
cd gitlab-docker
nano docker-compose.yml

そして、前章で説明した docker-compose.yml の内容を貼り付けて保存 (Ctrl + X → Y → Enter) してください。

2. GitLab コンテナの起動

作成した docker-compose.yml を適用し、GitLab コンテナを起動します。

docker-compose up -d

オプションの意味:

  • d(デタッチドモード) → バックグラウンドで実行

このコマンドを実行すると、GitLab の Docker イメージがダウンロードされ、コンテナが起動します。

3. GitLab コンテナの状態を確認

コンテナが正しく起動しているか確認します。

docker ps

以下のような出力が表示されれば、コンテナが正常に動作しています。

CONTAINER ID   IMAGE                      STATUS          PORTS
abc123456789   gitlab/gitlab-ce:latest    Up 2 minutes   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:22->22/tcp

もし STATUSRestarting と表示されている場合は、コンテナのログを確認してください。

docker logs -f <コンテナID>

4. GitLab にアクセス

  1. ブラウザを開く
    • http://localhost にアクセス(または external_url に設定した URL)。
    • Let’s Encrypt を設定した場合は https://gitlab.example.com でアクセス。
  2. 初回ログイン
    • ユーザー名root
    • パスワードdocker exec コマンドで確認(前章参照)

5. GitLab の設定を変更したい場合

docker-compose.yml を変更した後に適用するには、以下の手順を実行します。

  1. コンテナを停止
    docker-compose down
    
  2. 設定を変更(例:docker-compose.yml の編集)
  3. コンテナを再起動
    docker-compose up -d
    

変更が反映されたかどうかを docker ps で確認してください。

6. GitLab コンテナの停止・削除

GitLab を一時的に停止する場合は、以下のコマンドを使用します。

docker-compose stop

完全に削除したい場合は、以下のコマンドを実行します。

docker-compose down -v
  • v オプションをつけると、ボリュームも削除される ため、すべてのデータが消えます(注意!)。

8. ポート変更のカスタマイズ

デフォルトでは、GitLab は以下のポートを使用します。

ホストのポート コンテナのポート 用途
80:80 80 HTTP(Web インターフェース)
443:443 443 HTTPS(Web インターフェース)
22:22 22 SSH(Git 操作)

しかし、ホスト側でこれらのポートをすでに別のサービスが使用している場合 は、ポート番号を変更する必要があります。

1. docker-compose.yml のポート設定を変更する

たとえば、以下のようにポートを変更すると、

  • HTTP8080
  • HTTPS8443
  • SSH10022でアクセスできるようになります。
ports:
  - "8080:80"
  - "8443:443"
  - "10022:22"

2. GitLab の external_url を更新

ポートを変更した場合、external_url も変更が必要 です。

たとえば、HTTP ポートを 8080 に変更した場合、external_url を以下のように指定します。

environment:
  GITLAB_OMNIBUS_CONFIG: |
    external_url '<http://localhost:8080>'

HTTPS の場合(ポート 8443

environment:
  GITLAB_OMNIBUS_CONFIG: |
    external_url '<https://gitlab.example.com:8443>'

3. GitLab を再起動して変更を適用

設定を変更したら、GitLab のコンテナを再起動します。

docker-compose down
docker-compose up -d

起動後、ブラウザで http://localhost:8080(または https://gitlab.example.com:8443) にアクセスして動作確認を行います。

4. SSH での接続設定を変更

SSH のポート (22) を 10022 に変更した場合、Git 操作時の SSH 設定も変更する必要があります。

SSH で GitLab に接続

通常の SSH では、GitLab に git clone するときに以下のように記述します。

git clone git@gitlab.example.com:myrepo.git

しかし、ポートを 10022 に変更した場合、明示的にポートを指定する必要があります。

git clone ssh://git@gitlab.example.com:10022/myrepo.git

SSH 設定を変更して毎回ポート指定しなくて済むようにする

ホームディレクトリの ~/.ssh/config に以下の設定を追加します。

Host gitlab.example.com
  User git
  Port 10022

これにより、通常通り git clone git@gitlab.example.com:myrepo.git の形式でアクセスできるようになります。


9. まとめ

本記事では、Docker Compose を使用して GitLab CE を構築・運用する方法 について詳しく解説しました。

📌 GitLab コンテナの構築手順

  1. docker-compose.yml を作成
    • GitLab CE の公式 Docker イメージを使用
    • 設定ファイル、データ、ログを永続化
    • external_url の指定でアクセス URL を設定
  2. コンテナの起動と管理
    docker-compose up -d  # GitLab を起動
    docker ps  # コンテナの動作確認
    
    • http://localhost または external_url にアクセス
    • 初回ログイン時は root ユーザーのパスワードを取得
  3. バックアップと復元
    • GitLab のデータを定期的にバックアップ
    docker exec -t <コンテナID> gitlab-backup create
    
    • 復元時は gitlab-backup restore を実行
  4. Let’s Encrypt で SSL 設定
    • letsencrypt['enable'] = true で自動証明書発行
    • gitlab-ctl reconfigure で適用
  5. ポートのカスタマイズ
    • 80:808080:80 など、環境に合わせて変更
    • SSH ポート (22) を変更する場合は ~/.ssh/config を設定

🔹 GitLab 運用のポイント

永続化の設定を確認

  • 設定ファイル (./config)、データ (./data)、ログ (./logs) のマウントを適切に行う

バックアップを定期的に取得

  • cron を設定して、定期的にバックアップを自動取得する

SSL 設定でセキュアな環境を構築

  • Let's Encrypt を利用し、HTTPS を有効化
  • ファイアウォール設定 (80, 443) を確認

ポートの競合を避ける

  • docker-compose.ymlports を調整して、既存のサービスと衝突しないようにする

SSH での接続を簡単にする

  • ~/.ssh/config にカスタムポート設定を追加

🎯 こんな人におすすめの設定

💡 「手軽に GitLab を試したい!」

→ デフォルト設定で docker-compose up -d するだけ!

💡 「独自ドメイン & HTTPS で運用したい!」

external_url を変更し、Let’s Encrypt で証明書を取得

💡 「サーバー上で本番運用したい!」

永続化設定 + 自動バックアップ + SSH ポート変更 を導入

コメント

タイトルとURLをコピーしました