前回がいつなのかちゃんと覚えてないので約5年とします(雑)
ルタンドン再び
Mastodon、2017年くらいにめっちゃ話題になりましたね。
あの頃にも一回 m.rutan.info
という僕専用のMastodonサーバーを立てていたのですが、なんかお前のサーバー暴走してるぞとConoHaちゃんに追い出されそうになったり、DBがぶっ壊れたりとかで、すーっとフェードアウトして無くなってしまいました。
当時は僕の中でも「結局のところは Twitter でいいか」という気持ちがだいぶ強かったこともあり、そこまで強い意志で再度 Mastodon サーバーを立てようとはしてませんでした。
が、2023年になり色々SNSを取り巻く状況も変わってきている中で、今回約5年ぶりくらいに Mastodon サーバーを立ててみました。もちろん僕専用の、いわゆる「お一人様サーバー」ってやつです。
今回のドメインは fd.toripota.com
。
toripota.com
は僕の個人サークルのドメインです。 ドメイン rutan.info
とか rutan.dev
とか色々持ってますが、あんまりバラバラ使うよりは toripota.com
にまとめたほうが僕の活動の一環として明確かなという思いがあり、今回は toripota.com
ドメインを使うことにしました。
サブドメインの fd
は Fediverse の fd
です。 fediverse.toripota.com
だとちょっと長いし、なんか4次元っぽくてカッコよくないですか????
なんでわざわざ自分でサーバー立てるの?
気を使わなくていいから……
ローカルTLの存在がちょっとニガテだったりとか、他の人の運用してるサーバーってことを必要以上に意識しちゃったりするのがあって、自分のおうちに引きこもりたいからです!
構成
お一人様サーバーなので、あまりリッチな構成にはしていません。
マネージドなサービスを使えば管理する人的コストは安くなりますが、いかんせん出費自体は高くなります。あんまり出費が高くなると「これお金かけてやる必要あるんだっけ……」みたいな気持ちが強くなってしまうので、良い塩梅のところを見つけてやっていこうと思ってます。要はバランスおじさん。
そんなわけで以下のような構成にしました。
- Amazon Lightsail の 2GBメモリのやつ($10 / month)
- nginx はVM上で直接実行
- Mastodon, DB, Redis などは docker compose で実行
- 前段にLBやCDNは特になし
- 添付画像などは S3 に保存して CloudFront 経由で配信
Amazon Lightsail
AWS 上にある VPS のやつ。EC2は起動時間で課金ですが、Lightsail は月額料金です。ただし、トラフィックが上限を超えると追加課金が発生します。
m.rutan.info
のときは ConoHaのVPS を借りていましたが、今回は Lightsail にしました。料金的には ConoHa のほうが多分安くできると思うのですが、前回 m.rutan.info
で追い出されかけたこともあるので今回は Lightsail にしてみました。強いこだわりは無いので、もしかしたら途中で引っ越すかもしれませんが……円安がきつい!
Docker
前回は直接実行でしたが、今回は Mastodon は Docker で動かすようにしました。
この理由はデプロイ周りが主な理由です。
- デプロイが簡単
- capistrano 用意したりとか考えなくていい
- pull すれば新しいイメージ取れるし、古いイメージ消せばお掃除もできる
- Assets Precompile のリソースのことを考えなくて良い
- デプロイ先で Assets Precompile 実行するとCPUが~
- Docker ならイメージビルドするときに全部やってしまうので気にしなくて良い
- GitHub は Public Repository なら GitHub Actions が無料なので、そこで無料ビルドできて便利
もちろんパフォーマンス面での見劣りとかはあるかもしれませんが、そもそもお一人様サーバーなので Docker か否かが命運をわけるようなラインに遭遇することはないでしょうと思っています。
ただし nginx だけはベタに Lightsail 上で直接動かしています。これは Mastodon のアップデート作業するときとかのメンテ時に 503 返したりするのを簡単にできるようにしたかったからです。 nginx も Docker で動かすと、Dockerのデーモンを1回止めたい~とかがやりづらくなるので……前段にLBを置いていないが故のやつですね。
S3 + CloudFront
使う一択なので割愛。DiskFull は一番こわいからね。
運用
前回大爆発を起こした実績があるので、現在は以下のようにしています。
- 毎日午前4時半に Docker コンテナを自動再起動
- その際に DB のバックアップを保存する
- フルダンプして、バックアップ用の private なS3に保存
- つまりDBをデイリーバックアップしている状態
- サーバーの状態は Mackerel の無料プランで監視
- CPUやメモリ使用量などでアラートが来るように
とりあえず最悪でも24時間前に戻れるといいな、という構成です。他の問題は起きたら考えるスタイル。
ただ、デイリーバックアップの部分がどんどん実行時間長くなる可能性あるなぁという部分や、デイリーバックアップのS3、古いの一切消してないので容量いつか増えまくるんじゃない?という課題は残しています。ライフサイクルポリシー設定しようかなと思いましたが、うまくバックアップ取れなくなってても怖いので、今は過去のバックアップを全部残すことにしてます><;
まぁ、そこを心配するなら定期的にバックアップからの復元テストとかはしたほうがいいでしょうね……めんd(ry
カスタマイズ
原則的にはあまりやらないつもりですが、やらないことに固執するつもりもないのでいじってます。
ここの fd.toripota.com
ブランチがそうです。
2023年8月時点では、投稿文字数の引き上げ(500文字→3000文字)と最大添付画像枚数の引き上げ(4 → 16)が入ってます。画像枚数のほうは僕がたくさん画像をあげるというよりは、リモートの Misskey サーバの人の画像が見えないと困るので引き上げてるみたいな感じ。
なので、もしかしたら同じような理由で「Misskeyなど外部からの絵文字リアクションを受け取る」機能とかは入れてもいいかもしれないなぁと思っています。僕が絵文字リアクションできなくてもいいけど、他の人が僕につけた絵文字リアクションは見えたほうが便利かもしれないので。
おわり
まぁ、なんだかんだ言っておきながらまた爆発する可能性もありますが、引き続きよろしくお願いします。
↑ 僕のMastodonのメインアカウントだよ