Ubuntu + Apache2 でサブディレクトリで GitLab を使う
やりたいこと
- Ubuntu と Apache2 が走っているローカルサーバに GitLab CE を導入する
- ローカルサーバなので自分専用か身内専用になる
- サブディレクトリ (
http://192.168.x.x/gitlab/
) で運用する- 親ディレクトリ (
http://192.168.x.x/
) では既に別のサイトを運用しているとする
- 親ディレクトリ (
環境
OS | Ubuntu 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 用設定ファイルをダウンロードする直前まで進める。
上のページに書かれていないがしておくべき設定:
external_url
の引数に適切な URL を指定する。
external_url 'http://192.168.x.x/gitlab'
gitlab_rails['time_zone'] = 'Asia/Tokyo'
最後に GitLab を再起動した方が良いかもしれない。
$ sudo gitlab-ctl restart
Apache2 用設定ファイルを配置して編集する
以下のリポジトリから適切な設定ファイルを選択してダウンロードまたはコピペする。
今回は 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、パスワード欄に上で決めた物を入力し、ログインできたら成功。