b-shock. Fortress

FreeBSDにGROWIをセットアップする

ある目的で、Mastodonと連携させる為のGROWIが必要になった。

対象はFreeBSD。
GROWIにはportsもパッケージもない為、以下、gitから手作業で導入していく 大まかな流れ。不明点があれば、適宜ググって頂ければと。

動作環境

  • nginx
  • Node.js 8.x以上
  • Ruby 2.4.x以上

が適切にセットアップされているものとする。

リポジトリのクローン

GROWIの実行ユーザーを仮に growi として。

1
2
3
4
5
cd ~growi
git clone https://github.com/weseek/growi.git
cd growi
git checkout release
yarn

release ブランチが運用に適すると判断した。

MongoDBの導入

これ以降の操作は、すべてroot権限で行う。
GROWIのストレージとなる、MongoDBを導入。

1
2
3
4
pkg install mongodb36
pkg install mongodb36-tools
sysrc mongod_enable=YES
sysrc mongod_flags="--setParameter=disabledSecureAllocatorDomains=*"

3.6系は、今日時点での最新安定版。
toolsパッケージにはバックアップの為の mongodump コマンド等が入っており、 事実上必須。
mongod_flags を設定しているのは、ログをsyslogに出したい為で、 そうでなければデフォルトのままでも可。

/usr/local/etc/mongodb.conf

これもログの出力先をsyslogに変更する為の対応で、ほかはデフォルト。
不要ならばデフォルトのままの mongodb.conf でも可。

最後に、MongoDBのデーモンを起動。

1
service mongod restart

Godの導入

Godを未導入の環境に新規導入するものとして。
既に導入されている場合は、うまく辻褄をあわせていただきたい。

対象システムであるGROWIはNode.js製なのだから、 本来であればPM2 あたりを使うべきであるというご指摘はごもっとも。

1
2
gem install god
mkdir /usr/local/etc/god

/usr/local/etc/local.god

以下、設定例 。(ファイル名はたぶん何でもいい)
めちゃ強引だが、とくに反省はしないw

/usr/local/etc/god/growi.god

GROWIの実行ユーザー growi のホームディレクトリが、 先ほど同様 /home/growi であるとして。

ポートをデフォルトの3000から3012にずらしているのは、 Mastodonインスタンスと同じホストへの導入を想定している為。 3012に深い意味はない。

停止コマンドが汚すぎる。ちょっと反省してる…。
機会あったら直したい。

/usr/local/etc/rc.d/god

Godを自動起動するには、以下のようなファイルを作成。

FreeBSDのrc.dスクリプト、実は細かいところはよく知らない。
見様見真似で上記のように書いて、一応動いてはいるけど。

ここまでできたら、Godを起動。

1
service god restart

リバースプロキシ

以下、Let’s Encryptの証明書を利用する、nginxの設定例。
詳細な説明は割愛。設定後、nginxの再起動。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
listen 443 ssl;
server_name growi.example.com;

ssl_protocols TLSv1.2;
ssl_ciphers EECDH+AESGCM:EECDH+AES;
ssl_ecdh_curve prime256v1;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_certificate /usr/local/etc/letsencrypt/live/growi.example.com/fullchain.pem;
ssl_certificate_key /usr/local/etc/letsencrypt/live/growi.example.com/privkey.pem;
add_header Strict-Transport-Security max-age=63072000;

location / {
proxy_pass http://localhost:3012;
}
}

監視

以下の項目を監視している。

  • https://growi.example.com/ 上の適当なページが200を返すこと。
  • TCPのポート27017が開いていること。

バックアップ

以下、実行例。

1
mongodump --port 27017 --out /tmp/destdir

このあと /tmp/destdir をアーカイブして、他のホストにrsyncする手順等 の自動化を行う。

以上。