DockerでMastodonを立ち上げる【自宅サーバー】
今回自宅のミニPCにMastodonサーバーをDockerを使って立ち上げるまで若干苦労したところもあったので手順を書き残しておきます。
ちなみに今は色々とホスティングサービスも充実していてそれらを使うのも手かと思います。
例えば国内ではHostodonというサービスが良心的な価格でよさそうでした。
プロジェクトのクローン
git clone https://github.com/mastodon/mastodon.git
cd mastodon
環境変数の設定
cp .env.production.sample .env.production
.env.productionを基本的にはコメントに従って設定していきます。
ドメインを設定
LOCAL_DOMAIN=example.com
Redisの設定
REDIS_HOST=redis
DB設定
docker composeのdbを使うのでDB_HOSTをdbにあとはお好みで。
DB_HOST=db
DB_USER=mastodon
DB_NAME=mastodon_production
DB_PASS=password
DB_PORT=5432
Secretの設定
コマンドで生成
docker compose run --rm web bundle exec rails secret
SECRET_KEY_BASE=xxx
Active Records関連のキーを設定
docker compose run --rm web bundle exec rails db:encryption:init
ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=XXX
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=XXX
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=XXX
Web Push用のキーの生成
docker compose run --rm web bundle exec rails mastodon:webpush:generate_vapid_key
VAPID_PRIVATE_KEY=xxx
VAPID_PUBLIC_KEY=xxx
SMTPサーバーの設定
サインイン等に必要なメール配送用に適当なSMTPサーバーを使って設定します。
今回はmailersendというサービスが無料だったので使いました。
SMTP_SERVER=smtp.mailersend.net
SMTP_PORT=587
SMTP_LOGIN=XXX@example.com
SMTP_PASSWORD=XXX
SMTP_FROM_ADDRESS=no-reply@example.com
ストレージの設定
S3を使うこともできるようですが今回はそのまま自宅のPCに保存したかったのでS3_ENABLEをfalseに設定しました。
S3_ENABLED=false
S3_BUCKET=files.example.com
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
S3_ALIAS_HOST=files.example.com
DBの設定
ユーザーの作成
dbのコンテナに入ります。
docker compose up -d db
docker compose exec db bash
さっき設定したユーザー名とパスワードで新規ユーザーを作成します。
psql -U postgres
postgres=# CREATE USER mastodon;
CREATE ROLE
postgres=# alter role mastodon with password 'password';
ALTER ROLE
postgres=# create database mastodon_production with owner=mastodon;
CREATE DATABASE
終わったらexitで抜けます。
マイグレーション
docker compose run --rm web bundle exec rails db:migrate
マスターデータの生成
docker compose run --rm web bundle exec rails db:seed
パーミッション設定
データの永続化のためにvolumeでマウントしている関係でdocker内から書き込みができるよう権限を許可する必要があります。
sudo chown -R 991:991 public/system
起動
問題がなければlocalhost:3000で立ち上がります。
docker compose up -d
管理者アカウントの作成
初回起動時はサインアップできないため初回にログインするための管理者アカウントを作成します。
EMAILをメールアドレスに。NAMEをユーザーのIDに置き換えてください。
docker compose run --rm web tootctl accounts create --role Admin --email EMAIL --confirmed NAME
パスワードが発行されるので控えておきます。
またデフォルトは審査制になっていますが管理者であっても承認のフラグを建てる必要があるのでその操作をしておきます。
docker compose run --rm web tootctl accounts approve NAME
公開設定
Cloudflare Tunnel で公開
今回自分は固定IPを持たない自宅のネットワークから公開するためにCloudflare Tunnelを使用しました。以下のようにルーティングします。
- localhost:3000 -> example.com
- localhost:4000 -> example.com/api/v1/streaming
VPS等で公開
VPS等でnginxで公開する場合はこちらを参考に。
ログイン
先ほど作成した管理者アカウントでログインできれば成功です。
細かい設定等はあとはGUI上から実行できます。
お疲れさまでした。
Discussion