Raspberry pi 3 Model B+ にGogsをインストール(ラズパイ＋Gitサーバ ー)

[Gogs](https://gogs.io/)をRaspberry piにインストールします。
GitHubに[アカウント](https://github.com/Dhikigame)を持っていますが、非公開リポジトリを作りたかった(Githubの非公開リポジトリは有料プラン)のでラズパイにgitをインストールしてリポジトリを作成したいと考えました。
それなら[Bitbucket](https://bitbucket.org/)でいいじゃん！ってなるかもしれませんが、使っていなくて放置されたラズパイがあったのでGogsをインストールしてGitサーバーにしてみました。

```text:環境
Raspberry Pi 3 Model B+
OSバージョン: Raspbian GNU/Linux 9.4 (stretch)
Gogsバージョン: 0.11.66 
```

# なぜGogs？
ローカルのGitと言えば、[Gitlab](https://about.gitlab.com/)が有名ですが以下の3点でGogsにしました。
### 動作が軽い
1番の大きな理由として動作が軽いことです。Gogsをインストールする前はGitlabを使用していました。しかし、以下が難点でした。
 1. メモリ使用量が90%が普通の環境
 2. ブラウザで長いコードを読み込むとき時間がかかる

[こちら](https://qiita.com/kounoike/items/7c42db90c42e280e1cab)で各ローカルリポジトリのGitソフトウェアを使ってベンチマークを調べた記事があります。自分のラズパイ環境でも90%以上ものメモリ使用率を誇っていたので、Gitlabだけで他の用途に使えなくなってしまうことがイマイチでした。また、ラズパイに負担がものすごいので、ブラウザでコード読み込むのも時間が掛かりました。
それに比べてGogsは比較対象の中でも動作の軽さが光っています。
### 日本語対応
GithubでもGitlabでも言語は英語で使用するのが一般的ですが、Gogsは日本語対応のGitソフトなので分かりやすい！
### インストールが簡単
これは人によるかもしれませんが、Gitlabをインストールした時は[手順通り](https://about.gitlab.com/install/#raspberry-pi-2)にやってもエラーが多発しつまずくことが多かったです。しかし、Gogsはまとめられたバイナリがありますので、少ないコマンド数でWebブラウザからすぐにアクセスできる環境まで持っていくことができます。

# インストール
[こちらのバイナリダウンロードサイト](https://gogs.io/docs/installation/install_from_binary.html)からラズパイ上のコマンドラインで以下のように最新版のGogsをダウンロードしてきます。
※予め、ラズパイがインターネットに繋がっている必要があります。

```text:端末
$ wget https://dl.gogs.io/0.11.66/gogs_0.11.66_raspi2_armv6.zip
```
また、MySQLが必要なのでインストールします。

```text:端末
$ sudo aptitude install mysql-server
```

インストール後、MySQLのrootユーザーでログインしたら、gogsのデータベースを作成しておきます。(必須)

```text:端末
> CREATE DATABASE IF NOT EXISTS gogs CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
```

ダウンロードしたgogsのzipを解凍し、ディレクトリ移動した後にデーモンを実行すると以下のように出力します。

```text:端末
$ unzip gogs_0.11.66_raspi2_armv6.zip 
(省略)
$ cd gogs/
$ ./gogs web
2018/10/02 20:16:32 [ WARN] Custom config '/home/pi/gogs/custom/conf/app.ini' not found, ignore this if you're running first time
2018/10/02 20:16:32 [TRACE] Custom path: /home/pi/gogs/custom
2018/10/02 20:16:32 [TRACE] Log path: /home/pi/gogs/log
2018/10/02 20:16:32 [TRACE] Build Time: 2018-09-16 05:04:22 UTC
2018/10/02 20:16:32 [TRACE] Build Git Hash: xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2018/10/02 20:16:32 [TRACE] Log Mode: Console (Trace)
2018/10/02 20:16:32 [ INFO] Gogs 0.11.66.0916
2018/10/02 20:16:32 [ INFO] Cache Service Enabled
2018/10/02 20:16:32 [ INFO] Session Service Enabled
2018/10/02 20:16:32 [ INFO] SQLite3 Supported
2018/10/02 20:16:32 [ INFO] Run Mode: Development
2018/10/02 20:16:34 [ INFO] Listen: http://0.0.0.0:3000
```

`Listen: http://0.0.0.0:3000`と表示されますので、ラズパイのブラウザのURLから入力してアクセスすると以下のように表示されると思います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120727/8058a25f-f086-9fa9-359d-d8ad3d9bf806.png)

MySQLのrootパスワードだけ入力し次に進むと、エラーがなければ以下のように「サインイン」が表示されます。「アカウントが必要ですか？今すぐ登録しましょう！」をクリックしてアカウント登録し、サインインしてください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120727/8c3920e3-de83-fadd-a73b-9e9a3c43f5fc.png)

サインインに成功しますと、Gogsのホーム画面が表示されますので、これでGogsが使えるようになります。
おめでとうございます！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120727/225b56e4-e73f-2a8c-786d-0a325b3e3add.png)

# クライアントPCからアクセス
ラズパイのファイアウォールでhttpまたはポート80番を有効にします。
その後、ラズパイとネットワークに繋がっているクライアントPCからラズパイのIPアドレスでアクセスすると以下のように表示され、利用することができるようになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120727/7824b932-ec89-6283-2cf9-05fa9522566b.png)



# 常時使えるようにする
デーモンが動いている途中でラズパイを再起動してしまうと、再度アクセスできなくなってしまい、また`./gogs web`を実行するということを行う必要があります。
それは流石にメンドくさいのでログイン後デーモンを動かせるように`.profile`の末尾に記述しておきます。

```text:.profile
(省略)
cd gogs/
./gogs web
```

# 主なエラー

```text:ブラウザ
データベースの設定が正しくありません：dial tcp 127.0.0.1:3306: connect: connection refused
```

MySQLが正しくインストールされていないか、設定が間違えている可能性が高いです。