Ubuntu + Apache2 でサブディレクトリで GitLab を使う

やりたいこと

  • Ubuntu と Apache2 が走っているローカルサーバに GitLab CE を導入する
    • ローカルサーバなので自分専用か身内専用になる
  • サブディレクトリ (http://192.168.x.x/gitlab/) で運用する
    • ディレクトリ (http://192.168.x.x/) では既に別のサイトを運用しているとする

環境

OSUbuntu Server 16.04.2 LTS
ウェブサーバApache HTTP Server 2.4.18
IP アドレス192.168.x.x

手順

GitLab CE をインストールする

以下のページの内容に従う。URL に ?version=ce が付いていないと GitLab EE 向けの手順になる点に注意。 about.gitlab.com

メール送信機能を一切使うつもりがないのなら Postfix のインストールを飛ばしても良いと思う。

Passenger をインストールする

GitLab を Apache2 でサブディレクトリで運用するために Passenger が必要になる。

必要に応じて Ruby と Make をインストールする。*1

$ sudo apt install ruby
$ sudo apt install make

Passenger をインストールする。*2

$ sudo gem install passenger

Apache2 用 Passenger モジュールをインストールする。*3

$ sudo passenger-install-apache2-module

上のコマンドを打つと出てくる案内に従う。

エラーが出てもどうすれば良いかをきちんと教えてくれるので、その指示に従うこと。(必要なパッケージがないからインストールしろみたいなこと)

途中で Apache2 の設定ファイルに追加すべき内容が表示されたら、それをコピーして /etc/apache2/apache2.conf の末尾に貼り付ける。

あくまで例だが、こういう内容の物:

LoadModule passenger_module /var/lib/gems/2.5.0/gems/passenger-5.3.4/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /var/lib/gems/2.5.0/gems/passenger-5.3.4
  PassengerDefaultRuby /usr/bin/ruby2.5
</IfModule>

GitLab を Apache2 に対応させる

GitLab は標準では Nginx を使おうとするので、これを Apache2 を使うように変更する必要がある。

/etc/gitlab/gitlab.rb を編集する

以下のページの内容に従い、Apache2 用設定ファイルをダウンロードする直前まで進める。

docs.gitlab.com

上のページに書かれていないがしておくべき設定:

external_url の引数に適切な URL を指定する。

external_url 'http://192.168.x.x/gitlab'

タイムゾーンUTC から JST に変更する。

gitlab_rails['time_zone'] = 'Asia/Tokyo'

最後に GitLab を再起動した方が良いかもしれない。

$ sudo gitlab-ctl restart
Apache2 用設定ファイルを配置して編集する

以下のリポジトリから適切な設定ファイルを選択してダウンロードまたはコピペする。

gitlab.com

今回は GitLab Omnibus パッケージ、Apache 2.4 を利用していて、SSL は利用しないので、gitlab-omnibus-apache24.conf を選択する。

これを /etc/apache2/sites-available/gitlab.conf に配置する。(ファイル名は何でも良いが)

gitlab.conf が依存するモジュールを有効化する。

$ sudo a2enmod rewrite
$ sudo a2enmod proxy
$ sudo a2enmod proxy_http

gitlab.conf を以下のように編集する。書き換えポイントには日本語でコメントを付けた。元々あったコメントは省略した。

<VirtualHost *:80>
  ServerName 192.168.x.x # 書き換え
  ServerSignature Off

  ProxyPreserveHost On

  AllowEncodedSlashes NoDecode

  Alias /gitlab /opt/gitlab/embedded/service/gitlab-rails/public # 追加

  <Location /gitlab> # 書き換え
    PassengerBaseURI /gitlab # 追加
    PassengerAppRoot /opt/gitlab/embedded/service/gitlab-rails # 追加

    Require all granted

    ProxyPassReverse http://127.0.0.1:8181
    ProxyPassReverse http://192.168.x.x/gitlab # 書き換え

 # </Location> # Location をここで閉じない

    RewriteEngine on

    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_URI} ^/uploads/.*
    RewriteRule .* http://127.0.0.1:8181%{REQUEST_URI} [P,QSA,NE]

  </Location> # Location の範囲をここまで広げる

  # DocumentRoot /opt/gitlab/embedded/service/gitlab-rails/public # コメントアウトまたは削除する

  ErrorDocument 404 /gitlab/404.html # 書き換え
  ErrorDocument 422 /gitlab/422.html # 書き換え
  ErrorDocument 500 /gitlab/500.html # 書き換え
  ErrorDocument 502 /gitlab/502.html # 書き換え
  ErrorDocument 503 /gitlab/503.html # 書き換え

  LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded
  ErrorLog /var/log/apache2/gitlab_error.log # 書き換え
  CustomLog /var/log/apache2/gitlab_forwarded.log common_forwarded # 書き換え
  CustomLog /var/log/apache2/gitlab_access.log combined env=!dontlog # 書き換え
  CustomLog /var/log/apache2/gitlab.log combined # 書き換え

</VirtualHost>

gitlab.conf の編集が済んだら、この設定を有効化する。

$ sudo a2ensite gitlab

Apache2 を再起動する。

$ sudo service apache2 restart

/uploads ディレクトリのパーミッションを変更する

自分の環境ではこのディレクトリのパーミッションが 700 になっていて、ユーザがアップロードしたアイコン画像が表示できない状態になっていた。

$ sudo ls -ld /opt/gitlab/embedded/service/gitlab-rails/public/uploads/
drwx------ 4 git root 4096  8月  8 02:28 /opt/gitlab/embedded/service/gitlab-rails/public/uploads/

$ sudo chmod 711 /opt/gitlab/embedded/service/gitlab-rails/public/uploads/

$ sudo ls -ld /opt/gitlab/embedded/service/gitlab-rails/public/uploads/
drwx--x--x 4 git root 4096  8月  8 02:28 /opt/gitlab/embedded/service/gitlab-rails/public/uploads/

ブラウザでアクセスしてみる

ブラウザで http://192.168.x.x/gitlab にアクセスする。

パスワード設定画面にリダイレクトしたら適当なパスワードを設定する。

ログイン画面にリダイレクトしたらユーザ名欄に root、パスワード欄に上で決めた物を入力し、ログインできたら成功。

参考にしたページ

*1:Ruby のインストール方法はいくつかあるが、ここでは簡単のため APT を用いた方法を載せている。

*2:Ruby をホームディレクトリ以下にインストールした場合は sudo を付けない。

*3:同上