セルフコンパイルインストール

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

このガイドが長いのは、多くのケースをカバーし、必要なコマンドをすべて含んでいるからです。以下の手順で動作することが確認されています。このガイドから外れる場合は注意してください。GitLabの環境に関する仮定に違反しないようにしてください。例えば、ディレクトリの場所を変更したり、間違ったユーザーとしてサービスを実行したりしたために、多くの人が権限の問題に遭遇します。

このガイドにバグやエラーを見つけた場合は、貢献するガイドに従って マージリクエストを提出してください。

Linuxパッケージのインストールを考える

セルフコンパイルによるインストールは手間がかかり、エラーも発生しやすいため、高速で信頼性の高いLinuxパッケージインストール(deb/rpm)を強くお勧めします。

Linuxパッケージがより信頼できる理由の一つは、GitLabプロセスがクラッシュした場合に再起動するためのrunitの使用です。使用頻度の高いGitLabインスタンスでは、Sidekiqバックグラウンドワーカーのメモリ使用量は時間とともに増大します。Linuxのパッケージは、Sidekiqがメモリを使い過ぎると優雅に終了させることでこれを解決しています。この終了の後、runitはSidekiqが実行されていないことを検知して起動します。自己コンパイルインストールでは、プロセス監視にrunitを使用しないため、Sidekiqは終了できず、そのメモリ使用量は時間とともに増加します。

インストールするバージョンを選択してください。

このインストールガイドは、インストールしたいGitLabのブランチ(バージョン)からご覧ください(例:16-0-stable )。GitLabの左上(メニューバーの下)にあるバージョンのドロップダウンリストでブランチを選択できます。

一番番号の大きい安定ブランチが不明な場合は、GitLabブログでバージョン別のインストールガイドリンクを確認してください。

ソフトウェアの要件

ソフトウェア最小バージョン備考
Ruby3.0.xGitLab 15.10からはRuby 3.0が必要です。Rubyの標準的なMRI実装を使用する必要があります。私たちはJRubyと Rubiniusを愛用していますが、GitLabにはネイティブ拡張を持ついくつかのGemsが必要です。
RubyGems3.4.x特定のRubyGemsのバージョンは完全には必要ではありませんが、既知のパフォーマンス向上を享受できるようにアップデートすることをお勧めします。
Go1.19.xGitLab 16.1からは、Go 1.19以降が必要です。
Git2.41.xGitLab 16.2から、Git 2.41.x以降が必要です。Gitalyが提供するGitのバージョンを使用してください。
Node.js18.17.xGitLab 16.3からはNode.js 18.17以降が必要です。

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のCoreアドオンコンポーネント。SSHクローンやその他の機能をメンテナー。
  • /home/git/repositories - 名前空間ごとに整理された全プロジェクトのベアリポジトリ。プッシュ/プルされたGitリポジトリがすべてのプロジェクトで管理されています。プロジェクトにとって重要なデータが格納されています。バックアップを取っておきましょう。

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

より詳細な概要については、GitLabアーキテクチャドキュメントを参照してください。

概要

GitLabのインストールは以下のコンポーネントのセットアップから構成されます:

  1. パッケージと依存関係
  2. Ruby.
  3. RubyGems
  4. 行ってください。
  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 gemsのネイティブ拡張に必要)をインストールします:

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

Git

GitLab 13.6からは、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をコンパイルします。<X-Y-stable> 、インストールしたいGitLabのバージョンに合った安定ブランチに置き換えてください。例えば、GitLab 13.6をインストールしたい場合、ブランチ名13-6-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
    
  • To:

     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 を押してホスト名を確認します。

Exifツール

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

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

2. Ruby

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

RVM,rbenv,chruby のようなRubyバージョンマネージャをGitLabと一緒に使用すると、診断が難しい問題が頻繁に発生します。バージョンマネージャはサポートされていませんので、システムRubyを使用する場合は以下の指示に従うことを強くお勧めします。

Linuxディストリビューションでは一般的に古いバージョンのRubyが利用可能なので、これらの手順は公式のソースコードからRubyをインストールするように設計されています。

Rubyをインストールします。

3.RubyGems

RubyにバンドルされているRubyGemsよりも新しいバージョンが必要になることがあります。

特定のバージョンにアップデートするには

gem update --system 3.4.12

または最新バージョン

gem update --system

4.移動

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.19.10.linux-amd64.tar.gz"
echo '8b045a483d3895c6edba2e90a9189262876190dbbd21756870cdd63821810677  go1.19.10.linux-amd64.tar.gz' | shasum -a256 -c - && \
  sudo tar -C /usr/local -xzf go1.19.10.linux-amd64.tar.gz
sudo ln -sf /usr/local/go/bin/{go,gofmt} /usr/local/bin/
rm go1.19.10.linux-amd64.tar.gz

5.ノード

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

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

多くのディストリビューションでは、公式パッケージリポジトリが提供するバージョンは古いため、以下のコマンドでインストールする必要があります:

# install node v18.x
curl --location "https://deb.nodesource.com/setup_18.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.データベース

note
GitLab 12.1以降では、PostgreSQLのみがサポートされています。GitLab 16.0以降では、PostgreSQL 13+が必要です。
  1. データベースパッケージをインストールします。

    Ubuntu 20.04以降の場合:

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

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

    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
    sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
    sudo apt update
    sudo apt -y install postgresql-12 postgresql-client-12 libpq-dev
    
  2. お持ちの PostgreSQL のバージョンが、インストールする GitLab のバージョンでサポートされていることを確認してください:

    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 エクステンションを作成します(GitLab 13.1+ で必要):

    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

ソースのクローン

クローンコミュニティ版:

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

クローンエンタープライズ版:

# 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 を使用します。

caution
master ブリーディングエッジバージョンが必要 masterな場合は<X-Y-stable> に変更することもmaster できますが、 master運用サーバーには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の設定

note
GitLab 15.9以降、database.yml 、section: のみの設定はmain: 非推奨 main:です。main: GitLab 17. main:0以降では、database.ymlmain: 2つの main:セクションとci: セクションがmain: 必要 main:です。
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: 接続先は同じデータベースでなければなりません。何らかの理由で単一のデータベース接続を維持したい場合は、config/database.ymlからci: セクションを削除してください。

Gemsのインストール

note
Bundler 1.5.2では、bundle install -jN (N はプロセッサコアの数です)を呼び出して、並列gemsインストールを楽しむことができます。nprocでコア数を確認してください。詳しくはこちらの投稿をご覧ください。

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

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

sudo -u git -H bundle config set --local deployment 'true'
sudo -u git -H bundle config set --local without 'development test mysql aws 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 hostname”)の追加行によって、ホスト名がマシン上で解決できることを確認します。これは、リバースプロキシの後ろにGitLabをセットアップする場合などに必要です。ホスト名が解決できない場合、最終的なインストールチェックはCheck GitLab API access: FAILED. code: 401 で失敗し、コミットのプッシュは[remote rejected] master -> master (hook declined) で拒否されます。

GitLab Workhorseのインストール

GitLab-WorkhorseはGNU Makeを使用しています。以下のコマンドラインはGitLab-Workhorseを/home/git/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

GitLab-Elasticsearch-indexerをEnterprise Editionにインストールします。

GitLab-Elasticsearch-Indexer はGNU Make を使用しています。以下のコマンドラインはGitLab-Elasticsearch-Indexerを/home/git/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内から静的サイトをホストしたい場合にのみ必要です。以下のコマンドは、GitLab Pages を/home/git/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のインストール

# 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スクリプトをサポートしてきました。SysVは広くサポートされており、ポータブルですが、今ではsystemdがサービス監視の標準となっており、すべての主要なLinuxディストリビューションで使われています。自動再起動、より良いサンドボックス、リソース制御の恩恵を受けるために、可能であればネイティブのsystemdサービスを使うべきです。

systemd ユニットのインストール

initとしてsystemdを使用する場合は、この手順を使用してください。そうでない場合は、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を別のディレクトリにインストールした場合やデフォルト以外のユーザーでインストールした場合は、これらの値もユニットで変更する必要があります。

例えば、RedisとPostgreSQLをGitLabと同じマシンで動かしている場合、次のようにします:

  • 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 unitの手順に従ってください。

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

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

デフォルト以外のフォルダやユーザーでインストールする場合は、defaultsファイルをコピーして編集してください:

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
    
  • 手動でGitaly for SysVを起動するには:

     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_PASSWORDGITLAB_ROOT_EMAIL で設定します。パスワードを設定しない(デフォルトのパスワードが設定されている)場合は、インストールが終わってサーバーに初回ログインするまで、GitLabを公開するのを待ちましょう。初回ログイン時に、デフォルトのパスワードを変更するよう強制されます。Enterprise版のサブスクリプションは、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 を安全な場所にバックアップしますが、データベースのバックアップと同じ場所には保存しないでください。そうしないと、バックアップの1つが漏洩した場合、シークレットが漏洩してしまいます。

アプリケーションステータスの確認

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 設定の詳細については、Using HTTPSを参照してください。

NGINXがGitLab-Workhorseソケットを読めるようにするには、www-data 、GitLabユーザーが所有するソケットを読めるようにする必要があります。これは、例えばパーミッションが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 のインストール成功です!

note
環境変数SANITIZE=truegitlab:check に指定すると、check コマンドの出力からプロジェクト名を省くことができます。

初期ログイン

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

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

初期アカウントのユーザー名はroot です。先ほど作成したパスワードを入力してログインします。ログイン後、必要に応じてユーザー名を変更することができます。

お楽しみください!

GitLabを起動・停止するには:

  • systemd units: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 を使う

GitLabをHTTPSで使うには:

  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_certificate およびssl_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が必要です。GitLab Runnerセクションを参照してインストールしてください。

信頼できるプロキシの追加

別のマシンでリバースプロキシを使っている場合は、そのプロキシを信頼済みプロキシのリストに追加してください。そうしないと、ユーザーはプロキシのIPアドレスからサインインしているように見えます。

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

カスタム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_user,ssh_host,admin_uri)も変更する必要があります。

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

常にサポートされているMarkdownスタイルとは別に、GitLabが表示できるリッチテキストファイルがあります。しかし、そのためには依存関係をインストールする必要があるかもしれません。詳しくはgithub-markup gem README をご覧ください。

Prometheusサーバーのセットアップ

Prometheus サーバーの設定はconfig/gitlab.yml で行います:

# 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. システムのメモリを少なくとも8GBに増やしてください。

  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