Ubuntu18.04LTS への gitbuckect サーバ引っ越し

# gitbucket サーバの引っ越し

## はじめに
gitbucket を運用していたサーバマシンが不調なので、新サーバマシンへ引っ越しを行う。
その作業手順をここに備忘録として残す。

## サーバ環境とファイル構成

### 旧サーバ
OS: CentOS6
Repos: $HOME/.gitbucket/
Port: 9999

* ユーザ maintainer の $HOME に環境を構築していた.
* WEBサーバにデプロイせず、crontab の ```@reboot``` タイミングで gitbucket.war を起動し、組み込みサーバで実行していた.
* gitbucket のデフォルトポート番号8080は、実験用途に空けておきたいので 9999 を使っていた.

### 新サーバ
OS: Ubuntu18.04LTS
Repos: $HOME/.gitbucket/
Port: 9999

* クライアント側の設定を変えたくないので、ポート番号は旧サーバと同じにする.
* gitbucket をサービスとして実行する

## 元サーバのDB内容をバックアップする

1. Gitbucket-Webをブラウザ開き、adminでログインする
2. 右肩のユーザアイコンメニュー＞System adminnistration＞左サイドバー＞DataExport/import＞Export
3. ブラウザにてダウンロードして保存する

次の「データ全体を吸い出す」にてDBも含めて取り出せるが、念のための処置である。
移行に失敗しても、このDBバックアップと、cloneしたgitリポジトリがあれば復元できる。

## 元サーバからデータ全体を吸い出す

```bash
# gitbucket の運用を停止する. 完全に止まるまでちょっと待つ.
pkill -f gitbucket.war
sleep 1

# データをtar.gzに固める.
tar -zcf gitbucket.tar.gz ~/.gitbucket

# 新サーバにデータを転送する.
scp -p gitbucket.tar.gz maintainer@newserver:.
```

## 新サーバに実行環境を構築する

1. 旧サーバをシャットダウンし、新サーバを旧サーバの名前に変える.
1. 以下の構築を行い、最後にリブートする.

```bash
# open port 9999
#   CentOS6: sudo iptables -A INPUT -p tcp -m tcp --dport 9999 -j ACCEPT
#   Ubuntu: nothing to do.

# install Java8 or later
sudo apt install openjdk-11-jre-headless

# get gitbucket
wget https://github.com/gitbucket/gitbucket/releases/download/4.31.1/gitbucket.war
mkdir $HOME/install
mv gitbucket.war $HOME/install/

# recover datas to $HOME/.gitbucket
tar -xzvf gitbucket.tar.gz

# make gitbucket service
sudo vim /etc/systemd/system/gitbucket.service
sudo systemctl enable gitbucket
sudo systemctl start gitbucket
```

* 旧サーバとユーザ名が変わっている場合は、$HOME/.gitbucket/* のオーナーを chown で修正する.

### service設定
```conf:/etc/systemd/system/gitbucket.service
[Unit]
Description = git bucket

[Service]
User=maintainer
##ExecStart = /usr/bin/printenv
# USER=maintainer
# HOME=/home/maintainer
# LOGNAME=maintainer
# JOURNAL_STREAM=9:294136
# PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# INVOCATION_ID=18b629bd82f5412b86ba9698a84edd8c
# LANG=ja_JP.UTF-8
# SHELL=/bin/bash
# PWD=/
#
ExecStart = /usr/bin/java -Xms512m -Xmx512m -jar ${HOME}/install/gitbucket.war --port=9999
Restart = always
Type = simple
## default output to syslog.
#StandardOutput=null
#StandardError=file:/var/log/gitbucket.log

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

* 旧サーバと同じく、ポート番号9999を使う
* maintainer ユーザで実行する
* メモリ不足な感じなので、下記参考資料に倣って java -Xms512m -Xmx512m で起動する

### 保守用スクリプト
```sh:gitbucket-ctrl.sh
#!/bin/bash
# vim: set filetype=sh tabstop=4 softtabstop=2 shiftwidth=2 expandtab cindent:
case $1 in
 status)
    echo === in crontab
    crontab -l | grep --color gitbucket.war
    echo === current process
    pgrep -af gitbucket.war
    echo === systemctl
    systemctl status gitbucket
    ;;
 stop)
    sudo systemctl stop gitbucket
    ;;
 restart)
    sudo systemctl restart gitbucket
    ;;
 start)
    sudo systemctl restart gitbucket
    ;;
 install)
    cd $HOME/install
    [ -f gitbucket-$2 ] || wget https://github.com/gitbucket/gitbucket/releases/download/$2/gitbucket.war -O gitbucket-$2 || exit 1
    ln -f gitbucket-$2 gitbucket.war ;;
  *)
    echo "usage: gitbucket-ctrl.sh [restart|start|stop|status|install VERSION]"
    ;;
esac
```

## 参考資料

* [CentOSに gitbucket をインストールする] (https://qiita.com/okadabasso/items/c19fb23c384beebcc903)
* [任意のログをlogrotateを使って管理する] (https://qiita.com/Esfahan/items/a8058f1eb593170855a1)
* https://gist.github.com/tmaeda/4723371c3fd913670c52

## END