序章

GitLabCEまたはCommunityEditionは、主にGitリポジトリをホストするために使用されるオープンソースアプリケーションであり、問題追跡などの追加の開発関連機能を備えています。 独自のインフラストラクチャを使用してホストされるように設計されており、開発チームの内部リポジトリストアとして、ユーザーとのインターフェイスとして公に、または寄稿者が独自のプロジェクトをホストする方法としてオープンに展開する際の柔軟性を提供します。

GitLabプロジェクトを使用すると、簡単なインストールメカニズムを使用して、独自のハードウェアにGitLabインスタンスをセットアップするのが比較的簡単になります。 このガイドでは、Ubuntu16.04サーバーにGitLabをインストールして構成する方法について説明します。

前提条件

このチュートリアルでは、新しいUbuntu16.04サーバーにアクセスできることを前提としています。 公開されているGitLabハードウェア要件は、次のサーバーを使用することを推奨しています。

  • 2コア
  • 4GBのRAM

RAMの代わりにスワップスペースを使用することで解決できる場合もありますが、お勧めしません。 このガイドでは、少なくとも上記のリソースがあることを前提としています。

開始するには、サーバーでsudoアクセスが構成されているroot以外のユーザーが必要です。 追加のセキュリティ層を提供するために、基本的なファイアウォールを設定することもお勧めします。 Ubuntu 16.04初期サーバーセットアップガイドの手順に従って、このセットアップを取得できます。

上記の前提条件を満たしたら、インストール手順を開始します。

依存関係のインストール

GitLab自体をインストールする前に、インストール中および継続的に活用するソフトウェアの一部をインストールすることが重要です。 幸い、必要なソフトウェアはすべて、Ubuntuのデフォルトのパッケージリポジトリから簡単にインストールできます。

このセッションでaptを使用するのはこれが初めてなので、ローカルパッケージインデックスを更新してから、次のように入力して依存関係をインストールできます。

  1. sudo apt-get update
  2. sudo apt-get install ca-certificates curl openssh-server postfix

このソフトウェアのいくつかはすでにインストールされている可能性があります。 postfixのインストールでは、プロンプトが表示されたらインターネットサイトを選択します。 次の画面で、サーバーのドメイン名またはIPアドレスを入力して、システムがメールを送信する方法を構成します。

GitLabのインストール

依存関係が整ったので、GitLab自体をインストールできます。 これは、インストールスクリプトを利用して、GitLabリポジトリでシステムを構成する簡単なプロセスです。

/tmpディレクトリに移動し、インストールスクリプトをダウンロードします。

  1. cd /tmp
  2. curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh

ダウンロードしたスクリプトを自由に調べて、実行するアクションに問題がないことを確認してください。 スクリプトのホストバージョンもここにあります。

  1. less /tmp/script.deb.sh

スクリプトの安全性に満足したら、インストーラーを実行します。

  1. sudo bash /tmp/script.deb.sh

このスクリプトは、GitLabが管理するリポジトリを使用するようにサーバーをセットアップします。 これにより、他のシステムパッケージに使用するのと同じパッケージ管理ツールを使用してGitLabを管理できます。 これが完了すると、aptを使用して実際のGitLabアプリケーションをインストールできます。

  1. sudo apt-get install gitlab-ce

これにより、必要なコンポーネントがシステムにインストールされます。

ファイアウォールルールの調整

GitLabを構成する前に、ファイアウォールルールがWebトラフィックを許可するのに十分な許容範囲であることを確認する必要があります。 前提条件にリンクされているガイドに従っている場合は、ufwファイアウォールが有効になっています。

次のように入力して、アクティブなファイアウォールの現在のステータスを表示します。

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)

ご覧のとおり、現在のルールではSSHトラフィックの通過が許可されていますが、他のサービスへのアクセスは制限されています。 GitLabはWebアプリケーションであるため、でHTTPアクセスを許可する必要があります。 ドメイン名がGitLabサーバーに関連付けられている場合、GitLabはLet’sEncryptプロジェクトから無料のTLS/SSL証明書を要求して有効にし、インストールを保護することもできます。 この場合、HTTPSアクセスも許可する必要があります。

HTTPおよびHTTPSのプロトコルからポートへのマッピングは/etc/servicesファイルで利用できるため、そのトラフィックを名前で許可できます。 OpenSSHトラフィックをまだ有効にしていない場合は、今すぐそのトラフィックも許可する必要があります。

  1. sudo ufw allow http
  2. sudo ufw allow https
  3. sudo ufw allow OpenSSH

ufw statusコマンドをもう一度チェックすると、少なくとも次の2つのサービスにアクセスが構成されていることがわかります。

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80 ALLOW Anywhere 443 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80 (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6)

上記の出力は、アプリケーションを構成するとGitLabWebインターフェイスにアクセスできることを示しています。

GitLab構成ファイルの編集

アプリケーションを使用する前に、1つの構成ファイルを更新し、再構成コマンドを実行する必要があります。 まず、Gitlabの構成ファイルを開きます。

  1. sudo nano /etc/gitlab/gitlab.rb

上部近くにexternal_url構成ラインがあります。 自分のドメインまたはIPアドレスに一致するように更新してください。 ドメインをお持ちの場合は、httphttpsに変更して、GitLabがリクエストするLet’sEncrypt証明書で保護されているサイトにユーザーを自動的にリダイレクトするようにします。

/etc/gitlab/gitlab.rb
# If your GitLab server does not have a domain name, you will need to use an IP
# address instead of a domain and keep the protocol as `http`.
external_url 'https://yourdomain'

次に、GitLabサーバーにドメイン名がある場合は、ファイルでletsencrypt['enable']設定を検索します。 行のコメントを外し、trueに設定します。 これにより、GitLabは、GitLabドメインのLet’s Encrypt証明書を要求し、それを使用してトラフィックを処理するようにアプリケーションを構成するように指示されます。

その下で、letsencrypt['contact_emails']設定を探します。 この設定は、ドメインに問題がある場合にLet’sEncryptプロジェクトが連絡するために使用できる電子メールアドレスのリストを定義します。 コメントを外してこれにも記入することをお勧めします。そうすれば、問題を知ることができます。

/etc/gitlab/gitlab.rb
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['[email protected]']

ファイルを保存して閉じます。 次に、次のコマンドを実行してGitlabを再構成します。

  1. sudo gitlab-ctl reconfigure

これにより、サーバーに関して検出できる情報を使用してGitLabが初期化されます。 これは完全に自動化されたプロセスであるため、プロンプトに応答する必要はありません。 Let’s Encrypt統合を有効にした場合は、ドメインに証明書を構成する必要があります。

Webインターフェイスを介した初期構成の実行

GitLabが実行され、アクセスが許可されたので、Webインターフェイスを介してアプリケーションの初期構成を実行できます。

初めてログインする

WebブラウザでGitLabサーバーのドメイン名にアクセスします。

http://gitlab_domain_or_IP

Let’s Encryptを有効にして、external_urlhttpsを使用した場合は、安全なHTTPS接続にリダイレクトされるはずです。

初めてアクセスすると、管理者アカウントのパスワードを設定するための最初のプロンプトが表示されます。

GitLab initial password set prompt

最初のパスワードプロンプトで、管理者アカウントの安全なパスワードを入力して確認します。 終了したら、パスワードの変更ボタンをクリックしてください。

従来のGitLabログインページにリダイレクトされます。

GitLab first sign in prompt

ここでは、設定したパスワードでログインできます。 資格情報は次のとおりです。

  • ユーザー名: root
  • パスワード:[設定したパスワード]

これらの値を既存のユーザーのフィールドに入力し、サインインボタンをクリックします。 アプリケーションにサインインし、プロジェクトの追加を開始するように求めるランディングページに移動します。

GitLab initial login landing page

これで、いくつかの簡単な変更を加えて、GitLabを希望どおりにセットアップできます。

プロファイル設定の調整

新規インストール後に最初に行う必要があることの1つは、プロファイルをより良い形にすることです。 GitLabはいくつかの妥当なデフォルトを選択しますが、ソフトウェアの使用を開始すると、通常、これらは適切ではありません。

必要な変更を加えるには、インターフェースの右上隅にあるユーザーアイコンをクリックします。 表示されるドロップダウンメニューで、設定を選択します。

GitLab profile settings button

設定のプロファイルセクションに移動します。

GitLab profile settings page

NameおよびEmailアドレスを「Administrator」および「admin@example.com」からより正確なものに調整します。 選択した名前は他のユーザーに表示され、メールはデフォルトのアバター検出、通知、インターフェースを介したGitアクションなどに使用されます。

完了したら、下部にあるプロファイル設定の更新ボタンをクリックします。

GitLab update profile settings button

指定したアドレスに確認メールが送信されます。 メールの指示に従ってアカウントを確認し、GitLabでの使用を開始できるようにします。

アカウント名の変更

次に、左側のメニューバーのアカウント項目をクリックします。

GitLab account menu item

ここでは、プライベートAPIトークンを検索するか、2要素認証を構成できます。 ただし、現時点で関心のある機能は、ユーザー名の変更セクションです。

デフォルトでは、最初の管理者アカウントにはrootという名前が付けられています。 これは既知のアカウント名であるため、これを別の名前に変更する方が安全です。 引き続き管理者権限があります。 変更されるのは名前だけです。

GitLab change username section

ユーザー名の更新ボタンをクリックして変更を加えます。

GitLab update username button

次回GitLabにログインするときは、新しいユーザー名を使用することを忘れないでください。

アカウントにSSHキーを追加する

ほとんどの場合、GitでSSHキーを使用して、GitLabプロジェクトとやり取りすることをお勧めします。 これを行うには、SSH公開鍵をGitLabアカウントに追加する必要があります。

ローカルコンピューターでSSHキーペアを既に作成している場合は、通常、次のように入力して公開キーを表示できます。

  1. cat ~/.ssh/id_rsa.pub

次のような大量のテキストが表示されます。

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMuyMtMl6aWwqBCvQx7YXvZd7bCFVDsyln3yh5/8Pu23LW88VXfJgsBvhZZ9W0rPBGYyzE/TDzwwITvVQcKrwQrvQlYxTVbqZQDlmsC41HnwDfGFXg+QouZemQ2YgMeHfBzy+w26/gg480nC2PPNd0OG79+e7gFVrTL79JA/MyePBugvYqOAbl30h7M1a7EHP3IV5DQUQg4YUq49v4d3AvM0aia4EUowJs0P/j83nsZt8yiE2JEYR03kDgT/qziPK7LnVFqpFDSPC3MR3b8B354E9Af4C/JHgvglv2tsxOyvKupyZonbyr68CqSorO2rAwY/jWFEiArIaVuDiR9YM5 sammy@mydesktop

このテキストをコピーして、GitLabのWebインターフェイスの[プロファイル設定]ページに戻ります。

代わりに、次のようなメッセージが表示された場合は、マシンにSSHキーペアがまだ構成されていません。

Output
cat: /home/sammy/.ssh/id_rsa.pub: No such file or directory

この場合、次のように入力してSSHキーペアを作成できます。

  1. ssh-keygen

デフォルトを受け入れ、オプションでキーをローカルで保護するためのパスワードを提供します。

Output
Generating public/private rsa key pair. Enter file in which to save the key (/home/sammy/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/sammy/.ssh/id_rsa. Your public key has been saved in /home/sammy/.ssh/id_rsa.pub. The key fingerprint is: SHA256:I8v5/M5xOicZRZq/XRcSBNxTQV2BZszjlWaIHi5chc0 [email protected] The key's randomart image is: +---[RSA 2048]----+ | ..%o==B| | *.E =.| | . ++= B | | ooo.o . | | . S .o . .| | . + .. . o| | + .o.o ..| | o .++o . | | oo=+ | +----[SHA256]-----+

これを取得したら、次のように入力して、上記のように公開鍵を表示できます。

  1. cat ~/.ssh/id_rsa.pub
Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMuyMtMl6aWwqBCvQx7YXvZd7bCFVDsyln3yh5/8Pu23LW88VXfJgsBvhZZ9W0rPBGYyzE/TDzwwITvVQcKrwQrvQlYxTVbqZQDlmsC41HnwDfGFXg+QouZemQ2YgMeHfBzy+w26/gg480nC2PPNd0OG79+e7gFVrTL79JA/MyePBugvYqOAbl30h7M1a7EHP3IV5DQUQg4YUq49v4d3AvM0aia4EUowJs0P/j83nsZt8yiE2JEYR03kDgT/qziPK7LnVFqpFDSPC3MR3b8B354E9Af4C/JHgvglv2tsxOyvKupyZonbyr68CqSorO2rAwY/jWFEiArIaVuDiR9YM5 sammy@mydesktop

表示されたテキストのブロックをコピーして、GitLabのWebインターフェイスのプロファイル設定に戻ります。

左側のメニューのSSHキー項目をクリックします。

GitLab SSH Keys menu item

提供されたスペースに、ローカルマシンからコピーした公開鍵を貼り付けます。 説明的なタイトルを付けて、キーの追加ボタンをクリックします。

GitLab add SSH Key

これで、GitLabアカウントのクレデンシャルを提供しなくても、ローカルマシンからGitLabプロジェクトとリポジトリを管理できるようになります。

パブリックサインアップの制限または無効化(オプション)

GitLabインスタンスのランディングページにアクセスすると、誰でもアカウントにサインアップできることに気付いたかもしれません。 これは、公開プロジェクトをホストすることを検討している場合に必要なものかもしれません。 ただし、多くの場合、より制限的な設定が望ましいです。

まず、ページ上部のメインメニューバーにあるレンチアイコンをクリックして、管理エリアに移動します。

GitLab administrative area button

次のページで、GitLabインスタンス全体の概要を確認できます。 設定を調整するには、左側のメニューの下部にある設定項目をクリックします。

GitLab administrative settings button

GitLabインスタンスのグローバル設定に移動します。 ここでは、新規ユーザーがサインアップできるかどうか、およびユーザーのアクセスレベルに影響を与えるいくつかの設定を調整できます。

サインアップの無効化

サインアップを完全に無効にする場合(新しいユーザーのアカウントを手動で作成することもできます)、サインアップの制限セクションまでスクロールします。

サインアップを有効にするチェックボックスの選択を解除します。

GitLab deselect sign-ups enabled

一番下までスクロールして、保存ボタンをクリックします。

GitLab save settings button

サインアップセクションがGitLabランディングページから削除されます。

ドメインによるサインアップの制限

ドメインに関連付けられたメールアドレスを提供する組織の一部としてGitLabを使用している場合は、完全に無効にするのではなく、ドメインごとに登録を制限できます。

サインアップの制限セクションで、最初にサインアップ時に確認メールを送信するボックスを選択して、ユーザーがメールを確認した後にのみログインできるようにします。

次に、ドメインを登録用ホワイトリストに登録されたドメインボックスに1行に1つずつ追加します。 アスタリスク「*」を使用して、ワイルドカードドメインを指定できます。

GitLab restrict sign-ups by domain

一番下までスクロールして、保存ボタンをクリックします。

GitLab save settings button

サインアップセクションがGitLabランディングページから削除されます。

プロジェクト作成の制限

デフォルトでは、新規ユーザーは最大10個のプロジェクトを作成できます。 外部からの新規ユーザーに可視性と参加を許可したいが、新しいプロジェクトの作成へのアクセスを制限したい場合は、アカウントと制限の設定セクションで行うことができます。

内部では、デフォルトのプロジェクト制限を0に変更して、新しいユーザーがプロジェクトを作成できないようにすることができます。

GitLab set projects to zero

新しいユーザーは引き続き手動でプロジェクトに追加でき、他のユーザーが作成した内部プロジェクトまたは公開プロジェクトにアクセスできます。

一番下までスクロールして、保存ボタンをクリックします。

GitLab save settings button

新規ユーザーはアカウントを作成できるようになりますが、プロジェクトを作成することはできません。

証明書を自動的に更新するためのcronジョブの作成Let’sEncrypt

設計上、Let’sEncrypt証明書は90日間のみ有効です。 以前にGitLabドメインでLet’sEncryptを有効にした場合は、サービスの中断を回避するために、証明書が定期的に更新されるようにする必要があります。 GitLabは、gitlab-ctl renew-le-certsコマンドを提供して、現在のアセットの有効期限が近づいたときに新しい証明書を要求します。

このプロセスを自動化するために、このコマンドを定期的に自動的に実行するcronジョブを作成できます。 このコマンドは、有効期限が近づいたときにのみ証明書を更新するため、定期的に安全に実行できます。

まず、テキストエディタで/etc/cron.daily/gitlab-leにファイルを作成して開きます。

  1. sudo nano /etc/cron.daily/gitlab-le

内部に、次のスクリプトを貼り付けます。

/etc/cron.daily/gitlab-le
#!/bin/bash

set -e

/usr/bin/gitlab-ctl renew-le-certs > /dev/null

終了したら、ファイルを保存して閉じます。

次のように入力して、ファイルを実行可能としてマークします。

  1. sudo chmod +x /etc/cron.daily/gitlab-le

これで、GitLabは、Let’sEncrypt証明書を更新する必要があるかどうかを毎日自動的にチェックする必要があります。 含まれている場合、コマンドは証明書を自動的に更新します。

結論

これで、動作中のGitLabインスタンスが自分のサーバーでホストされているはずです。 新しいプロジェクトのインポートまたは作成を開始し、チームに適切なレベルのアクセスを構成できます。 GitLabは定期的に機能を追加し、プラットフォームを更新しているため、プロジェクトのホームページをチェックして、改善点や重要な通知について最新情報を入手してください。