GitBucketをインストールする（Apache+GitBucket内蔵HTTPサーバ）

概要
----

### 前提

* 小規模環境での利用しかしていないので、複数のWEBサービスを一つのサーバ上で動かすことを想定しています。
* 一つのサービスを一つのアカウントで実行し、サービスデータのバックアップは実行アカウントのホームディレクトリのバックアップだけで済むようにします。


### 構成

#### ユーザ環境

```text
/var/lib/git/
├─etc/
│  ├─httpd.conf          => apache設定ファイル
│  ├─logrotate.conf      => ログローテート設定ファイル
│  ├─init.conf           => upstart起動設定ファイル
│  └─service.conf        => systemd起動設定ファイル
└─gitbucket/
    ├─gitbucket-3.X.war   => gitbucketプログラム
    ├─gitbucket.war       => ~git/gitbucket/gitbucket-3.X.war のシンボリックリンク
    └─startup.sh          => gitbucket起動スクリプト
```

#### システム環境

```text
/etc/
├─apache2/sites-available/
│  └─gitbucket.conf      => ~git/etc/httpd.conf のシンボリックリンク
├─httpd/conf.d/
│  └─gitbucket.conf      => ~git/etc/httpd.conf のシンボリックリンク
├─logrotate.d/
│  └─gitbucket           => ~git/etc/logrotate.conf のシンボリックリンク
├─init/
│  └─gitbucket.conf      => ~git/etc/init.conf のシンボリックリンク
└─systemd/system/
    └─gitbucket.service   => ~git/etc/service.conf のシンボリックリンク

/var/log/git/
    └─gitbucket.log       => ログファイル

/var/run/git/
    └─gitbucket.pid       => PIDファイル
```


準備
----

### システム環境（CentoOS 7）

* パッケージ追加

```sh
$ sudo yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
```

* ユーザ追加

```sh
$ sudo useradd --system -g apache -c "Git repository" -m -d /var/lib/git -s /bin/bash git
```


### システム環境（Ubuntu 14.04）

* パッケージ追加

```sh
$ 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
```

* ユーザ追加

```sh
$ sudo mkdir -p /var/lib
$ sudo useradd --system -g www-data -c "Git repository" -m -d /var/lib/git -s /bin/bash git
```


インストール
------------

### ユーザ環境

#### gitbucketインストール

* ディレクトリ作成

```sh
$ sudo su - git
$ mkdir ~/{etc,gitbucket}
```

* リリース版のファイル取得

```sh
$ wget -O ~/gitbucket/gitbucket-3.11.war https://github.com/takezoe/gitbucket/releases/download/3.11/gitbucket.war
$ ln -sf ~/gitbucket/gitbucket-3.11.war ~/gitbucket/gitbucket.war
```


#### gitbucket起動ファイル作成

```sh
$ cat <<'EOS' | tee ~/gitbucket/startup.sh
#!/bin/bash

PORT=9080
APPHOME=/var/lib/git/gitbucket
APPFILE=$APPHOME/gitbucket.war
LOGFILE=/var/log/git/gitbucket.log

cd $APPHOME
java -jar $APPFILE --port=$PORT --prefix=/gitbucket --gitbucket.home=$APPHOME >> $LOGFILE 2>&1
EOS
```
```sh
$ chmod a+x ~/gitbucket/startup.sh
```

#### apache設定ファイル作成

```sh
$ cat <<EOS | tee ~/etc/httpd.conf
<Location /gitbucket>
    Options -MultiViews
    BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On

    ProxyPass        http://127.0.0.1:9080/gitbucket
    ProxyPassReverse http://127.0.0.1:9080/gitbucket

    Require all granted
</Location>
EOS
```

#### ログローテート設定ファイル作成

```sh
$ cat <<EOS | tee ~/etc/logrotate.conf
/var/log/git/gitbucket.log {
	weekly
	coppytruncate
	rotate 52
	ocmpress
	delaycompress
	notifempty
}
EOS
```


### システム環境（CentOS 7）

* ディレクトリ作成

```sh
$ sudo mkdir /var/{log,run}/git
$ sudo chown git:apache /var/{log,run}/git
```

* systemd起動設定ファイル作成

```sh
$ cat <<EOS | sudo tee /etc/service.conf
[Unit]
Description=GitBucket service
After=syslog.target
After=network.target

[Service]
Type=simple
PIDFile=/var/run/git/gitbucket.pid
User=git
Group=apache
WorkingDirectory=$HOME/gitbucket
ExecStart=$HOME/gitbucket/startup.sh

[Install]
WantedBy=multi-user.target
EOS
```

* systemd起動設定

```sh
$ sudo systemctl enable gitbucket.service

# 確認
$ sudo journalctl -xn
$ systemctl list-unit-files | grep gitbucket
```

* gitbucket起動

```sh
$ sudo systemctl start gitbucket.service

# 確認
$ systemctl status -l gitbucket.service
```

* apache連携設定

```sh
$ sudo ln -sf ~git/etc/httpd.conf /etc/httpd/conf.d/gitbucket.conf
$ sudo systemctl reload httpd.service

# 確認
$ systemctl status httpd.service
$ sudo journalctl -xn
```


### システム環境（Ubuntu 14.04）

* ディレクトリ作成

```sh
$ sudo mkdir /var/{log,run}/git
$ sudo chown git:www-data /var/{log,run}/git
```

* upsatart起動設定ファイル作成

```sh
$ cat <<EOS | sudo tee /etc/init.conf
description "GitBucket service"

start on runlevel [2345]
stop on runlevel [!2345]
respawn
respawn limit 10 5

setuid git
setgid www-data

exec $HOME/gitbucket/startup.sh
EOS
```

* upstart起動設定

```sh
$ sudo initctl reload-configuration

# 確認
$ initctl list | grep gitbucket
```

* gitbucket起動

```sh
$ sudo start gitbucket

# 確認
$ service gitbucket status
```

* apache連携設定

```sh
$ sudo ln -sf ~git/etc/httpd.conf /etc/apache2/sites-available/gitbucket.conf
$ sudo a2ensite gitbucket
$ sudo a2enmod proxy_http
$ sudo service apache2 reload
```


### システム環境（共通）

* ログローテート設定

```sh
$ sudo ln -sf ~git/etc/logrotate.conf /etc/logrotate.d/gitbucket

# 確認
$ sudo cat /etc/logrotate.d/gitbucket
```


セットアップ
------------

### デフォルトアカウント無効化

* http://サーバ/gitbucket にアクセスし、デフォルト認証（root/root）でログインする。
* rootのパスワードを変更する。
  * 右上のアイコンをクリックし、メニューから「Account Settings」を選択する。 
* 新規アカウントを作成する。
  * 右上のアイコンをクリックし、メニューから「System administration」を選択する。
  * User Management」で「New User」ボタンをクリックする。
  * 「User Type」を「Administrator」にして、自分のアカウントを作成する。
* 新しいアカウントでログインし直してrootユーザをdisableにする。


### SSHアクセス

* gitリポジトリへのSSHアクセスを有効化する。
  * 右上のアイコンをクリックし、メニューから「System Settings」を選択する。
  * 「Base URL」にサイトURLを設定する。
  * 「Enable SSH access to git repository」にチェックを付ける。