mastodonのメンテナンスとコストの話

マストドンを5年間管理してきてという記事を読んで

これまでも、ちょっとした仕様変更でも『Twitterは終わった。これからはマストドンだ』みたいな小規模な騒ぎみたいなのがあったけれども、今回は特に大きかった

mastodonが急激に再ブームになったよね。私もmastodonを5年管理しているのでそのあたりの愚痴?みたいな大変さをメモしていこうと思う

上記の記事にも書かれているけど「5年管理していたけれど、管理は結構大変」これは管理している人は凄く良くわかると思う。私も2022年3月末にメンテナンスしてから半年以上放置していた。

この再ブーム前まではメンテナンスもしていないし2022年末にはサービスをShutdownするかなと思っていたけどイーロンマスクのおかげ?で再ブームの影響でサービスを終了させるタイミングを逸した感じが凄くする。

データを移行して再構築しようとしてInstall方法を探したら・・・

Install方法はmastodonを立ち上げてみたに書いてあるしそこを参考にと思ったら5年の月日は長すぎた・・・Google検索しても2017年ぐらいの記事が出てきたので・・・

再構築メモ

  • コストを下げるために脱Intel
  • 運用がめんどくさいから今まで通りの考え方を引き継ぐ

この2点を基準で考えました。データとかはすべてRDSやS3においてあるのでフロント部分は基本Disposableな環境なのでサーバ再構築で設定さえ移行したらデータ移行はしなくていい環境

ARMのUbuntuを利用します。Intel CPUに比べてほんのちょっと安いのでARMにする。前に移行チャレンジしたときにはdocker composeが確かARM対応していなくてあきらめたけど今回は問題なく動いた。

  1. Ubuntu(ARM版)を起動
  2. ユーザ作成
  3. dockerをパッケージでインストール
  4. mastodon を clone
  5. 設定を移設
  6. mastodonをbuild 
  7. テスト

2. ユーザ作成

ユーザーを作成してsudoグループに入れる

ユーザ作成

$ sudo adduser ユーザー名

sudogグループに入れる

$ sudo usermod -aG sudo ユーザー名 

3. dockerのインストール

DockerのRepositoryより入れるようにします。

Docker Engine インストール(Ubuntu 向け)を見ながら作業を行ってください。

$ docker version
Client: Docker Engine - Community
Version: 20.10.22
API version: 1.41
Go version: go1.18.9
Git commit: 3a2c30b
Built: Thu Dec 15 22:27:03 2022
OS/Arch: linux/arm64
Context: default
Experimental: true

Server: Docker Engine - Community
Engine:
Version: 20.10.22
API version: 1.41 (minimum version 1.12)
Go version: go1.18.9
Git commit: 42c8b31
Built: Thu Dec 15 22:25:25 2022
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: 1.6.14
GitCommit: 9ba4b250366a5ddde94bb7c9d1def331423aa323
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0

4 と 5. 設定を移設

4のCloneはすぐにおわります

# cd /opt/
# git clone https://github.com/mastodon/mastodon.git

5の設定移行はそのままコピペでOK

.env.productionの設定は下記の通り。ほぼ変わっていません

# Federation
# ———-
# This identifies your server and cannot be changed safely later
# ———-
LOCAL_DOMAIN=mastodonサーバFQDN

# Redis
# —–
REDIS_HOST=Redisエンドポイント名
REDIS_PORT=6379

# PostgreSQL
# ———-
DB_HOST=RDSのエンドポイント名
DB_USER=DBユーザ名
DB_NAME=DB名
DB_PASS=パスワード
DB_PORT=5432

# Elasticsearch (optional)
# ————————
ES_ENABLED=true
ES_HOST=localhost
ES_PORT=9200
# Authentication for ES (optional)
ES_USER=elastic
ES_PASS=password

# Secrets
# ——-
# Make sure to use `rake secret` to generate secrets
# ——-
SECRET_KEY_BASE=docker compose run –rm web rake secretで出てきた謎のキー
OTP_SECRET=docker compose run –rm web rake secretで出てきた謎のキー

# Web Push
# ——–
# Generate with `rake mastodon:webpush:generate_vapid_key`
# ——–
VAPID_PRIVATE_KEY=docker compose run –rm web rake mastodon:webpush:generate_vapid_keyで出てきた謎の値
VAPID_PUBLIC_KEY=docker-compose run –rm web rake mastodon:webpush:generate_vapid_keyで出てきた謎の値

# Sending mail
# ————
SMTP_SERVER=SMTPサーバ名
SMTP_PORT=587
SMTP_LOGIN=ログインID
SMTP_PASSWORD=パスワード
SMTP_FROM_ADDRESS=Fromアドレス

# File storage (optional)
# ———————–
S3_ENABLED=true
S3_BUCKET=S3 Bucket名
S3_REGION=ap-northeast-1
AWS_ACCESS_KEY_ID=アクセスキー
AWS_SECRET_ACCESS_KEY=シークレットキー
S3_ALIAS_HOST=CloudFrontのCNAME

# IP and session retention
# ———————–
# Make sure to modify the scheduling of ip_cleanup_scheduler in config/sidekiq.yml
# to be less than daily if you lower IP_RETENTION_PERIOD below two days (172800).
# ———————–
IP_RETENTION_PERIOD=31556952
SESSION_RETENTION_PERIOD=31556952

6. mastodonをbuild 

$ sudo docker compose run –rm web rails db:migrate
$ sudo docker compose run –rm web rails assets:precompile
$ sudo docker compose stop && sudo docker compose up -d

これで完了。

環境

環境は大体下記の通り

 旧環境旧環境コスト新環境新環境コストコスト差分
EC2t3.small0.0272t4g.small0.02160.0056
RDSdb.t3.micro0.026db.t4g.micro0.0250.001
ElastiCashcache.t3.micro0.026cache.t4g.micro0.0250.001

コスト

1時間あたり 0.0056 + 0.001 + 0.001 = $0.0076/h のコスト削減ができた。

1月あたり 0.0076 × 24 × 30 = $5.472 のコスト削減・・・少ない(x_x

RDSとかElastiCashをAZ対応するにはコストがかかるなぁ~

コストは相変わらず計算したくない

ざっくりだけど

EC2 0.0216 × 24 × 30 ≒ $16

RDS 0.025 × 24 × 30 ≒ $18 

ElastiCash 0.025 × 24 × 30 ≒ $18

LB 0.0234 × 24 × 30 ≒ $17

$69 うわ・・・やっぱり$70ぐらいかかるのね

3年以上前に書いたAWS × mastodonにかかるコストとあまり変わらないね。

5年で30万ぐらいmastodonに使っている計算なのね^^;;

コミックアプリやゲームアプリの広告とか出ないとか言論の自由とかは置いておいて世の中のmastodonサーバ管理者の善意で成り立っているの?

でも・・・mastodonサーバのマネタイズどうするのよ。

Patreonとかでとかって考えたりもする。

まとめ

DBやStorageをフルマネージドを利用するからデータロスとかになる可能性が少ないし。Dockerの部分だけUpdateしたら終了するのも楽だし入替も簡単。

AWS Fargateでコスト下がるならと思ってみたり。

自分のところは5年間データロスもサービスダウンもなく安全に運用し続けられているので、そこは誇ってもいいかなと思っている。

マストドンを5年間管理してきてに書かれているけどこれを善意で行うのは本当に大変。まぁ私のサーバはサービスダウンあるけどね^^;;小規模のmastodonが2017年で盛り上がって減っていったのもよくわかる。コストとメンテナンス工数が辛くなると思う。mastodonのコスト部分が解決したらもっと流行ると思うけど難しいよね。やっぱり投げ銭みたいなやつ?Patreonのアカウントから作ってみるかなぁ~