GitBucket 4.28.0 インストール手順 with PostgreSQL 10 and Tomcat 8 on Fedora 28

Fedora 28にGitBucket 4.28.0 をインストールする手順をまとめてみた

## はじめに 

構築する環境は次の通り

| Software | Version |
|:---|:---:|
| Fedora | 28 |
| Git (cmd-tool) | 2.17.1 |
| SVN (cmd-tool) | 1.10.2 |
| PostgreSQL | 10.5 |
| OpenJDK | 1.8.0.181 |
| Tomcat8 | 8.5.32 |
| GitBucket | 4.28.0 |
| Apache(Web Server) | 2.4.34 |

## ロケール設定の確認と設定

PostgreSQLをインストールする前に、Localeの設定を確認します。GitBucketで使いたい言語に合わせて設定しておきます。

```bash
# 現在の設定を確認
$ localectl status
   System Locale: LANG=en_US.UTF-8
       VC Keymap: us
      X11 Layout: n/a

# 日本語が設定できるか確認する
$ localectl list-locales | grep ja_JP

# 日本語が無い場合、言語パッケージを追加インストールする
$ dnf list glibc-lang\* | grep ja
glibc-langpack-ja.x86_64                  2.27-32.fc28                 updates
$ dnf install -y glibc-langpack-ja

# 日本語が設定できるか確認する
$ localectl list-locales | grep ja_JP
ja_JP.eucjp
ja_JP.utf8


# 日本語ロケールに設定変更し、反映する
$ localectl set-locale LANG=ja_JP.UTF-8
$ source /etc/locale.conf
$ localectl status
   System Locale: LANG=ja_JP.UTF-8
       VC Keymap: us
      X11 Layout: n/a

```

## タイムゾーンの設定

ロケールと合わせて、タイムゾーンも合わせておきましょう。

```sh
# 現在の設定を確認
$ timedatectl
                      Local time: 土 2018-09-08 04:19:25 UTC
                  Universal time: 土 2018-09-08 04:19:25 UTC
                        RTC time: 土 2018-09-08 04:19:25
                       Time zone: Etc/UTC (UTC, +0000)
       System clock synchronized: no
systemd-timesyncd.service active: yes
                 RTC in local TZ: no


# 東京時間に設定
$ timedatectl set-timezone Asia/Tokyo

# も一度確認
$ timedatectl
                      Local time: 土 2018-09-08 13:20:12 JST
                  Universal time: 土 2018-09-08 04:20:12 UTC
                        RTC time: 土 2018-09-08 04:20:12
                       Time zone: Asia/Tokyo (JST, +0900)
       System clock synchronized: no
systemd-timesyncd.service active: yes
                 RTC in local TZ: no

```

## Gitコマンドのインストール

GitBucketはGitコマンドツールが無くても動作しますが、バックアップやサーバー内での処理など、あると便利です。
（後から入れても良いです。）

```sh
# git-svnをインストールする
$ dnf install -y git-svn

$ git svn --version
git-svn version 2.17.1 (svn 1.10.2)

```

## PostgreSQL のインストール

ここでは、pgdgのリポジトリを追加してインストールしていますが、標準のUpdatesリポジトリからでもインストールできます。

```
# リポジトリの追加
$ dnf install -y https://download.postgresql.org/pub/repos/yum/10/fedora/fedora-28-x86_64/pgdg-fedora10-10-4.noarch.rpm

# パッケージをインストール
$ dnf install -y postgresql10-server

# 初期化
$ /usr/pgsql-10/bin/postgresql-10-setup initdb

# 認証方式をパスワード認証(MD5)に設定
$ sed -i \
    -e 's@^\(host *all *all *127.0.0.1\/32 *\).*@\1md5@' \
    -e 's@^\(host *all *all *::1\/128 *\).*@\1md5@' \
    /var/lib/pgsql/10/data/pg_hba.conf

# サービス自動起動を設定
$ systemctl enable postgresql-10
$ systemctl start postgresql-10

# GitBucket用のユーザーを追加
$ sudo -u postgres LANG=C createuser --createdb --encrypted --pwprompt gitbucket
Enter password for new role:
Enter it again:

# 必要に応じて権限追加
$ sudo -u postgres LANG=C psql -c "grant gitbucket to postgres;"
GRANT ROLE

# GitBucket用のDBを作成
$ sudo -u postgres sh -c 'createdb --encoding=UTF-8 --owner=gitbucket gitbucket'


# 意図する文字コードで作成できているか念のため確認
$ sudo -u postgres psql
psql (10.5)
Type "help" for help.

postgres=# \l
                                  List of databases
   Name    |   Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+-----------+----------+-------------+-------------+-----------------------
 gitbucket | gitbucket | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 |
 postgres  | postgres  | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 |
 template0 | postgres  | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |           |          |             |             | postgres=CTc/postgres
 template1 | postgres  | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |           |          |             |             | postgres=CTc/postgres
(4 rows)

postgres=# \q

```

## JDKのインストール

```bash
$ dnf install -y java-1.8.0-openjdk-devel

```

## Tomcatのインストール

```bash
# tomcatユーザーの作成
$ dnf install -y tomcat-admin-webapps

# サービス自動起動を設定
$ systemctl enable tomcat
$ systemctl start tomcat

```

## GitBucketのインストール

GitBucketのホームディレクトリを`/var/gitbucket`としてインストールします。
プラグインはお好みで。
https://plugins.gitbucket-community.org/ で提供されるプラグインについては、GitBucketの[System Administration] からプラグイン・リポジトリを参照するように設定すれば取得できる。

```shell
# Tomcatを停止
$ systemctl stop tomcat

# GitBucketをダウンロード
$ cd /var/lib/tomcat/webapps
$ curl -OL https://github.com/gitbucket/gitbucket/releases/download/4.28.0/gitbucket.war

# プラグインをダウンロード
$ mkdir -p /var/gitbucket/plugins
$ cd /var/gitbucket/plugins/
$ curl -OL https://github.com/mrkm4ntr/gitbucket-network-plugin/releases/download/1.6.1/gitbucket-network-plugin_2.12-1.6.1.jar
$ curl -OL https://github.com/YoshinoriN/gitbucket-monitoring-plugin/releases/download/v3.1.0/gitbucket-monitorting-plugin_2.12-3.1.0.jar
$ curl -OL https://github.com/YoshinoriN/gitbucket-application-logs-plugin/releases/download/v1.0.0/gitbucket-application-logs-plugin_2.12-1.0.0.jar

# 権限変更
$ chown -R tomcat. /var/gitbucket/

# Tomcat設定ファイルに GITBUCKET_HOME の設定を追加
$ echo GITBUCKET_HOME=/var/gitbucket >> /etc/tomcat/tomcat.conf

# Tomcatを起動
$ systemctl start tomcat

# warファイルが展開されたことを確認
$ ll /var/lib/tomcat/webapps

# GitBucketの設定ファイルが生成されていることを確認
$ ll /var/gitbucket/
total 168
-rw-r--r--. 1 tomcat tomcat 163840  9月  8 14:01 data.mv.db
-rw-r--r--. 1 tomcat tomcat    205  9月  8 14:00 database.conf
drwxr-xr-x. 3 tomcat tomcat   4096  9月  8 14:00 plugins

# サービスの応答を確認
$ curl http://localhost:8080/gitbucket/
```

## Apache(httpd)のインストール

```sh
# httpdインストール
$ dnf install -y httpd

# AJPポートへのプロキシ設定を追加
$ echo "ProxyPass /gitbucket ajp://localhost:8009/gitbucket" >> /etc/httpd/conf.d/httpd-proxy.conf

$ /usr/sbin/setsebool httpd_can_network_connect 1

# httpdの起動
$ systemctl enable httpd
$ systemctl start httpd

# サービスの応答を確認
$ curl http://localhost:80/
$ curl http://localhost:80/gitbucket/

```

## SELinuxが原因でApacheとTomcat間が接続できない場合

Tomcatの8080ポートへのリクエストは返ってくるのに、Apacheの80番ポートで503エラーが発生する場合、SELinuxが原因でmod_proxyがエラーを起こしていることがあります。

`/var/log/httpd/error_log`ファイルの中を参照し、"[proxy:error] ... Permission denied: ..."が記録されているのであれば、SELinuxそのものを無効にしてしまうか、次のコマンドでポリシーを書き換えてみます。 

```shell
# 試しにブーリアン値を変更する
$ /usr/sbin/setsebool httpd_can_network_connect 1

# 上手くいくようであれば、再起動時も設定が保持されるように設定する
$ /usr/sbin/setsebool -P httpd_can_network_connect 1
```

## 接続先DBをPostgreSQLへ変更し、Tomcatを再起動

```shell
$ vi /var/gitbucket/database.conf
```
**/var/gitbucket/database.conf**

```conf:database.conf
db {
  url = "jdbc:postgresql://localhost/gitbucket"
  user = "gitbucket"
  password = "gitbucket"
#  url = "jdbc:h2:${DatabaseHome};MVCC=true"
#  user = "sa"
#  password = "sa"
#  connectionTimeout = 30000
#  idleTimeout = 600000
#  maxLifetime = 1800000
#  minimumIdle = 10
#  maximumPoolSize = 10
}

```

```
# Tomcat再起動
$ systemctl restart tomcat
```

ブラウザからアクセスし、無事表示されれば完了です。

お疲れ様でした。;-P


## まとめ

標準のUpdatesリポジトリで比較的最新版が提供されているので、CentOS7で最新版を手動インストールすることを考えると、Fedora28の方がパッケージでインストールできる分楽だと思います。