正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

自己コンパイルによるインストール

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab Self-Managed

これは、ソースファイルを使用して本番環境のGitLabサーバーをセットアップするための公式インストールガイドです。Debian/Ubuntuオペレーティングシステム用に作成され、テストされています。ハードウェアとオペレーティングシステムの要件については、requirements.mdをお読みください。RHEL/CentOSにインストールする場合は、Linuxパッケージを使用する必要があります。その他の多くのインストールオプションについては、インストールのメインページを参照してください。

このガイドは、多くのケースを網羅し、必要なすべてのコマンドが含まれているため、長くなっています。次の手順は動作することが確認されています。このガイドから逸脱する場合は注意してください。その環境についてGitLabが前提としている点を破らないようにしてください。たとえば、ディレクトリの場所を変更したり、間違ったユーザーとしてサービスを実行したりすると、多くのユーザーが権限の問題に遭遇します。

このガイドにバグ/エラーを見つけた場合は、コントリビュートガイドに従って、マージリクエストを送信してください。

Linuxパッケージインストールを検討する

自己コンパイルによるインストールでは多くの作業とエラーが発生しやすいため、高速で信頼性の高いLinuxパッケージインストール(deb/rpm)を使用することを強くおすすめします。

Linuxパッケージが信頼性の高い理由の1つは、いずれかのクラッシュが発生した場合にGitLabプロセスを再起動するためにrunitを使用することです。頻繁に使用されるGitLabインスタンスでは、Sidekiqバックグラウンドワーカーのメモリ使用量が増加します。Linuxパッケージでは、メモリを使いすぎるとSidekiqを正常に終了させることでこれを解決します。終了すると、runitはSidekiqが実行されていないことを検出し、それを開始します。自己コンパイルによるインストールでは、プロセス監視にrunitを使用しないため、Sidekiqを終了できず、メモリ使用量が増加する可能性があります。

インストールするバージョンを選択する

インストールするGitLabのブランチ(バージョン、たとえば16-0-stable)からこのインストールガイドを表示していることを確認してください。GitLabの左上隅(メニューバーの下)にあるバージョンドロップダウンリストでブランチを選択できます。

最新の安定したブランチが不明な場合は、バージョン別のインストールガイドリンクについてGitLabブログを確認してください。

ソフトウェア要件

ソフトウェア最小バージョン
Ruby3.2.xGitLab 16.7から17.4までは、Ruby 3.1が必要です。GitLab 17.5以降では、Ruby 3.2が必要です。Rubyの標準MRI実装を使用する必要があります。JRubyRubiniusが好まれますが、GitLabにはネイティブ拡張機能を持ついくつかのgemが必要です。
RubyGems3.5.x特定のRubyGemsバージョンは必須ではありませんが、既知のパフォーマンス改善のベネフィット得るためにアップデートしてください。
Go1.22.xGitLab 17.1以降では、Go 1.22以降が必要です。
Git2.47.xGitLab 17.7以降では、Git 2.47.x以降が必要です。Gitalyから提供されるGitバージョンを使用する必要があります。
Node.js20.13.xGitLab 17.0以降では、Node.js 20.13以降が必要です。
PostgreSQL16.xGitLab 18.0以降では、PostgreSQL 16以降が必要です。

GitLabディレクトリ構造

インストール手順を実行すると、次のディレクトリが作成されます:

|-- home
|   |-- git
|       |-- .ssh
|       |-- gitlab
|       |-- gitlab-shell
|       |-- repositories
  • /home/git/.ssh - OpenSSH設定が含まれています。具体的には、GitLab Shellによって管理されるauthorized_keysファイルです。
  • /home/git/gitlab - GitLabコアソフトウェア。
  • /home/git/gitlab-shell - GitLabのコアアドオンコンポーネント。SSHクローンやその他の機能を維持します。
  • /home/git/repositories - ネームスペースで整理されたすべてのプロジェクトのベアリポジトリ。このディレクトリは、プッシュ/プルされるGitリポジトリがすべてのプロジェクトで維持される場所です。この領域には、プロジェクトの重要なデータが含まれています。バックアップを保持します

リポジトリのデフォルトの場所は、GitLabのconfig/gitlab.ymlとGitLab Shellのconfig.ymlで構成できます。

これらのディレクトリを手動で作成する必要はありません。作成すると、インストールの後半でエラーが発生する可能性があります。

インストールのワークフロー

GitLabのインストールは、次のコンポーネントの設定で構成されています:

  1. パッケージと依存関係
  2. Ruby
  3. RubyGems
  4. Go
  5. ノード
  6. システムユーザー
  7. データベース
  8. Redis
  9. GitLab
  10. NGINX

1.パッケージと依存関係

sudo

sudoは、デフォルトではDebianにインストールされていません。システムが最新であることを確認し、インストールします。

# run as root!
apt-get update -y
apt-get upgrade -y
apt-get install sudo -y

ビルドの依存関係

必要なパッケージ(Rubyおよびネイティブ拡張機能をRuby gemにコンパイルするために必要)をインストールします:

sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libre2-dev \
  libreadline-dev libncurses5-dev libffi-dev curl openssh-server libxml2-dev libxslt-dev \
  libcurl4-openssl-dev libicu-dev libkrb5-dev logrotate rsync python3-docutils pkg-config cmake \
  runit-systemd

GitLabにはOpenSSLバージョン1.1が必要です。Linuxディストリビューションに異なるバージョンのOpenSSLが含まれている場合は、1.1を手動でインストールする必要があるかもしれません。

Git

次のGitalyから提供されるGitバージョンを使用する必要があります:

  • GitLabに必要なバージョン。
  • 適切な動作に必要なカスタムパッチが含まれている。
  1. 必要な依存関係をインストールします:

    sudo apt-get install -y libcurl4-openssl-dev libexpat1-dev gettext libz-dev libssl-dev libpcre2-dev build-essential git-core
  2. Gitalyリポジトリをクローンし、Gitをコンパイルします。インストールするGitLabバージョンに一致する安定したブランチで<X-Y-stable>を置き換えます。たとえば、GitLab 16.7をインストールする場合は、ブランチ名16-7-stableを使用します:

    git clone https://gitlab.com/gitlab-org/gitaly.git -b <X-Y-stable> /tmp/gitaly
    cd /tmp/gitaly
    sudo make git GIT_PREFIX=/usr/local
  3. オプションで、システムGitとその依存関係を削除できます:

    sudo apt remove -y git-core
    sudo apt autoremove

後でconfig/gitlab.ymlを編集する場合は、Gitパスを変更することを忘れないでください:

  • 変更前:

    git:
      bin_path: /usr/bin/git
  • 変更後:

    git:
      bin_path: /usr/local/bin/git

GraphicsMagick

カスタムファビコンを機能させるには、GraphicsMagickをインストールする必要があります。

sudo apt-get install -y graphicsmagick

メールサーバー

メール通知を受信するには、メールサーバーがインストールされていることを確認してください。デフォルトでは、Debianにはexim4が付属していますが、これには問題があり、Ubuntuには付属していません。推奨されるメールサーバーはpostfixであり、次の方法でインストールできます:

sudo apt-get install -y postfix

次に、Internet Siteを選択し、Enterを押して、ホスト名を確認します。

ExifTool

GitLab Workhorseには、アップロードされた画像からEXIFデータを削除するためにexiftoolが必要です。

sudo apt-get install -y libimage-exiftool-perl

2.Ruby

GitLabを実行するには、Rubyインタプリタが必要です。最小Ruby要件については、要件のセクションを参照してください。

RVM、rbenv、chrubyなどのRubyバージョンマネージャーは、GitLabで診断が難しい問題を引き起こす可能性があります。その代わりに、公式ソースコードからRubyをインストールしてください。

3.RubyGems

Rubyに同梱されているよりも新しいバージョンのRubyGemsが必要になる場合があります。

特定のバージョンに更新するには:

gem update --system 3.4.12

または最新バージョンに更新するには:

gem update --system

4.Go

GitLabには、Goで記述されたいくつかのデーモンがあります。GitLabをインストールするには、Goコンパイラをインストールする必要があります。以下の手順では、64ビット版Linuxを使用することを前提としています。他のプラットフォームのダウンロードは、Goダウンロードページにあります。

# Remove former Go installation folder
sudo rm -rf /usr/local/go

curl --remote-name --location --progress-bar "https://go.dev/dl/go1.22.5.linux-amd64.tar.gz"
echo '904b924d435eaea086515bc63235b192ea441bd8c9b198c507e85009e6e4c7f0  go1.22.5.linux-amd64.tar.gz' | shasum -a256 -c - && \
  sudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz
sudo ln -sf /usr/local/go/bin/{go,gofmt} /usr/local/bin/
rm go1.22.5.linux-amd64.tar.gz

5.Node

GitLabでは、JavaScriptアセットをコンパイルするためにNodeを使用し、JavaScriptの依存関係を管理するためにYarnを使用する必要があります。これらの現在の最小要件は次のとおりです:

  • node 20.xリリース(v20.13.0以降)。Node.jsのその他のLTSバージョンはアセットを構築できるかもしれませんが、Node.js 20.xのみを保証します。
  • yarn= v1.22.x(Yarn 2はまだサポートされていません)

多くのディストリビューションでは、公式パッケージリポジトリによって提供されるバージョンが古くなっているため、次のコマンドを使用してインストールする必要があります:

# install node v20.x
curl --location "https://deb.nodesource.com/setup_20.x" | sudo bash -
sudo apt-get install -y nodejs

npm install --global yarn

これらの手順で問題が発生した場合は、nodeおよびyarnの公式ウェブサイトにアクセスしてください。

6.システムユーザー

GitLabのgitユーザーを作成します:

sudo adduser --disabled-login --gecos 'GitLab' git

7.データベース

PostgreSQLのみがサポートされています。GitLab 18.0以降では、PostgreSQL 16以降が必要です。

  1. データベースパッケージをインストールします。

    Ubuntu 22.04以降の場合:

    sudo apt install -y postgresql postgresql-client libpq-dev postgresql-contrib

    Ubuntu 20.04以前の場合、利用可能なPostgreSQLは最小バージョン要件を満たしていません。PostgreSQLリポジトリを追加する必要があります:

    sudo curl --fail --silent --show-error --output /etc/apt/keyrings/postgresql.asc \
              --url "https://www.postgresql.org/media/keys/ACCC4CF8.asc"
    echo "deb [ signed-by=/etc/apt/keyrings/postgresql.asc ] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" |
         sudo tee /etc/apt/sources.list.d/pgdg.list
    sudo apt-get update
    sudo apt-get -y install postgresql-16
  2. インストールしているGitLabのバージョンでサポートされているPostgreSQLバージョンを確認します:

    psql --version
  3. PostgreSQLサービスを開始し、サービスが実行されていることを確認します:

    sudo service postgresql start
    sudo service postgresql status
  4. GitLabのデータベースユーザーを作成します:

    sudo -u postgres psql -d template1 -c "CREATE USER git CREATEDB;"
  5. pg_trgm拡張機能を作成します:

    sudo -u postgres psql -d template1 -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;"
  6. btree_gist拡張機能を作成します:

    sudo -u postgres psql -d template1 -c "CREATE EXTENSION IF NOT EXISTS btree_gist;"
  7. plpgsql拡張機能を作成します:

    sudo -u postgres psql -d template1 -c "CREATE EXTENSION IF NOT EXISTS plpgsql;"
  8. GitLab本番環境のデータベースを作成し、データベースに対するすべての特権を付与します:

    sudo -u postgres psql -d template1 -c "CREATE DATABASE gitlabhq_production OWNER git;"
  9. 新しいユーザーで新しいデータベースへの接続を試みます:

    sudo -u git -H psql -d gitlabhq_production
  10. pg_trgm拡張機能が有効であるかを確認します:

    SELECT true AS enabled
    FROM pg_available_extensions
    WHERE name = 'pg_trgm'
    AND installed_version IS NOT NULL;

    拡張機能が有効である場合、次の出力が生成されます:

    enabled
    ---------
     t
    (1 row)
  11. btree_gist拡張機能が有効であるかを確認します:

    SELECT true AS enabled
    FROM pg_available_extensions
    WHERE name = 'btree_gist'
    AND installed_version IS NOT NULL;

    拡張機能が有効である場合、次の出力が生成されます:

    enabled
    ---------
     t
    (1 row)
  12. plpgsql拡張機能が有効であるかを確認します:

    SELECT true AS enabled
    FROM pg_available_extensions
    WHERE name = 'plpgsql'
    AND installed_version IS NOT NULL;

    拡張機能が有効である場合、次の出力が生成されます:

    enabled
    ---------
     t
    (1 row)
  13. データベースセッションを終了します:

    gitlabhq_production> \q

8.Redis

最小Redis要件については、要件ページを参照してください。

次でRedisをインストールします:

sudo apt-get install redis-server

完了したら、Redisを設定できます:

# Configure redis to use sockets
sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.orig

# Disable Redis listening on TCP by setting 'port' to 0
sudo sed 's/^port .*/port 0/' /etc/redis/redis.conf.orig | sudo tee /etc/redis/redis.conf

# Enable Redis socket for default Debian / Ubuntu path
echo 'unixsocket /var/run/redis/redis.sock' | sudo tee -a /etc/redis/redis.conf

# Grant permission to the socket to all members of the redis group
echo 'unixsocketperm 770' | sudo tee -a /etc/redis/redis.conf

# Add git to the redis group
sudo usermod -aG redis git

systemdでRedisを管理する

ディストリビューションがsystemd initを使用し、次のコマンドの出力がnotifyの場合、変更を加えないでください:

systemctl show --value --property=Type redis-server.service

出力がnotifyでない場合は、以下を実行します:

# Configure Redis to not daemonize, but be supervised by systemd instead and disable the pidfile
sudo sed -i \
         -e 's/^daemonize yes$/daemonize no/' \
         -e 's/^supervised no$/supervised systemd/' \
         -e 's/^pidfile/# pidfile/' /etc/redis/redis.conf
sudo chown redis:redis /etc/redis/redis.conf

# Make the same changes to the systemd unit file
sudo mkdir -p /etc/systemd/system/redis-server.service.d
sudo tee /etc/systemd/system/redis-server.service.d/10fix_type.conf <<EOF
[Service]
Type=notify
PIDFile=
EOF

# Reload the redis service
sudo systemctl daemon-reload

# Activate the changes to redis.conf
sudo systemctl restart redis-server.service

Redisを管理しない

システムがSysV initを使用している場合は、これらのコマンドを実行します:

# Create the directory which contains the socket
sudo mkdir -p /var/run/redis
sudo chown redis:redis /var/run/redis
sudo chmod 755 /var/run/redis

# Persist the directory which contains the socket, if applicable
if [ -d /etc/tmpfiles.d ]; then
  echo 'd  /var/run/redis  0755  redis  redis  10d  -' | sudo tee -a /etc/tmpfiles.d/redis.conf
fi

# Activate the changes to redis.conf
sudo service redis-server restart

9.GitLab

# We'll install GitLab into the home directory of the user "git"
cd /home/git

ソースのクローンを作成する

Community Editionのクローンを作成する:

# Clone GitLab repository
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-foss.git -b <X-Y-stable> gitlab

Enterprise Editionのクローンを作成する:

# Clone GitLab repository
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab.git -b <X-Y-stable-ee> gitlab

インストールするバージョンに一致する安定したブランチで<X-Y-stable>を必ず置き換えてください。たとえば、11.8をインストールする場合は、ブランチ名11-8-stableを使用します。

「最新」バージョンが必要な場合は<X-Y-stable>masterに変更できますが、本番環境サーバーにmasterをインストールしないでください。

設定する

# Go to GitLab installation folder
cd /home/git/gitlab

# Copy the example GitLab config
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml

# Update GitLab config file, follow the directions at top of the file
sudo -u git -H editor config/gitlab.yml

# Copy the example secrets file
sudo -u git -H cp config/secrets.yml.example config/secrets.yml
sudo -u git -H chmod 0600 config/secrets.yml

# Make sure GitLab can write to the log/ and tmp/ directories
sudo chown -R git log/
sudo chown -R git tmp/
sudo chmod -R u+rwX,go-w log/
sudo chmod -R u+rwX tmp/

# Make sure GitLab can write to the tmp/pids/ and tmp/sockets/ directories
sudo chmod -R u+rwX tmp/pids/
sudo chmod -R u+rwX tmp/sockets/

# Create the public/uploads/ directory
sudo -u git -H mkdir -p public/uploads/

# Make sure only the GitLab user has access to the public/uploads/ directory
# now that files in public/uploads are served by gitlab-workhorse
sudo chmod 0700 public/uploads

# Change the permissions of the directory where CI job logs are stored
sudo chmod -R u+rwX builds/

# Change the permissions of the directory where CI artifacts are stored
sudo chmod -R u+rwX shared/artifacts/

# Change the permissions of the directory where GitLab Pages are stored
sudo chmod -R ug+rwX shared/pages/

# Copy the example Puma config
sudo -u git -H cp config/puma.rb.example config/puma.rb

# Refer to https://github.com/puma/puma#configuration for more information.
# You should scale Puma workers and threads based on the number of CPU
# cores you have available. You can get that number via the `nproc` command.
sudo -u git -H editor config/puma.rb

# Configure Redis connection settings
sudo -u git -H cp config/resque.yml.example config/resque.yml
sudo -u git -H cp config/cable.yml.example config/cable.yml

# Change the Redis socket path if you are not using the default Debian / Ubuntu configuration
sudo -u git -H editor config/resque.yml config/cable.yml

必ずgitlab.ymlpuma.rbの両方を編集して、セットアップと一致するようにしてください。

HTTPSを使用する場合は、追加の手順についてHTTPSの使用を参照してください。

GitLab DB設定を構成する

GitLab 15.9以降、セクションがmain:のみのdatabase.ymlは非推奨になりました。GitLab 17.0以降では、database.ymlmain:セクションとci:セクションの2つが必要です。

sudo -u git cp config/database.yml.postgresql config/database.yml

# Remove host, username, and password lines from config/database.yml.
# Once modified, the `production` settings will be as follows:
#
#   production:
#     main:
#       adapter: postgresql
#       encoding: unicode
#       database: gitlabhq_production
#     ci:
#       adapter: postgresql
#       encoding: unicode
#       database: gitlabhq_production
#       database_tasks: false
#
sudo -u git -H editor config/database.yml

# Remote PostgreSQL only:
# Update username/password in config/database.yml.
# You only need to adapt the production settings (first part).
# If you followed the database guide then please do as follows:
# Change 'secure password' with the value you have given to $password
# You can keep the double quotes around the password
sudo -u git -H editor config/database.yml

# Uncomment the `ci:` sections in config/database.yml.
# Ensure the `database` value in `ci:` matches the database value in `main:`.

# Make config/database.yml readable to git only
sudo -u git -H chmod o-rwx config/database.yml

database.ymlには、main:ci:の2つのセクションが必要です。ci: 接続は、同じデータベースへの接続である必要があります。

Gemsをインストールする

Bundler 1.5.2以降では、bundle install -jNNはプロセッサコアの数)を実行することで、gemの並列インストールを完了するのにかかる時間をかなり短縮(約60%高速)できます。nprocでコア数を確認してください。詳細については、こちらの投稿を参照してください。

bundleがあることを確認してください(bundle -vを実行):

ユーザー認証にKerberosを使用する場合は、以下のコマンドの--withoutオプションでkerberosを省略して、gemをインストールします:

sudo -u git -H bundle config set --local deployment 'true'
sudo -u git -H bundle config set --local without 'development test kerberos'
sudo -u git -H bundle config path /home/git/gitlab/vendor/bundle
sudo -u git -H bundle install

GitLab Shellをインストールする

GitLab Shellは、GitLabに特別に開発されたSSHアクセスおよびリポジトリ管理ソフトウェアです。

# Run the installation task for gitlab-shell:
sudo -u git -H bundle exec rake gitlab:shell:install RAILS_ENV=production

# By default, the gitlab-shell config is generated from your main GitLab config.
# You can review (and modify) the gitlab-shell config as follows:
sudo -u git -H editor /home/git/gitlab-shell/config.yml

HTTPSを使用する場合は、追加の手順についてHTTPSの使用を参照してください。

適切なDNSレコードまたは/etc/hostsの追加の行(「127.0.0.1ホスト名」)のいずれかによって、ホスト名をマシン自体で解決できることを確認してください。これは、たとえば、リバースプロキシの背後にGitLabを設定する場合に必要になる場合があります。ホスト名を解決できない場合、最終的なインストールチェックはCheck GitLab API access: FAILED. code: 401で失敗し、コミットのプッシュは[remote rejected] master -> master (hook declined)で拒否されます。

GitLab Workhorseをインストールする

GitLab-WorkhorseはGNU Makeを使用します。次のコマンドラインを使うと、推奨される場所である/home/git/gitlab-workhorseにGitLab-Workhorseをインストールします。

sudo -u git -H bundle exec rake "gitlab:workhorse:install[/home/git/gitlab-workhorse]" RAILS_ENV=production

追加のパラメータとして指定することで、別のGitリポジトリを指定できます:

sudo -u git -H bundle exec rake "gitlab:workhorse:install[/home/git/gitlab-workhorse,https://example.com/gitlab-workhorse.git]" RAILS_ENV=production

Enterprise EditionにGitLab-Elasticsearch-indexerをインストールする

  • プラン: Premium、Ultimate
  • 提供形態: GitLab Self-Managed

GitLab-Elasticsearch-IndexerはGNU Makeを使用します。次のコマンドラインを使うと、推奨される場所である/home/git/gitlab-elasticsearch-indexerにGitLab-Elasticsearch-Indexerをインストールします。

sudo -u git -H bundle exec rake "gitlab:indexer:install[/home/git/gitlab-elasticsearch-indexer]" RAILS_ENV=production

追加のパラメータとして指定することで、別のGitリポジトリを指定できます:

sudo -u git -H bundle exec rake "gitlab:indexer:install[/home/git/gitlab-elasticsearch-indexer,https://example.com/gitlab-elasticsearch-indexer.git]" RAILS_ENV=production

ソースコードはまず、最初のパラメータで指定されたパスにフェッチされます。次に、そのbinディレクトリの下にバイナリが構築されます。その後、gitlab.ymlproduction -> elasticsearch -> indexer_path設定を更新して、そのバイナリを指すようにします。

GitLab Pagesをインストールする

GitLab PagesはGNU Makeを使用します。この手順はオプションであり、GitLab内から静的サイトをホストする場合にのみ必要です。次のコマンドを使うと、/home/git/gitlab-pagesにGitLab Pagesをインストールします。追加の設定手順については、GitLab Pagesデーモンはいくつかの異なる方法で実行できるため、お使いのバージョンのGitLabの管理ガイドを参照してください。

cd /home/git
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-pages.git
cd gitlab-pages
sudo -u git -H git checkout v$(</home/git/gitlab/GITLAB_PAGES_VERSION)
sudo -u git -H make

Gitalyをインストールする

# Create and restrict access to the git repository data directory
sudo install -d -o git -m 0700 /home/git/repositories

# Fetch Gitaly source with Git and compile with Go
cd /home/git/gitlab
sudo -u git -H bundle exec rake "gitlab:gitaly:install[/home/git/gitaly,/home/git/repositories]" RAILS_ENV=production

追加のパラメータとして指定することで、別のGitリポジトリを指定できます:

sudo -u git -H bundle exec rake "gitlab:gitaly:install[/home/git/gitaly,/home/git/repositories,https://example.com/gitaly.git]" RAILS_ENV=production

次に、Gitalyが設定されていることを確認します:

# Restrict Gitaly socket access
sudo chmod 0700 /home/git/gitlab/tmp/sockets/private
sudo chown git /home/git/gitlab/tmp/sockets/private

# If you are using non-default settings, you need to update config.toml
cd /home/git/gitaly
sudo -u git -H editor config.toml

Gitalyの設定の詳細については、Gitalyのドキュメントを参照してください。

サービスをインストールする

GitLabは常にSysV initスクリプトをサポートしてきました。これは広くサポートされており、移植性がありますが、現在ではsystemdがサービス監視の標準であり、すべての主要なLinuxディストリビューションで使用されています。自動再起動、より優れたサンドボックス化、リソース制御のメリットを享受するには、可能な限りネイティブのsystemdサービスを使用する必要があります。

systemdユニットをインストールする

systemdをinitとして使用する場合は、次の手順を実行します。それ以外の場合は、SysV initスクリプトの手順に従ってください。

サービスをコピーしてsystemctl daemon-reloadを実行し、systemdがそれらを認識するようにします:

cd /home/git/gitlab
sudo mkdir -p /usr/local/lib/systemd/system
sudo cp lib/support/systemd/* /usr/local/lib/systemd/system/
sudo systemctl daemon-reload

GitLabによって提供されるユニットは、RedisおよびPostgreSQLを実行している場所について、ほとんど前提を置いていません。

GitLabを別のディレクトリにインストールした場合、またはデフォルト以外のユーザーとしてインストールした場合は、ユニット内のこれらの値も変更する必要があります。

たとえば、GitLabと同じマシンでRedisとPostgreSQLを実行している場合は、次の手順を実行する必要があります:

  • Pumaサービスを編集します:

    sudo systemctl edit gitlab-puma.service

    開いたエディタで、以下を追加してファイルを保存します:

    [Unit]
    Wants=redis-server.service postgresql.service
    After=redis-server.service postgresql.service
  • Sidekiqサービスを編集します:

    sudo systemctl edit gitlab-sidekiq.service

    以下を追加してファイルを保存します:

    [Unit]
    Wants=redis-server.service postgresql.service
    After=redis-server.service postgresql.service

systemctl editは、/etc/systemd/system/<name of the unit>.d/override.confにドロップイン設定ファイルをインストールするため、後でユニットファイルをアップグレードするときにローカル設定が上書きされることはありません。ドロップイン設定ファイルを分割するには、/etc/systemd/system/<name of the unit>.d/にある.confファイルに先程のスニペットを追加します。

systemctl editを使用せずに、ユニットファイルを手動で変更した場合、またはドロップイン設定ファイルを追加した場合は、次のコマンドを実行して有効にします:

sudo systemctl daemon-reload

ブート時にGitLabを起動させます:

sudo systemctl enable gitlab.target

SysV initスクリプトをインストールする

SysV initスクリプトを使用する場合は、次の手順を実行します。systemdを使用する場合は、systemdユニットの手順に従ってください。

initスクリプト(/etc/init.d/gitlab)をダウンロードします:

cd /home/git/gitlab
sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab

また、デフォルト以外のフォルダーまたはユーザーでインストールする場合は、デフォルトファイルをコピーして編集します:

sudo cp lib/support/init.d/gitlab.default.example /etc/default/gitlab

GitLabを別のディレクトリにインストールした場合、またはデフォルト以外のユーザーとしてインストールした場合は、/etc/default/gitlabでこれらの設定を変更する必要があります。アップグレード時に変更されるため、/etc/init.d/gitlabを編集しないでください。

ブート時にGitLabを起動させます:

sudo update-rc.d gitlab defaults 21
# or if running this on a machine running systemd
sudo systemctl daemon-reload
sudo systemctl enable gitlab.service

Logrotateを設定する

sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab

Gitalyを起動する

次のセクションでは、Gitalyが実行されている必要があります。

  • systemdを使用してGitalyを起動するには:

    sudo systemctl start gitlab-gitaly.service
  • SysV用にGitalyを手動で起動するには:

    gitlab_path=/home/git/gitlab
    gitaly_path=/home/git/gitaly
    
    sudo -u git -H sh -c "$gitlab_path/bin/daemon_with_pidfile $gitlab_path/tmp/pids/gitaly.pid \
      $gitaly_path/_build/bin/gitaly $gitaly_path/config.toml >> $gitlab_path/log/gitaly.log 2>&1 &"

データベースを初期化して高度な機能をアクティブにする

cd /home/git/gitlab
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production
# Type 'yes' to create the database tables.

# or you can skip the question by adding force=yes
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production force=yes

# When done, you see 'Administrator account created:'

次のコマンドに示すように、環境変数GITLAB_ROOT_PASSWORDおよびGITLAB_ROOT_EMAILで管理者/rootパスワードとメールアドレスを設定できます。パスワードを設定しない(デフォルトのパスワードに設定されている)場合は、インストールが完了し、最初にサーバーにログインするまで、GitLabをパブリックインターネットに公開しないでください。最初のログイン時に、デフォルトのパスワードの変更が強制されます。Enterprise Editionサブスクリプションは、このとき、GITLAB_ACTIVATION_CODE環境変数にアクティベーションコードを指定してアクティブにすることもできます。

sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production GITLAB_ROOT_PASSWORD=yourpassword GITLAB_ROOT_EMAIL=youremail GITLAB_ACTIVATION_CODE=yourcode

secrets.ymlをセキュアにする

secrets.ymlファイルには、セッションとセキュア変数のエンコードキーが格納されています。secrets.ymlを安全な場所にバックアップしますが、データベースのバックアップと同じ場所に保存しないでください。そうしないと、バックアップのいずれかが侵害された場合に、シークレットが公開されます。

アプリケーションの状態を確認する

GitLabとその環境が正しく設定されているかどうかを検証します:

sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production

アセットをコンパイルする

sudo -u git -H yarn install --production --pure-lockfile
sudo -u git -H bundle exec rake gitlab:assets:compile RAILS_ENV=production NODE_ENV=production

rakeJavaScript heap out of memoryエラーで失敗する場合は、次のようにNODE_OPTIONSを設定して実行してみてください。

sudo -u git -H bundle exec rake gitlab:assets:compile RAILS_ENV=production NODE_ENV=production NODE_OPTIONS="--max_old_space_size=4096"

GitLabインスタンスを起動する

# For systems running systemd
sudo systemctl start gitlab.target

# For systems running SysV init
sudo service gitlab start

10. NGINX

NGINXは、GitLabで公式にサポートされているウェブサーバーです。ウェブサーバーとしてNGINXを使用できない場合、または使用したくない場合は、GitLabレシピを参照してください。

インストール

sudo apt-get install -y nginx

サイトの設定

サイト設定の例をコピーします:

sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab

セットアップに合わせて設定ファイルを編集してください。特にgitユーザー以外のユーザー用にインストールする場合は、GitLabへのパスが一致していることを確認してください:

# Change YOUR_SERVER_FQDN to the fully-qualified
# domain name of your host serving GitLab.
#
# Remember to match your paths to GitLab, especially
# if installing for a user other than 'git'.
#
# If using Ubuntu default nginx install:
# either remove the default_server from the listen line
# or else sudo rm -f /etc/nginx/sites-enabled/default
sudo editor /etc/nginx/sites-available/gitlab

GitLab Pagesを有効にする場合は、別途NGINX設定を使用する必要があります。すべての必要な設定について、GitLab Pages管理者ガイドをお読みください。

HTTPSを使用する場合は、gitlab NGINX設定をgitlab-sslに置き換えます。HTTPS設定の詳細については、HTTPSの使用を参照してください。

NGINXがGitLab-Workhorseソケットを読み取れるようにするには、GitLabユーザーが所有するソケットをwww-dataユーザーが読み取れるようにする必要があります。これは、グローバルに読み取り可能である場合(たとえば、デフォルトで0755の権限を持っている場合)に実現できます。www-dataは、親ディレクトリをリストできる必要もあります。

設定をテストする

次のコマンドを使用して、gitlabまたはgitlab-ssl NGINX設定ファイルを検証します:

sudo nginx -t

syntax is okayおよびtest is successfulメッセージが表示されるはずです。エラーメッセージが表示される場合は、そこに示されているように、gitlabまたはgitlab-ssl NGINX設定ファイルにタイプミスがないか確認してください。

インストールされているバージョンが1.12.1以降であることを確認します:

nginx -v

それより前のバージョンの場合は、次のエラーが表示されることがあります:

nginx: [emerg] unknown "start$temp=[filtered]$rest" variable
nginx: configuration file /etc/nginx/nginx.conf test failed

再起動

# For systems running systemd
sudo systemctl restart nginx.service

# For systems running SysV init
sudo service nginx restart

インストール後

アプリケーションの状態を再確認

何か見落としがないか確認するには、次のコマンドでより徹底的なチェックを実行します:

sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production

すべての項目が緑色の場合は、GitLabのインストールに成功しました。

チェックコマンドの出力からプロジェクト名を省略するには、SANITIZE=true環境変数をgitlab:checkに指定します。

最初のログイン

GitLabに初めてログインするには、ウェブブラウザでYOUR_SERVERにアクセスします。

セットアップ中にrootパスワードを指定しなかった場合は、パスワードリセット画面にリダイレクトされ、最初の管理者アカウントのパスワードを指定するように求められます。希望するパスワードを入力すると、ログイン画面にリダイレクトされます。

デフォルトのアカウントのユーザー名はrootです。作成したパスワードを入力してログインします。ログイン後、必要に応じてユーザー名を変更できます。

ご利用可能になりました

以下を使用するときにGitLabを起動および停止するには:

  • systemdユニット: sudo systemctl start gitlab.targetまたはsudo systemctl stop gitlab.targetを使用します。
  • SysV initスクリプト: sudo service gitlab startまたはsudo service gitlab stopを使用します。

インストールが完了したら、推奨される次の手順(認証オプションやサインアップ制限など)を実行することを検討してください。

高度な設定のヒント

相対URLのサポート

相対URLでGitLabを設定する方法の詳細については、相対URLドキュメントを参照してください。

HTTPSを使用する

HTTPSでGitLabを使用するには:

  1. gitlab.ymlで:
    1. セクション1のportオプションを443に設定します。
    2. セクション1のhttpsオプションをtrueに設定します。
  2. GitLab Shellのconfig.ymlで:
    1. gitlab_urlオプションをGitLabのHTTPSエンドポイント(たとえば、https://git.example.com)に設定します。
    2. ca_fileまたはca_pathオプションのいずれかを使用して証明書を設定します。
  3. gitlab設定ではなく、gitlab-ssl NGINXのサンプル設定を使用します。
    1. YOUR_SERVER_FQDNを更新します。
    2. ssl_certificatessl_certificate_keyを更新します。
    3. 設定ファイルを確認し、他のセキュリティおよびパフォーマンス強化機能の適用を検討してください。

自己署名証明書を使用することはおすすめできません。どうしても使用する必要がある場合は、標準的な指示に従って自己署名SSL証明書を生成します:

mkdir -p /etc/nginx/ssl/
cd /etc/nginx/ssl/
sudo openssl req -newkey rsa:2048 -x509 -nodes -days 3560 -out gitlab.crt -keyout gitlab.key
sudo chmod o-r gitlab.key

メールによる返信を有効にする

このセットアップ方法の詳細については、「メールで返信」ドキュメントを参照してください。

LDAP認証

config/gitlab.ymlでLDAP認証を設定できます。このファイルを編集した後、GitLabを再起動します。

カスタムOmniAuthプロバイダーを使用する

OmniAuthインテグレーションドキュメントを参照してください。

プロジェクトをビルドする

GitLabではプロジェクトをビルドできます。その機能を有効にするには、それを行うためのRunnerが必要です。Runnerをインストールするには、GitLab Runnerセクションを参照してください。

信頼できるプロキシを追加する

別のマシンでリバースプロキシを使用している場合は、プロキシを信頼できるプロキシリストに追加することをお勧めします。そうしないと、ユーザーはプロキシのIPアドレスから署名インしたように表示されます。

config/gitlab.ymlで、セクション1のtrusted_proxiesオプションをカスタマイズすることにより、信頼できるプロキシを追加できます。ファイルを保存し、変更を有効にするためにGitLabを再構成します。

URLで不適切にエンコードされた文字に関する問題が発生した場合は、エラー: リバースプロキシの使用時に404 Not Foundを参照してください。

カスタムRedis接続

非標準ポートまたは別のホストでRedisサーバーに接続する場合は、config/resque.ymlファイルを使用して接続文字列を設定できます。

# example
production:
  url: redis://redis.example.tld:6379

ソケット経由でRedisサーバーに接続する場合は、unix: URLスキームと、config/resque.ymlファイル内のRedisソケットへのパスを使用します。

# example
production:
  url: unix:/path/to/redis/socket

また、config/resque.ymlファイルで環境変数を使用することもできます:

# example
production:
  url: <%= ENV.fetch('GITLAB_REDIS_URL') %>

カスタムSSH接続

非標準ポートでSSHを実行している場合は、GitLabユーザーのSSH設定を変更する必要があります。

# Add to /home/git/.ssh/config
host localhost          # Give your setup a name (here: override localhost)
    user git            # Your remote git user
    port 2222           # Your port number
    hostname 127.0.0.1; # Your server name or IP

また、config/gitlab.ymlファイルで対応するオプション(ssh_userssh_hostadmin_uriなど)も変更する必要があります。

追加のマークアップスタイル

常にサポートされているMarkdownスタイルとは別に、GitLabが表示できるリッチテキストファイルが他にもあります。ただし、これを行うには、依存関係をインストールする必要がある場合があります。詳細については、github-markup gem Readmeを参照してください。

Prometheusサーバーの設定

config/gitlab.ymlでPrometheusサーバーを設定できます:

# example
prometheus:
  enabled: true
  server_address: '10.1.2.3:9090'

トラブルシューティング

「空のリポジトリを複製したようです」

GitLabがホストするリポジトリを複製しようとしたときにこのメッセージが表示される場合、これは、NGINXまたはApacheの設定が古くなっているか、GitLab Workhorseインスタンスがないか、誤って設定されていることが原因である可能性があります。Goをインストールし、GitLab Workhorseをインストールし、NGINXを正しく設定したことを再確認してください。

google-protobuf「LoadError: /lib/x86_64-linux-gnu/libc.so.6: バージョン ‘GLIBC_2.14’ が見つかりません」

これは、一部のバージョンのgoogle-protobuf gemを使うプラットフォームで発生する可能性があります。回避策は、このgemのソースのみのバージョンをインストールすることです。

まず、GitLabインストールに必要なgoogle-protobufの正確なバージョンを見つける必要があります:

cd /home/git/gitlab

# Only one of the following two commands will print something. It
# will look like: * google-protobuf (3.2.0)
bundle list | grep google-protobuf
bundle check | grep google-protobuf

次のコマンドでは、3.2.0を例として使用しています。これを先ほど見つけたバージョン番号に置き換えてください:

cd /home/git/gitlab
sudo -u git -H gem install google-protobuf --version 3.2.0 --platform ruby

最後に、google-protobufが正しく読み込まれるかどうかをテストできます。次はOKと表示されるはずです。

sudo -u git -H bundle exec ruby -rgoogle/protobuf -e 'puts :OK'

gem installコマンドが失敗する場合は、OSのデベロッパーツールをインストールする必要があるかもしれません。

Debian/Ubuntuの場合:

sudo apt-get install build-essential libgmp-dev

RedHat/CentOSの場合:

sudo yum groupinstall 'Development Tools'

GitLabアセットのコンパイルエラー

アセットをコンパイル中に、次のエラーメッセージが表示されることがあります:

Killed
error Command failed with exit code 137.

これは、Yarnがメモリ不足で実行されているコンテナを強制終了した場合に発生する可能性があります。これを修正するには:

  1. システムのメモリを8 GiB以上に増やします。

  2. 次のコマンドを実行して、アセットをクリーンアップします:

    sudo -u git -H bundle exec rake gitlab:assets:clean RAILS_ENV=production NODE_ENV=production
  3. yarnコマンドを再度実行して、競合を解決します:

    sudo -u git -H yarn install --production --pure-lockfile
  4. アセットを再コンパイルします:

    sudo -u git -H bundle exec rake gitlab:assets:compile RAILS_ENV=production NODE_ENV=production