🦣

DockerでMastodonを立ち上げる【自宅サーバー】

に公開

今回自宅のミニPCにMastodonサーバーをDockerを使って立ち上げるまで若干苦労したところもあったので手順を書き残しておきます。

ちなみに今は色々とホスティングサービスも充実していてそれらを使うのも手かと思います。
例えば国内ではHostodonというサービスが良心的な価格でよさそうでした。
https://hostdon.jp/

プロジェクトのクローン

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というサービスが無料だったので使いました。
https://www.mailersend.com/

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

https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/

VPS等で公開

VPS等でnginxで公開する場合はこちらを参考に。
https://gist.github.com/TrillCyborg/84939cd4013ace9960031b803a0590c4#nginx-configuration

ログイン

先ほど作成した管理者アカウントでログインできれば成功です。
細かい設定等はあとはGUI上から実行できます。

https://toot.nwnwn.com/@yo/115593473825650261

お疲れさまでした。

Discussion