RaspberryPi3にGitBucket4.10.0をインストールして自前Gitサーバーを立てる

前回、RapberryPiのDockerでGitbucketを動かすという記事を書きましたが、やっぱりDocker上だと重かったです…
Dockerでnginxやphp-fpmで軽量のアプリケーションを動かす程度であれば全然大丈夫だと思うのですが、Javaを動かすのは流石にRasperryPi3といえど厳しかったです。

そこで、Dockerはやめて直接GitBucketをRaspberryPi3へインストールして利用することにしました。

概要

  • RaspberryPi3へGitBucket4.10.0(2017/3/19時点の最新)をインストールする
  • 保存先データは外付けHDD

外付けHDDのフォーマットとマウント

フォーマットの細かい手順は省略するとして、RaspberryPi3でXFSフォーマットするには、下記パッケージが必要なのでインストールします。

$ sudo apt-get install xfsprogs

これでXFSでフォーマットができるようになります。
あとは、いつも通りに、

$ sudo fdisk -l <-- ブロックデバイス名を確認する
$ sudo fdisk /dev/sda

もともと使っていたHDDであれば「d」オプションでパーティション消して、「n」で作成します。最後に「w」で書き込み。
パーティションが作成できたら、mkfsでXFSフォーマットします。

$ sudo mkfs.xfs /dev/sda

XFSフォーマットが完了したら、外付けHDDをマウントする先を準備します。

$ mkdir /mnt/usbhdd/

fstabにマウント先を書いて、再起動後もマウントされるようにします。

$ sudo vim /etc/fstab
~~ snip ~~

/dev/sda1 /mnt/usbhdd xfs rw 0 0

保存したらマウントします。

$ sudo mount -a
$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
~~ snip ~~

/dev/sda1        233G  101M  233G    1% /mnt/usbhdd

ここまできたら外付けHDDの準備はOKです。

GitBucketをインストールする

GitBucketはJavaで動いており、Javaのインストールが必要です。

$ sudo apt-get install oracle-java8-jdk

インストールが終わったら、Gitbucketを保存する先を作成します。※上記で作成した外付けHDDの先。

$ mkdir /mnt/usbhdd/gitbucket

次に、GitBucketのGithubページで最新のgitbucket.warをダウンロードします。

$ cd /mnt/usbhdd/gitbucket
$ sudo wget -O gitbucket.war https://github.com/gitbucket/gitbucket/releases/download/4.10/gitbucket.war

対象のgitbucket.warを使って、データが外付けHDDへ保存されるようにオプションを指定して起動します。

$ sudo java -jar /opt/gitbucket/gitbucket.war --gitbucket.home=/mnt/usbhdd/gitbucket/&

そうすると、バラバラとログが流れるかと思います。
ブラウザで、http://RaspberryPiのIPアドレス:8080/ へアクセスして、「root/root」でログインできればOKです。
あとはrootのパスワードを変更したり、使用するユーザーを追加したり、リポジトリを追加したりすると良さそうです。

試してみる

MacにVagrant環境がなかったので、セットアップついでにgit-flowの流れで使い勝手を試してみました。

普通に使えますね!素晴らしい!!
外付けHDDへデータ保存するようにしたので、応答がタイムアウトするようだと厳しいなぁと思ったのですがストレスなく使えてます。
インストールだけならめちゃ簡単だし、外付けHDDとかあれば保存容量を気にせずに使えます。
自宅のなにがしをGit管理したいけど、外で管理したくないな〜って人にはオススメです。

今まで投げてきたけど、ついに自宅サーバーを構成管理しちゃうかなぁ〜。

おしまい。

参考にさせていただいたサイト

Raspberry Pi 2にGitBucketをインストールする

自宅サーバーのチューニング日記

もうすぐ社内で某大会が開催される。
それに触発された形にはなるけれど、そう言えば最近自宅サーバーが遅くて辛いなぁと思ってたので少しだけ手をいれることに。
と言ってもベタにリバースプロキシとして使ってるNginxでキャッシュさせるというもの。
アクセスが多いわけではないのにメモリが10GBくらいあるのでもったいないと思い、キャッシュディレクトリ用にはtmpfsを作成した。

$ sudo mkdir -p /mnt/nginx/{cache,tmp}
$ vim /etc/fstab
### 追記
nginxcache              /mnt/nginx/cache        tmpfs   size=128M       0 0
nginxtmp                /mnt/nginx/tmp          tmpfs   size=64M       0 0
$ sudo mount -a
$ df -h
nginxcache            128M    0K  128M   0% /mnt/nginx/cache
nginxtmp               64M     0   64M   0% /mnt/nginx/tmp

んで上記tmpfsにproxyするようにNginxにサッと書いてreloadした。

http {
    proxy_ignore_headers X-Accel-Redirect X-Accel-Expires Cache-Control Expires Set-Cookie;
    proxy_cache_path     /mnt/nginx/cache levels=1 keys_zone=cache-space:4m inactive=7d max_size=100m;
    proxy_temp_path      /mnt/nginx/tmp;
location / {
       	proxy_cache cache-space;
       	proxy_cache_valid 200 302 10m;
       	proxy_cache_valid 404 30m;
       	proxy_pass http://backend1;
}

実際に速度を計測してみた。

変更前

% ab -c 1 -n 1 http://inamuu.com/index.php
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking inamuu.com (be patient).....done


Server Software:        nginx
Server Hostname:        inamuu.com
Server Port:            80

Document Path:          /
Document Length:        54478 bytes

Concurrency Level:      1
Time taken for tests:   5.186 seconds
Complete requests:      1
Failed requests:        0
Write errors:           0
Total transferred:      54934 bytes
HTML transferred:       54478 bytes
Requests per second:    0.19 [#/sec] (mean)
Time per request:       5186.223 [ms] (mean)
Time per request:       5186.223 [ms] (mean, across all concurrent requests)
Transfer rate:          10.34 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:  5186 5186   0.0   5186    5186
Waiting:     5183 5183   0.0   5183    5183
Total:       5186 5186   0.0   5186    5186

おっそワロタwwwってなるくらい遅い。

変更後

% ab -c 1 -n 1 http://inamuu.com/index.php
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking inamuu.com (be patient).....done


Server Software:        nginx
Server Hostname:        inamuu.com
Server Port:            80

Document Path:          /index.php
Document Length:        0 bytes

Concurrency Level:      1
Time taken for tests:   1.564 seconds
Complete requests:      1
Failed requests:        0
Write errors:           0
Non-2xx responses:      1
Total transferred:      415 bytes
HTML transferred:       0 bytes
Requests per second:    0.64 [#/sec] (mean)
Time per request:       1563.893 [ms] (mean)
Time per request:       1563.893 [ms] (mean, across all concurrent requests)
Transfer rate:          0.26 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:  1564 1564   0.0   1564    1564
Waiting:     1561 1561   0.0   1561    1561
Total:       1564 1564   0.0   1564    1564

大分マシになった。
と言ってもこれ何度かアクセスして、キャッシュさせたからだ。
メモリーは潤沢でもCPUが1コアでAMDの2.8GHzという、よくいって省電力仕様くんなので、CPUを使わせないで高速にする方法を色々模索していきたい。

Nginxでログをバッファーさせる

ログの出力は直接ファイルに書き込みが走るので、ディスク性能がモロに影響する。
Apache2.2で低速なディスクを使っていて、それなりにアクセスがある環境だと、BufferedLogsをOnにするだけで体感速度が変わるくらい大きな影響がある。

Nginxでも同じようにバッファーできないのかな?と思ってみたら、やはりあった。

試しに自宅サーバーで設定してみた。
設定はaccess.logの後にbuffer=サイズを追記するだけ。

[root@master01]/etc/nginx# diff nginx.conf.20160819 nginx.conf
35c35
<     access_log  /var/log/nginx/access.log custom;
---
>     access_log  /var/log/nginx/access.log custom buffer=32k;

これでNginxをrestartすればOK。
実際にログをtailで見てもちゃんとバッファーされた。
自宅サーバーだとアクセス少ないので、32kだと中々ログ出力されない笑

どの程度影響があるかわからないけれど、これは知っておいて損はなさそうに思う。
また、良さそうなパラメータがあったら設定してみたい。