気まま研究所ブログ

ITとスーパーカブ、思ったことをてきとーに書きます。

RaspbianからUbuntu MateへGitBucketの移行 本作業編

前回の続きです。
もう一度経緯を書いておくと、諸事情でRaspbianからUbuntu MATEに移行する必要が出てきたものの、既に運用していたサーバがあるため、なんとかして移行できないものかと試行錯誤しました。
この記事は準備作業を終えて実際にこうする作業をまとめていきます。

準備する物たち

ホストコンピュータ

1. Ubuntu MATE 16.04.2 (Xenial)
2. WinSCP
3. Win32DiskImager
4. SDCardFormatter

Raspberry Pi

1. Tomcat
2. GitBucket

移行作業

一通り準備作業が終了したので早速移行作業を始めます。

Tomcatのインストール

Tomcatをインストールする前にJava Runtime Enviromentをインストールしておきます。Raspberry Pi向けのUbuntu MATEはJavaがインストールされておらず、手動インストールする必要があります。

$ sudo apt-get install openjdk-8-jre-headless

続いてTomcatをダウンロードします。なお、ここから管理者権限が必須な領域で作業し続けるのでスーパーユーザでログインします。 sudoに変えました。

$ sudo mkdir /home/tomcat && cd /home/tomcat
$ sudo wget http://ftp.riken.jp/net/apache/tomcat/tomcat-9/v9.0.2/bin/apache-tomcat-9.0.2.tar.gz
$ sudo tar -zxvf apache-tomcat-9.0.2.tar.gz
$ sudo mv apache-tomcat-9.0.2 tomcat

とりあえずこれでTomcatのインストールは完了です。

GitBucketのインストールと起動

次にGitBucketをダウンロードします。執筆当時最新版は4.20.0なので今回はこちらをダウンロードします。

$ sudo wget /home/tomcat/tomcat/webapps/ https://github.com/gitbucket/gitbucket/releases/download/4.20.0/gitbucket.war

ダウンロード先はTomcatのwebappsディレクトリ内に保存します。

次に、Tomcatのアカウントを変更します。現在はスーパーユーザで作業をしているため、root権限となっています。それでは危険が伴うのでTomcat専用のアカウントを作成し、権限を変更しておきます。

$ sudo useradd -s /sbin/nolog tomcat
$ sudo chown -R tomcat:tomcat /home/tomcat

PostgreSQLのインストールと下準備

次にGitBucketで用いるデータベース管理システムであるPostgreSQLをインストールします。

$ sudo apt-get install postgresql

インストールが完了するとデータベースとアカウントを作成します。まずはpostgresアカウントでpsqlを実行します。

$ sudo su - postgres
postgres$ psql
psql (9.5.10)
Type "help" for help.

するとPostgreSQLの管理画面に入るのでデータベースを作成します。

postgres=# create database gitbucket;
CREATE DATABASE
postgres=# \q

作成後は\qで管理画面から抜けておきます。

次に専用のアカウントを作成しておきます。

postgres$ createuser -P gitbucket
Enter password for new role: 
Enter it again: 
postgres$ exit

最後にPostgreSQLのアカウントを用いたパスワード認証を行うのでpeerからmd5へと設定を変更しておきます。

$ sudo nano /etc/postgresql/9.5/main/pg_hba.conf
-   local all all peer
+   local all all md5

変更が完了するとPostgreSQLを再起動しておきます。

$ sudo /etc/init.d/postgresql restart
[ ok ] Restarting postgresql (via systemctl): postgresql.service.

GitBucketのリストア

次にバックアップしておいたGitBucketのデータをリストアします。バックアップと同様にSFTP接続で適当な場所にアップロードし、適当な場所に移動させておきます。今回は/home/tomcat直下に配置しています。

転送したアーカイブファイルを展開し、権限類を変更します。

$ sudo tar -zxvf GitBucket.tar.gz
$ sudo chown -R tomcat:tomcat .gitbucket/
$ sudo chmod 750 .gitbucket/

続いてPostgreSQLのデータをインポートします。

$ sudo sh -c "cd /home/tomcat/.gitbucket && psql -U gitbucket gitbucket < gitbucket.dmp"

これでリストアは完了です。

Apache 2のインストール

次にApache 2をインストールします。

$ sudo apt-get install apache2 apache2-dev

PHPなどを必要としない場合はこれだけで問題ありません。

Apache 2のHTTPS

個別で証明書を取得している場合はそれをインストールすることもできますが、個人用サーバなので無料サービスのLet's encryptを用いて証明書をインストールします。

まずは必要なパッケージをインストールします。

$ sudo apt-get install letsencrypt python-letsencrypt-apache

インストールが完了するとletsencryptコマンドで発行ウィザードが立ち上がるので指示通りに進めると自動でインストールが完了します。

$ sudo letsencrypt

TomcatApache 2の連携

HTTPSにGitBucketを乗せるにはApache 2と連携を取る必要があります。

まずは使用するモジュール群を有効にしておきます。

$ sudo a2enmod proxy proxy_http proxy_html xml2enc

次にSSL用のコンフィグを書き換えます。なお、SSLを用いない場合や両方を用いる場合はそれに応じて書き換えてください。

$ sudo nano /etc/apache2/sites-available/000-default-le-ssl.conf
<IfModule>
<VirtualHost>
    ...
    ProxyPass /gitbucket http://localhost:8080/gitbucket
    ProxyPassReverse /gitbucket http://localhost:8080/gitbucket
    ProxyPreserveHost on
    ...
</VirtualHost>
</IfModule>

プロキシを用いて/gitbucketへのアクセスを全てhttp://localhost:8080/gitbucketへと飛ばします。

あとはApache 2を再起動して終了です。

$ sudo apache2ctl restart

Tomcatの実行

次にTomcatの起動を経てGitBucketを実行します。

$ sudo su -s /bin/bash - tomcat -c tomcat/bin/startup.sh

tomcat/bin/startup.shで起動できますが、起動アカウントがスーパーユーザになってしまうのでtomcatアカウントで起動できるように実行方法を変えています。

起動が完了すると接続確認を行って終了です。

ファイアウォールの設定と有効化

最後にファイアウォールを有効化しておきます。Raspbianでは手動インストールが必要でしたが、Ubuntu MATEではデフォルトでインストールされています。ただし、デフォルトでは起動しないので設定が必要です。

早速有効化したいところですが、デフォルトではルールが一切入っていないのでまずはSSHのルールを追加しておきます。これをしないとSSH接続ができなくなる場合があります。

$ sudo ufw allow from 192.168.1.0/24 to any port 22

これで192.168.1.0/24に属するローカルエリアネットワークからのSSH接続を許可します。

ついでにWebサーバのポートもこの段階で追加しておきましょう。

$ sudo ufw allow 80
$ sudo ufw allow 443

最後にファイアウォールを有効化して終了です。

$ sudo ufw enable

文字で起こすとかなり長くなってしまいましたが、意外にもサクッと終わりました。Raspbianと比較してもどちらも元はDebianということもあってほとんど操作に違いがありません。
しかしながら、現状大きく異なるのが、パフォーマンスが体感できるほど向上したことです。Raspbianを用いていた頃はCUIでの起動でも起動時にメモリを数百MBほど食っていたのに対し、こちらは30-40MBほどしか食いません。また、GitBucketのWeb処理速度も異常に早かったです。以前は表示にイラッと感じるほど遅かったものの、移行後はスッと移動してくれるのでストレスがほとんどありません。

思わぬパフォーマンス向上がありましたが、時間をかけただけの価値はありました。しばらくはこの環境で管理していきます。