GitBucket を Ubuntu 14.04 LTS にインストール

リポジトリの最大容量的に GitHub では扱えないデータがあって、自前 Git サーバを立てることに。以前に GitLab を使っていたが、いい思い出がなかったので今回は GitBucket を使うことに。

VM とかでテストせずに直接運用中の Ubuntu サーバにインストールしたので、あとで Ansible Playbook にまとめたりするために手順を残しておく。

Oracle Java 8 のインストール

Ubuntu にOracle Java 8 (PPA)をインストールする(ubuntu) - Qiita

これを参考にインストール。

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer

$ sudo apt-get install oracle-java8-set-default

Ansible とか使ってインストールする場合は、ライセンス同意を自動化するように設定する。
Install Oracle Java 8 In Ubuntu Or Linux Mint Via PPA Repository [JDK8]

JAVA_HOME のパスは /usr/lib/jvm/java-8-oracle

Jetty のインストール

Jetty 8 が apt リポジトリにあったので、それを利用。

$ sudo aptitude install jetty8

/usr/share/jetty8 ディレクトリに etclogswebapps へのシンボリックリンクが集まっている。

Jetty の起動設定

/etc/default/jetty8 ファイルを次のように編集。Nginx をフロントに立てるので 127.0.0.1:8080 で稼動させる。

# change to 0 to allow Jetty to start
NO_START=0

# change to 'no' or uncomment to use the default setting in /etc/default/rcS
VERBOSE=yes

# Run Jetty as this user ID (default: jetty)
# Set this to an empty string to prevent Jetty from starting automatically
#JETTY_USER=jetty

# Listen to connections from this network host
# Use 0.0.0.0 as host to accept all connections.
# Uncomment to restrict access to localhost
JETTY_HOST=127.0.0.1

# The network port used by Jetty
JETTY_PORT=8080

# Timeout in seconds for the shutdown of all webapps
#JETTY_SHUTDOWN=30

# Additional arguments to pass to Jetty
#JETTY_ARGS=

# Extra options to pass to the JVM
JAVA_OPTIONS="-Xmx1024m -Djava.awt.headless=true"

# Home of Java installation.
JAVA_HOME=/usr/lib/jvm/java-8-oracle

まだ起動はさせない。

GitBucket のインストール

データ保存ディレクトリの作成

/home/gitbucket ディレクトリにデータを置くことに。ここに Jetty 実行ユーザーの jetty がデータを書き込めるようにグループ権限を設定。

$ sudo groupadd gitbucket
$ sudo usermod -G gitbucket jetty

$ sudo mkdir /home/gitbucket
$ sudo chgrp gitbucket /home/gitbucket
$ sudo chmod g+s /home/gitbucket

環境変数のセット

GITBUCKET_HOME 環境変数に上で作成したデータ保存ディレクトリを指定するため、/etc/environment ファイルに次の行を追加。

GITBUCKET_HOME=/home/gitbucket

この GITBUCKET_HOME についての記述がインストールドキュメントになかったので、ちょっと嵌まってた。
デフォルトでは Jetty 実行ユーザーのホームディレクトリ直下の /usr/share/jetty8/.gitbucket にディレクトリを作成しようとするが、パーミッションエラー(このディレクトリのオーナーは root)となり GitBucket を起動できない。

gitbucket.war のダウンロード

https://github.com/gitbucket/gitbucket#installation
ドキュメントに記載されているように gitbucket.war をダウンロードする。

$ sudo wget https://github.com/gitbucket/gitbucket/releases/download/3.8/gitbucket.war /usr/share/jetty8/webapps/gitbucket.war
$ sudo chown jetty /usr/share/jetty8/webapps/gitbucket.war

Jetty の起動

$ sudo /etc/init.d/jetty8 start

Nginx の設定

Nginx は既にインストールして稼動していたので、そこに設定を加える。
公式 Wiki にある Reverse proxy with Nginx を参考に、というかそのまま。

いろいろ省略しているが以下のような設定。ちなみに client_max_body_size の 500MB を超えるデータを HTTP で Push しようとした場合、413 ステータスエラーが返ってくる。

http {

  proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=cache:512m inactive=1d max_size=60g;

  server {

    location /gitbucket {
      proxy_pass              http://127.0.0.1:8080;
      proxy_set_header        Host $host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_connect_timeout   150;
      proxy_send_timeout      100;
      proxy_read_timeout      100;
      proxy_buffers           4 32k;
      client_max_body_size    500m; # Big number is we can post big commits.
      client_body_buffer_size 128k;

      location /gitbucket/assets/ {
        proxy_pass            http://127.0.0.1:8080/gitbucket/assets/;
        proxy_cache           cache;
        proxy_cache_key       $host$uri$is_args$args;
        proxy_cache_valid     200 301 302 1d;
        expires               1d;
      }
    }

  }
}

proxy キャッシュ用のディレクトリを作成して、Nginx を再起動する。

$ sudo mkdir /var/lib/nginx/cache
$ sudo chown www-data /var/lib/nginx/cache
$ sudo chmod 700 /var/lib/nginx/cache

$ sudo /etc/init.d/nginx restart
Last updated on December 26, 2015