mastodon インスタンスをたてる(準備編)

ということで、一部で大流行中の 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
これでオブジェクトストレージの準備は完了です。

ここまでは、とくに問題もなくインストール&設定&起動できました。 ちょっと長くなってきたので、ここからは次の記事にします。

タグ: FreeBSD Minio Redis Redis. Minio Install Jail Mastodon Postgresql Qjail