CentOS Stream 9にGitLab CEをインストール:独自のコード管理とCI/CD環境を構築する

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

クイックスタート – 5分でGitLabをインストール

新しく契約したCentOS Stream 9のVPSで、すぐに結果を確認したいですか?root権限で以下のコマンドを実行してください。各行の詳細については、後ほど説明します。

# システムのアップデートと依存パッケージのインストール
dnf update -y
dnf install -y curl policycoreutils-python-utils openssh-server perl

# GitLabリポジトリの追加
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash

# GitLabのインストール ('gitlab.example.com'を自身のIPまたはドメインに置き換えてください)
EXTERNAL_URL="http://gitlab.example.com" dnf install -y gitlab-ce

# ファイアウォールのポート開放
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload

コマンドの実行が完了したら、サービスが起動するまで約1分待ってから、ドメインにアクセスして結果を確認してください。

なぜGitLabの実行にCentOS Stream 9を選ぶのか?

以前は、CentOS 7が安定性の面で「王道」でした。しかし、Red Hatが戦略を変更して以来、私は徐々にシステムをCentOS Stream 9へ移行してきました。実際の運用経験から、このバージョンは新しいカーネルのおかげでI/O処理が非常に優れており、GitのPush/Pull操作が明らかにスムーズになっています。

GitLab CE(Community Edition)を自前で運用することは、絶対的な自由をもたらします。すべてのデータを手元で管理でき、リポジトリ数の制限や、GitHubのような月額数百ドルのユーザー費用を心配する必要もありません。高いセキュリティが求められるプロジェクトでは、GitLabをVPNの背後に隠すのが現在最も安全な方法です。

ハードウェア構成:RAMを節約してはいけない

1GB RAMのVPSにGitLabをインストールするのは「致命的な」間違いです。Ruby on RailsとSidekiqが膨大なリソースを消費するため、502エラーが頻発することになります。10〜20人程度のチームに推奨するスペックは以下の通りです:

  • RAM: 最小4GB(CI/CDをフリーズさせずに実行するには8GBを推奨)。
  • CPU: 2コア(クロックスピードの高いものを優先)。
  • ストレージ: 20GB以上の空き容量(複数人での同時コミット時のボトルネックを避けるため、SSD/NVMeを推奨)。
  • OS: CentOS Stream 9 x86_64 クリーンインストール。

展開手順の詳細

ステップ1:環境の準備

GitLabには、SSH管理や通知メール送信のためのツールがいくつか必要です。CentOS Stream 9では、パッケージマネージャーのdnfを使用して簡単にインストールできます。

dnf install -y curl policycoreutils-python-utils openssh-server perl

次に、GitLabの公式リポジトリ設定スクリプトをダウンロードします。このスクリプトはOSを自動的に認識し、必要なダウンロードソースをシステムに追加します。

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash

ステップ2:インストールとURLの設定

インストール時に、EXTERNAL_URL変数をあらかじめ宣言しておくことをお勧めします。これはWebアクセスに使用するアドレスです。ドメインをまだ設定していない場合は、サーバーのIPアドレスを一時的に入力してください。

EXTERNAL_URL="http://192.168.1.100" dnf install -y gitlab-ce

このプロセスには通常3〜5分かかります。GitLabは自動的にgitlab-ctl reconfigureを実行し、PostgreSQL、Redis、Nginxをパッケージとして一括インストール・設定します。

FirewalldとSELinuxによるサーバーのセキュリティ保護

トラブルを避けるためにFirewallやSELinuxを完全に無効化する習慣がある人も多いでしょう。しかし、知的財産(ソースコード)のすべてが詰まったサーバーでそれを行うのは、ハッカーを家に招き入れるようなものです。

Firewalldの設定

HTTP (80)、HTTPS (443)、SSH (22) の3つの必須ポートのみを開放します。ポートスキャンのリスクを最小限に抑えるため、他のポートは閉じておくべきです。

firewall-cmd --permanent --add-service={http,https,ssh}
firewall-cmd --reload

SELinuxとの共存

CentOS Stream 9では、デフォルトでSELinuxがEnforcingモードになっています。無効にしないでください。GitLabはすでにSELinuxを十分にサポートしています。もしデフォルトのSSHポートを(例えば2222に)変更した場合は、SELinuxで接続を許可するために以下のコマンドを実行するだけです:

semanage port -a -t ssh_port_t -p tcp 2222

初期管理者パスワードの取得方法

現在のGitLabはインストール時にパスワードを設定させず、rootアカウント用にランダムな文字列を生成します。このパスワードを確認するには、以下のファイルを読み取ります:

cat /etc/gitlab/initial_root_password

重要な注意: このファイルは24時間後にシステムによって自動的に削除されます。すぐにログインし、User Settings -> Passwordから個人のパスワードに変更してください。

Let’s EncryptによるHTTPS化(無料)

HTTP経由でコードを送信するのは、データが平文で流れるため大きなリスクがあります。幸いなことに、GitLabにはLet’s Encryptが統合されています。設定ファイルを編集するだけです:

vi /etc/gitlab/gitlab.rb

以下のパラメータを探して更新します:

external_url 'https://gitlab.yourdomain.com'
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['[email protected]']

最後に、gitlab-ctl reconfigureコマンドを実行すると、GitLabが自動的にSSL証明書の取得とNginxの設定を行ってくれます。

実践的な経験:トラブルシューティング

以下は、多くのGitLabシステムを「救済」してきた経験から得たヒントです:

  • 502 Whoopsエラー: 焦ってサーバーを再起動しないでください。多くの場合、再設定(reconfigure)後にPumaサービスがまだ起動しきっていないことが原因です。2分ほど辛抱強く待てば、エラーは自然に解消されます。
  • Swapの有効化: サーバーのRAMが4GBしかない場合は、SSD上に2GB〜4GBのSwapを作成してください。これにより、チームが数百ファイルに及ぶ大規模なマージリクエストを行った際でも、サーバーがフリーズするのを防げます。
  • バックアップ戦略: コードは命です。Cronjobを使用して毎晩gitlab-rake gitlab:backup:createを実行し、生成された.tarファイルを別のサーバーやS3へ転送しましょう。
  • ヘルスチェック: どのコンポーネント(Redis、Postgres、Gitalyなど)に問題があるか正確に把握するには、gitlab-ctl statusコマンドを使用します。

コード管理システムを構築すること自体は難しくありませんが、安定して維持することが重要です。この記事が、CentOS Stream 9でGitLabを導入する際の自信に繋がれば幸いです。成功を祈ります!

Share: