ということで、一部で大流行中の mastodon ですが、docker でイメージが公開されているため、手軽に入れて試すことができます。
とはいえ、インストールするのと、それを運用するのはまた別の次元の話なのですが。
で、FreeBSD にも docker はあるので、さっそく試してみました。
ERROR: client and server don't have same version (client API version: 1.22, server API version: 1.19)
だめでした。残念。
そこであきらめたら試合終了なので、別方面から頑張ることにします。
mastodon の git を見ると、
https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md
というのが公開されており、docker から剥がして設定するためのドキュメントがあります。
これを参考にしてやってみましょう。
さて、docker といえば軽量コンテナですが、FreeBSDにも古くより伝わるjailといコンテナシステムがあります。
そこで動かそうと、いろいろ試してみました。
まず、mastodon のインストールの前に、前提で動かさないといけないサーバがいくつかあり、あったほうがいいというサーバもいくつかあります。
DBにはPostgreSQLサーバを。
KVS には Redis サーバを。
画像の保存には S3 互換のオブジェクトストレージの minio を。
この辺をまず jail にインストールしていきます。
素の jail はいろいろとアレなので、ここでは qjail を使います。
$ sudo pkg install qjail
$ sudo qjail install -z mastodon
start したり stop したりするときに便利なように mastodon というゾーンを作成してそこにjailを作るようにおきます。
この際、ホスト側が zfs を使っている場合には、先に
$ sudo zfs create zroot/usr/jail.mastodon
しておくと、いろいろとはかどります。
次に個々のコンテナを作成します。
$ sudo qjail create -z mastodon -4 192.168.0.40 -n em0 mastodon-web
$ sudo qjail create -z mastodon -4 192.168.0.41 -n em0 mastodon-db
$ sudo qjail create -z mastodon -4 192.168.0.42 -n em0 mastodon-redis
$ sudo qjail create -z mastodon -4 192.168.0.43 -n em0 mastodon-minio
PostgreSQLを動かすコンテナにはおまじないをします。
$ sudo qjail config -z mastodon -y mastodon_db
これで sysvipc が使えるようになります。これをやらないとqjail で PostgreSQLサーバが起動しません。
各コンテナを起動します。
$ sudo qjail start -z mastodon
mastodon zone のコンテナをすべて起動します。
設定していきましょう。
まず、DBの設定
$ sudo qjail console -z mastodon mastodon_db
で、dbコンテナの中に入ります。
# pkg install postgresql96-server
# sysrc postgresql_enable="YES"
# service postgresql initdb
# su - postgre
$ vi data96/pg_hba.conf
で192.168.0.0/24 のアクセスを許可します。
$ vi data96/postgresql.conf
でlistenするアドレスを指定(このばあい 192.168.0.41)
exit で戻って
# service postgresql start
でDBを起こします。
# su - postgres -C 'psql -c "CREATE USER mastodon CREATEDB;"'
で、DBにユーザーmastodon を作成します。
ここまでできたら exit でDBコンテナから抜けます。
これでDBコンテナを再起動しても、自動的に PostgreSQLが上がってきます。
つぎに、redis サーバです。
これは普通に
$ sudo qjail console -z mastodon mastodon_redis
して、中に入って
# pkg install redis
# sysrc redis_enable="YES"
して、
# vi /usr/local/etc/redis.conf
を編集します。bind するアドレスと、localhost以外からのアクセスを許可するだけでとりあえず大丈夫。
あとは
# service redis start
して実行しておきます。netstat -a で待ち受けているかどうか確認しましょう。
minio サーバも設定します。
これも
$ sudo qjail console -z mastodon mastodon_minio
で中に入って
# pkg install minio minio-client
# sysrc minio_enable="YES"
しておいてから、一旦 minio サーバを起こします。
# service minio start
すると、 /usr/local/etc/minio/config.json が作られますので、そこに記載されている
"credential": {
"accessKey": "***********************",
"secretKey": "**********************************"
},
をメモっておきます。これはあとで mastodon の設定で使います。
また、
# netstat -a
すると、tcp:9000 で待ち受けているはずです。
オブジェクトの保存ディレクトリが /var/db/minio のしたに作られます。これは/etc/rc.conf の中の minio_disks で指定すれば別の場所に作ることも可能です。
クライアントから接続してみましょう。
# minio-client config host list
するとデフォルトで登録されているリストの一覧が出てきます。ここで、local のアクセスキーとシークレットキーが空欄になっているので設定します。
# minio-client config host add local http://localhost:9000 <先ほどメモったアクセスキー> <先ほどメモったシークレットキー>
これで設定は ~/.mc に保存されました。
あとはからのバケットを作って、アクセスポリシーを設定しておきます。
# minio-client mb local/mastodon-web
# minio-client policy -r public local/mastodon-web
これでオブジェクトストレージの準備は完了です。
ここまでは、とくに問題もなくインストール&設定&起動できました。
ちょっと長くなってきたので、ここからは次の記事にします。