自分の SNS アカウントを自分で持つのは素敵な考えです。そのアカウントが他人のサーバーの上に、他人のルールと稼働状況のもとで存在していると気づくまでは。自分の Mastodon インスタンスならそれが解決します。ハンドルは @you@your-domain、止められるのはあなただけ。ただし Mastodon は小さなアプリではありません。何を引き受けるのか知っておく価値があります。
向いている人
- 自分自身や会社の公式アカウントのためのおひとり様インスタンス。
- 友人やプロジェクトチームの小さなコミュニティ。数十人規模で、数千人ではありません。
それ以上の規模になると、モデレーションの責任、通報対応、本格的なインフラを抱えるサービスの運営です。それはまた別の話です。
本当に必要なもの
Mastodon は複数のプロセスを同時に動かします。Rails の Web アプリ、バックグラウンドの Sidekiq ワーカー、ストリーミングサーバー、PostgreSQL、Redis。連合の仕組み上、あなたが寝ている間もサーバーは他のサーバーから投稿やメディアを取り込み続けます。
| インスタンス | プラン |
|---|---|
| ひとり用、フォロー少なめ | Small-IP — 2 vCPU、4 GB、月 $16 |
| 小さなコミュニティ、連合も活発 | Medium-IP — 4 vCPU、6 GB、月 $20 |
4 GB でも動きますがぎりぎりです。フォローしている人気投稿に何千もの返信がつくと、Sidekiq のキューが詰まります。6 GB なら余裕が生まれます。もうひとつの制約はディスクで、後述のメディアの項を見てください。
ドメインと専用 IP も必要です。他のサーバーは 443 番ポートであなたのサーバーに配送します。
Docker で構築する
公式リポジトリには docker-compose.yml が含まれています。Docker をインストールした新しい Ubuntu 24.04 サーバーで:
git clone https://github.com/mastodon/mastodon.git
cd mastodon
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
touch .env.production
docker compose run --rm -v $(pwd)/.env.production:/opt/mastodon/.env.production \
web bundle exec rake mastodon:setup
docker compose up -d
セットアップのタスクは、ドメイン、データベースと Redis の設定(既定値は compose ファイルと一致)、メールの設定、最初の管理者アカウントを尋ね、すべてを .env.production に書き込みます。チェックアウトしたタグのリリースノートは必ず読んでください。メジャーバージョン間で手順が変わることがあります。
Mastodon には dist/nginx.conf に nginx のテンプレートが同梱されています。/etc/nginx/sites-available/ にコピーし、ドメインを書き換えて certbot で証明書を取得します。リバースプロキシとドメインのガイドで両方を扱っています。
メール:リレーを使う
Mastodon は確認メールやパスワード再設定のメールを送ります。当社のサーバーでは 25 番と 465 番ポートが閉じているので、587 番ポートで外部のトランザクションメール事業者に向けます。
SMTP_SERVER=smtp.your-provider.example
SMTP_PORT=587
SMTP_LOGIN=apikey
SMTP_PASSWORD=your-smtp-password
SMTP_FROM_ADDRESS=notifications@your-domain.example
正直、いずれにせよリレーは欲しくなります。できたばかりのサーバー IP から送ったメールは迷惑メールに入りがちで、リレーにはあなたにまだない信用があります。
メディア:ディスクを食う怪物
サーバーが目にしたアカウントの画像や動画は、すべてローカルにキャッシュされます。活発なインスタンスなら週に何 GB にもなります。古いリモートメディアを定期的に片付けましょう。
docker compose exec web tootctl media remove --days 7
docker compose exec web tootctl preview_cards remove --days 30
これを毎日の cron ジョブに入れます。インスタンスが大きくなったら、.env.production の S3_* 設定でメディアを S3 互換のオブジェクトストレージに移しましょう。そうすれば VPS のディスクにはデータベースだけが残ります。
運用
- アップデート: 新しいタグを取得し、
docker compose pull、リリースノートどおりにマイグレーションを実行して再起動。メジャーバージョンは飛ばさないこと。 - バックアップ: PostgreSQL をダンプし、
.env.productionを安全に保管します。その中のシークレットがなければ復元は成功しません。restic のガイドでサーバー外へのコピーを、Managed Backups でサーバー全体の日次復元ポイントを用意できます。 - ドメインは変えられない。 fediverse 全体で、すべてのアカウントのアドレスに刻まれます。最初のアカウントを作る前に決めてください。
チームのチャット用にもっと軽いものが欲しいなら、Matrix サーバーのほうが合うかもしれません。
コメント
まだコメントはありません。最初になりましょう。