GitLab を Ubuntu 16.04 Xenial にインストールする手順

GitLab は Rails ベースのオープンソース Git リポジトリ管理システムです。チームでコードを管理し、バグや機能要求を追跡し、アプリケーションのテストとデプロイを行えます。Wiki、Issue トラッキング、コードレビュー、活動フィード、マージ管理などの機能を備え、複数プロジェクトをホストできます。
エディションは主に次の 4 種類です。
- GitLab CE (Community Edition) - セルフホスト、無料、コミュニティフォーラムでサポート
- GitLab EE (Enterprise Edition) - セルフホスト、有料、追加機能あり
- GitLab.com - SaaS、無料プランあり
- GitLab.io - GitLab Inc. が管理するプライベートインスタンス
このガイドは GitLab CE(Community Edition)を Ubuntu 16.04 (Xenial Xerus) 上に Omnibus パッケージを使ってインストールする手順です。Omnibus は GitLab の稼働に必要なパッケージやサービスをまとめてインストールします。
重要: ここに記載したコマンドは root 権限で実行するか、sudo を付けて実行してください。
目的と対象読者
このチュートリアルは、セルフホスト型の GitLab を初めて導入するシステム管理者や開発チーム向けです。サーバー管理の基本(SSH 接続、パッケージ管理、ファイル編集)が理解できることを前提とします。
重要な前提条件
- Ubuntu 16.04 Server 64bit
- 最小メモリ 2GB
- root 権限
手順の概要
- 必要パッケージのインストール
- GitLab のインストール(Omnibus)
- GitLab の外部 URL 設定
- Let’s Encrypt と DHPARAM の証明書生成
- Nginx で HTTPS を有効化
- UFW ファイアウォールの設定
- GitLab の初期設定
- 検証(プロジェクト作成、初回コミット)
ステップ 1 - 必要な Ubuntu パッケージをインストール
まずはサーバーに root としてログインし、リポジトリを更新します。
ssh root@GitLabServer
apt-get update
次に curl、openssh-server、ca-certificates、postfix をインストールします。postfix はメール(SMTP)を扱うためのパッケージです。
sudo apt install curl openssh-server ca-certificates postfix
postfix のインストール中に設定ダイアログが表示されます。一般的な構成は “Internet Site” を選び、メール送信元に使うホスト名(サーバーの FQDN)を入力します。
注記: メール送信が不要な場合でも Postfix は GitLab の一部機能(通知や招待)で利用されます。ローカル送信のみでよければデフォルト設定で問題ありません。
ステップ 2 - GitLab のインストール
Omnibus リポジトリを追加して、gitlab-ce パッケージをインストールします。
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
リポジトリ追加後、GitLab CE をインストールします。
sudo apt install gitlab-ce
ダウンロードとインストールが完了すると、パッケージの出力が表示されます。
補足: 大規模な環境やカスタム構成では Omnibus ではなくソースからのビルドや Docker コンテナを検討してください(代替アプローチ節参照)。
ステップ 3 - GitLab の外部 URL を設定
GitLab の主要設定は /etc/gitlab/gitlab.rb にあります。まず編集します。
cd /etc/gitlab
vim gitlab.rb
9 行目付近にある external_url をあなたのホスト名に合わせて変更します。ここでは例として gitlab.hakase-labs.co を使います。まず HTTP で設定して後で HTTPS に変更します。
external_url 'http://gitlab.hakase-labs.co'
保存してエディタを閉じます。
注記: external_url は GitLab が生成するリンク(メール通知やウェブ UI)に使われます。正しい FQDN を設定してください。
ステップ 4 - Let’s Encrypt と DHPARAM の証明書を生成
HTTPS を有効にするために Let’s Encrypt の無料証明書を取得し、さらに DH パラメータを作成します。
まず certbot(ここではパッケージ名 letsencrypt)をインストールします。
sudo apt install letsencrypt -y
証明書をドメイン用に生成します。
letsencrypt certonly -d gitlab.hakase-labs.co
メールアドレスの入力、利用規約への同意など対話形式のプロンプトに従ってください。
成功すると /etc/letsencrypt/live/
次に GitLab 用に /etc/gitlab/ssl ディレクトリを作ります(ディレクトリ名とパスは Omnibus の既定に合わせます)。
mkdir -p /etc/gitlab/ssl/
DH パラメータを生成します。これは SSL/TLS の鍵交換を強化します。時間がかかる場合がありますが 2048 ビットで十分です。必要に応じて 4096 にできます(より時間がかかります)。
sudo openssl dhparam -out /etc/gitlab/ssl/dhparams.pem 2048
最後に証明書ファイルのパーミッションを制限します。
chmod 600 /etc/gitlab/ssl/*
これで Let’s Encrypt の証明書と DHPARAM が準備できました。
ステップ 5 - Nginx で HTTPS を有効化
/etc/gitlab/gitlab.rb を編集して external_url を HTTPS に変更し、Nginx に証明書を指定します。
cd /etc/gitlab
vim gitlab.rb
external_url を HTTPS に変更します。
external_url 'https://gitlab.hakase-labs.co'
次に Nginx の SSL 設定を追加します(行を追加または編集)。
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/letsencrypt/live/gitlab.hakase-labs.co/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/gitlab.hakase-labs.co/privkey.pem"
nginx['ssl_dhparam'] = "/etc/gitlab/ssl/dhparams.pem"
注意: パスは LetsEncrypt の出力先に合わせています。ドメイン名を必ず置き換えてください。
設定を反映するために reconfigure を実行します。
sudo gitlab-ctl reconfigure
実行ログには nginx の再設定やサービスの起動が表示されます。
これで HTTPS が有効になり、HTTP から HTTPS へのリダイレクトも働きます。
ステップ 6 - UFW ファイアウォールの設定
UFW を有効化し、SSH、HTTP、HTTPS を許可します。
まず UFW を有効にします。
ufw enable
次にポートを許可します。
ufw allow ssh
ufw allow http
ufw allow https
ルールを確認します。
ufw status
追加の運用上の注意:
- GitLab の内部サービス(例: gitlab-shell, registry 等)を外部に公開する場合は、必要なポートだけ開けること。
- 管理用途の IP を限定する場合は ufw の “allow from
to any port ” を利用します。
ステップ 7 - GitLab の初期設定
ブラウザで https://gitlab.hakase-labs.co にアクセスします(URL はあなたのドメインに置き換えてください)。初回アクセス時に root ユーザーの初期パスワードリセット画面が表示されます。
root パスワードのリセット
root ユーザーでログインします。
プロフィール情報の更新 右上のアイコンから Profile Settings を選び、表示名とメールアドレスを更新します。
プロフィールとユーザー名を更新して保存します。
ユーザー名は Account タブで変更できます。
SSH 鍵の登録 ローカル環境に SSH 鍵がない場合は生成します。
ssh-keygen
公開鍵 (id_rsa.pub) の内容を GitLab の SSH Keys にコピーして追加します。
登録制限とプロジェクト上限 管理エリア > Settings でサインアップ制限やユーザーごとのプロジェクト上限を設定できます。組織ポリシーに合わせて制限を設定してください。
ステップ 8 - 動作確認テスト
簡単な操作で GitLab が正しく動いているかを確認します。
プロジェクト作成
画面上部の + アイコンから新規プロジェクトを作成します。名前、説明、可視性を設定して Create project をクリックします。
プロジェクトページに遷移したら、ローカルからクローンして README を追加する手順を行います。
最初のコミットと push
ローカルに Git がインストールされていることを確認し、git の user.name と user.email を設定します。
git config --global user.name "hakase"
git config --global user.email "[email protected]"
リポジトリをクローンし、README.md を作成してコミットします。
git clone https://[email protected]/hakase/howtoforge.git
cd howtoforge/
vim README.md
コミットしてプッシュします。
git add .
git commit -m 'Add README.md file by hakase-labs'
git push origin master
プッシュ時にプロンプトが出たらユーザーのパスワードを入力します。成功するとリポジトリ上に README が表示されます。
以上で GitLab の基本インストールと検証は完了です。
よくある失敗と対処法
- Let’s Encrypt 証明書取得で HTTP-01 が失敗する場合: ドメインが正しく DNS で公開され、80 番ポートが外部から到達可能であるか確認します。プロキシやファイアウォールで遮断されていないか確認してください。
- git push で認証エラーが出る場合: HTTPS で push するなら正しいユーザー名/パスワード、SSH であれば公開鍵が GitLab に登録済みであるかを確認します。
- gitlab-ctl reconfigure が失敗する場合: /etc/gitlab/gitlab.rb の構文ミスやパスの誤りがないか確認し、ログ(/var/log/gitlab)を参照して原因を特定します。
代替アプローチ
- Docker / Docker Compose を使う: コンテナ化して運用する場合、公式 Omnibus イメージや helm チャート(Kubernetes)を使う方法があります。簡易なスケールや移行管理に有利です。
- GitLab.com を利用する: セルフホスティングの運用負荷を避ける場合、GitLab の SaaS を利用します。ただしデータのローカル保持やカスタム認証が必要な場合はセルフホストが有利です。
セキュリティ強化と運用上のベストプラクティス
- 定期的に gitlab-ctl upgrade と apt update を実行してパッケージを更新する。メンテナンス時間を確保してから実施します。
- バックアップ: Omnibus のバックアップコマンド(gitlab-rake gitlab:backup:create)を定期実行し、外部ストレージに保管します。
- 監査ログとモニタリング: /var/log/gitlab の監査ログを集約し、SLA/SLI 指標(稼働率、レスポンス)を監視します。
- 管理者アクセスの制限: 管理用 IP の限定、二要素認証(2FA)を管理者ユーザーに要求する。
運用チェックリスト
- external_url が正しく設定されている
- Let’s Encrypt 証明書が /etc/letsencrypt/live に生成されている
- /etc/gitlab/ssl/dhparams.pem が存在しパーミッションが 600 になっている
- gitlab-ctl reconfigure が成功している
- UFW で SSH, HTTP, HTTPS が許可されている
- 初期 root パスワードを変更済み
- 管理者アカウントに 2FA を有効化済み
- 定期バックアップスケジュールを設定済み
簡易運用手順(SOP)
- 予定されたメンテナンス時間を告知する
- サーバーに SSH で root ログイン
- パッケージ更新: apt update && apt upgrade
- GitLab の再構成チェック: sudo gitlab-ctl reconfigure
- サービス状態確認: sudo gitlab-ctl status
- バックアップ作成: sudo gitlab-rake gitlab:backup:create
- 異常なログが無いか確認: sudo tail -n 200 /var/log/gitlab/*
- メンテナンス終了を通知する
1 行用語集
- Omnibus: GitLab を単一パッケージで配布する公式のバンドル方式
- external_url: GitLab が外部に公開するベース URL
- DHPARAM: Diffie-Hellman 鍵交換に使うパラメータファイル
- certbot / letsencrypt: 無料の SSL/TLS 証明書を発行するツール
参考リンク
まとめ
このガイドでは Ubuntu 16.04 に Omnibus パッケージを使って GitLab CE をインストールし、Let’s Encrypt による SSL、DHPARAM、NGINX の HTTPS 設定、UFW の基本設定、初期の管理タスクとテスト手順を説明しました。導入後はバックアップと更新運用を必ず実施し、必要に応じて代替のデプロイ方法(Docker/Kubernetes)も検討してください。