はじめに
様々なソフトウェアのソースコードや資料をホストするサービスのひとつにGitLab があります。
この記事では、Community Edition(無料版)について触れ、オンプレでホスティングする際に一般的に検討すべき内容や、詰まりそうな点に着目してまとめておこうと思います。
考えられる懸念事項
オンプレでホスティングするにあたって、少なくとも次の内容は事前に検討あるいは調査する必要があると思います。
- 想定ユーザー数
- CI/CDの利用状況
- Runnerの同時最高実行数
- Runnerに割り当てるメモリの最大値
- バージョンアップへの追従作業や、それに付随する調査やリハーサルにどの程度時間がかかるか
- 社内ネットワークやVPNの設定
- 既存認証基盤(Active Directoryなど)との統合方法
事前の調査を踏まえてようやく、実際に使うサーバーの選定や運用方法の策定などができるようになると思います。
GitLabをオンプレでホスティングしてみる
機微情報を載せず、あくまでホスティングを試すという趣旨で書きます。
社内でホスティングを試すという前提であれば、HTTPS化もせず、以下のような構成でホスティングしてみても良いのかなと思います(組織ごとのポリシーでこの辺りは変わると思います)。
[社内LAN]
│ HTTP (社内のみ、外部非公開)
▼
[Ubuntu Server]
├─ Docker Engine
│ └─ GitLab CE v19 コンテナ
└─ GitLab Runner コンテナ
必要に応じてIPアドレスの固定化の対応をします。また、社内DNSがある場合は以下のようなAレコードを用意しておけば、特定のドメインでの公開もできると思います。
gitlab.hoge-corp.internal → 123.456.78.90
必要なPCスペックの検討
単一の機器に立てる場合、以下のような要件があります。最新の要件は公式ドキュメントを参考にしてください。
| CPU | メモリ | SSD容量 |
|---|---|---|
| 8 vCPU~ | 16GB~ | プロジェクト数依存 |
アプリケーションとデータベースだけで最低52GB, あとは各プロジェクトの規模に応じてサイズが大きくなります。また、次のような注釈があるのでHDDの利用はお勧めしません。
最高のパフォーマンスを得るには、SSDベースのストレージを使用してください。これは、I/O負荷の高いGitalyにとって特に重要です。パフォーマンスが不安定なため、バースト可能なディスクタイプは推奨されません。
コンテナの設定
GitLabを立ち上げる際のdocker-compose.ymlは以下のようにする必要があります。
services:
gitlab:
image: gitlab/gitlab-ce:19.3.0-ce.0
container_name: 分かりやすいGitLabのコンテナ名
hostname: gitlab.hoge-corp.internal
restart: unless-stopped
shm_size: '256m'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'ホストする際に利用するIPアドレス、ポート番号など'
nginx['listen_port'] = 公開したいポート番号
ports:
- "8929:80" # http://localhost:8929で公開したい場合
- "2224:22"
volumes:
- ./config:/etc/gitlab
- ./logs:/var/log/gitlab
- ./data:/var/opt/gitlab
gitlab-runner: # Runnerも必要な場合は設定が必要
image: gitlab/gitlab-runner:v19.3.0
container_name: 分かりやすいRunnerの名前
restart: unless-stopped
depends_on:
- gitlab
volumes:
- ./runner-config:/etc/gitlab-runner
以下、設定値についての注意点です。
- hostname: gitlab.local
- コンテナ内部のホスト名
- GitLabのexternal_urlやSSH clone URLに使われるので、実際のアクセス先と揃えておく必要がある項目
- restart: unless-stopped
- コンテナが落ちたら自動で再起動
- ただし手動でdocker stopした場合は再起動しない、という挙動をする
このような形でYAMLファイルを用意し、docker compose -f docker-compose.yml up -dのようなコマンドでコンテナを立ち上げることができます。
立ち上げた後はhttp://localhost:8929のようなURLで、ホストしているPC上で動作確認できます。
例としてUbuntu PC上にサーバーを立てた場合を考えますが、同一ネットワーク内の他のPCからアクセスする際は、以下の通りファイアウォールを一時的に許可してみましょう。
他PCからの通信をホストPCがブロックしないよう、使用するポートを開放します。
sudo ufw allow 8929/tcp
Runnerの登録
Runnerも動かしてみたいという場合は、以下のようにしてRunnerを登録してください。
TOKEN=$(sudo docker exec gitlab-replica gitlab-rails runner "puts Gitlab::CurrentSettings.runners_registration_token")
sudo docker exec gitlab-runner gitlab-runner register \
--non-interactive \
--url "http://gitlab-replica" \
--registration-token "$TOKEN" \
--executor "shell" \
--description "gitlab-replica-runner"
上記コマンドではExecutorとしてshellを使用します。ジョブは Runner が動いている環境上で直接コマンドとして実行されます。
終わりに
HTTPS化なしかつ独自ドメインの利用なしというシンプルな条件でのGitLabのホスティングについてまとめました。
あまり詳しくないので書いていませんが、本来はTLSによる通信の暗号化をしたり、その他セキュリティ面で考慮すべき点があると思いますが今回は記載していません。
また、ホストしているマシンが弱い場合は各コンテナのメモリ制限や、Runnerの同時実行数の制限などが必要になると思います。必要に応じて追加してください。
参考