⌨️

MastodonをDockerでsetupする

2023/02/16に公開

本記事について

  • MastodonをDockerを使ってSetupする方法に関するメモ

参考にしたサイト

構成

  • PostgreSQL Database, Redis(Cache), mastodon Frontサーバ1(Web), mastodon frontサーバ(userstream), バックグラウンドサーバ(sidekiq)はDockerコンテナで構成
  • ユーザアクセスの受付はnginxプロセスに担わせる

gitからソースコードの取得

cd $HOME
git clone https://github.com/mastodon/mastodon.git
cd mastocon
git checkout v4.1.0

.env.productionの修正

サンプルをコピー

cp .env.production.sample .env.production

Domainを設定

LOCAL_DOMAIN=example.com

DB設定

DB_HOST=db
DB_USER=user
DB_NAME=db
DB_PASS=password
DB_PORT=5432

Secret生成

docker-compose run --rm web bundle exec rake secret

Secretを設定ファイルにコピー

SECRET_KEY_BASE=xxx
OTP_SECRET=xxx

Web Push用の鍵の生成

docker-compose run --rm web bundle exec rake mastodon:webpush:generate_vapid_key

Web Push用の鍵を設定ファイルにコピー

VAPID_PRIVATE_KEY=xxx
VAPID_PUBLIC_KEY=xxx

データベースの作成

database用コンテナを起動してログイン

docker-compose up -d db 
docker-compose exec db bash

databaseを作成

psql -U postgres
postgres=# CREATE USER mastodon_user;
CREATE ROLE
postgres=# alter role mastodon_user with password 'password';
ALTER ROLE
postgres=# create database mastodon_db with owner=mastodon_user;
CREATE DATABASE

databaseにテーブル等をセットアップ

docker compose run --rm web bundle exec rake db:migrate

SMTPサーバの設定

gmailのSMTPサーバを設定する。まずgoogle accountにログインし、アプリパスワードを生成する。

  1. google accountにアクセス

    https://myaccount.google.com/

  2. セキュリティ設定にアクセス

    https://myaccount.google.com/security

  3. アプリパスワードを生成

    生成したアプリパスワードを設定ファイル.env.productionに設定する。
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SMTP_LOGIN=xxx@gmail.com
SMTP_PASSWORD=アプリパスワード
SMTP_FROM_ADDRESS=notifications@example.com

ファイルアクセスパーミッション設定

mastodonソースに含まれるdocker-compose.ymlを利用する場合、以下のマウント設定がある。

...
    volumes:
      - ./public/system:/mastodon/public/system
...

mastodonサーバ経由での書き込みを許可する。

sudo chown -R 991:991 public/system

起動

docker-compose up -d

nginxのインストール

sudo apt install nginx

let's encryptの設定

sudo apt install certbot
sudo systemctl stop nginx
certbot certonly --standalone -d example.com
sudo systemctl start nginx
certbot certonly --webroot -d example.com -w $HOME/mastodon/live/public/

nginxの設定

こちらを参考にnginxに設定を施す。

ファイアウォール設定

mastodonサーバアクセスのためのポートのみ解放する。

タイプ プロトコール ポート IPアドレス
HTTP TCP 80 0.0.0.0/0
HTTPS TCP 443 0.0.0.0/0

その他設定

Adminアカウントの生成

docker-compose exec web bash
tootctl accounts create --role Admin --email EMAIL --confirmed USERNAME

Adminアカウントへの変更

docker-compose exec web bash
tootctl accounts modify USERNAME --role Admin

Registrationルールの設定。いずれかを選択・設定

tootctl settings registrations open
tootctl settings registrations close
tootctl settings registrations approved

Discussion