Mastodon インスタンスをセットアップする
事前準備
この記事に基づいて Mastodon インスタンスを設定するには、以下の 3 点が必要です。
-
Cloudflare
-
- Cloudflare で管理されている独自ドメイン
- Linux サーバ
以下をインストールしてください。-
- コマンド
docker compose
を実行できるようにしてください。
- コマンド
-
設定
-
作業ディレクトリの作成
作成したディレクトリに、Mastodon インスタンスに関連するすべてのファイルが保存されます。
mkdir /path/to/mastodon cd /path/to/mastodon
-
Mastodon 用
docker-compose.yaml
ファイルの取得
Docker Compose は、docker-compose.yaml
という名前の YAML ファイルに基づいて、自動的にアプリケーションを構成します。wget https://raw.githubusercontent.com/mastodon/mastodon/main/docker-compose.yml
-
nginx の設定
nginx は、Mastodon の前段に置かれるリバースプロキシとして使われます。
以下のコマンドを実行して、設定ファイルを格納するディレクトリを作成し、また Mastodon 用の設定ファイルをダウンロードします。mkdir nginx wget https://gist.githubusercontent.com/yude/7d0de7f85cc75a6a8e17ff59a610a6d4/raw/7fec9cacfb060d824840aa1d029f9848481cf5c7/gistfile1.txt nginx/mastodon.conf
また、
docker-compose.yaml
に以下を追記します。
追記の際は、インデントに注意してください。nginx: image: nginx:latest volumes: - ./nginx/mastodon.conf:/etc/nginx/conf.d/default.conf restart: always depends_on: - web
-
認証情報の設定
-
.env.production
ファイルの雛形を用意します。
これは、Mastodon の認証情報や、インスタンスの基本的な設定が記述されるファイルです。wget https://raw.githubusercontent.com/mastodon/mastodon/main/.env.production.sample .env.production
-
後の設定で必要となる文字列を生成します。
これらの文字列は、ステップ 3 で使用しますから、安全な場所に保管してください。- 文字列 A を生成します。
2 箇所で使用します。別々の文字列でなければなりませんから、2 回実行してそれぞれを保管してください。docker compose run --rm web bundle exec rake secret
- 文字列 B を生成します。
docker compose run --rm web bundle exec rake mastodon:webpush:generate_vapid_key
- 文字列 A を生成します。
-
.env.production
を編集します。
vi
やnano
等のエディタを使用して、このファイルを開いてください。必須の設定項目
- Federation
-
LOCAL_DOMAIN
: Mastodon インスタンスを公開するドメインを指定します。
-
- Redis
-
REDIS_HOST
:redis
に変更します。
-
- PostgreSQL
-
DB_HOST
:db
に変更します。
-
- Elasticsearch
-
ES_ENABLED
:false
に変更します。
-
- Secrets
-
SECRET_KEY_BASE
: 文字列 A のうち、1 つ目の文字列を指定します。 -
OTP_SECRET
: 文字列 A のうち、2 つ目の文字列を指定します。
-
- Web Push
-
VAPID_PRIVATE_KEY
,VAPID_PUBLIC_KEY
:
文字列 B を指定します。
この文字列は、そのまま貼り付けられる形式で出力されているはずですから、そのままペーストします。
-
- File storage
-
S3_ENABLED
:false
に変更します。
-
任意の設定項目
以下の項目を設定せずとも、Mastodon インスタンスは実行できます。しかし、アカウントの認証等で混乱が生じる可能性がありますから、設定することを強く推奨します。- Sending mail
-
SMTP_SERVER
: SMTP サーバーのアドレスを指定します。 -
SMTP_PORT
: SMTP サーバーのポート番号を指定します。 -
SMTP_LOGIN
: SMTP サーバーへのログインに使用するアカウント名を指定します。 -
SMTP_PASSWORD
: SMTP サーバーへのログインに使用するパスワードを指定します。 -
SMTP_FROM_ADDRESS
: Mastodon インスタンスから送信されるメールの、送信元アドレスを指定します。
-
- その他
- 自分しか使用しない Mastodon インスタンスである場合は、以下を追記して新規登録を無効化できます。
SINGLE_USER_MODE=true
- 自分しか使用しない Mastodon インスタンスである場合は、以下を追記して新規登録を無効化できます。
- Federation
-
-
データベースの初期化、アセットの生成
以下のコマンドを実行します。docker compose run --rm web rails db:migrate docker compose run --rm web rails assets:precompile
-
Cloudflare の設定
cloudflared
(Cloudflare Tunnel) を用いて、Mastodon インスタンスを公開します。-
Tunnels ページを開く
以下の順でページを遷移します。- Cloudflare にログイン
- Cloudflare アカウント ホーム (
https://dash.cloudflare.com/[アカウント ID]
) - Zero Trust
- Access
- Tunnels
-
トンネルの作成
Create a tunnel
をクリックします。
必要な項目を入力して、Save tunnel
をクリックします。- Tunnel name: トンネルの名前。任意の文字列を指定できます (例:
mastodon
)
- Tunnel name: トンネルの名前。任意の文字列を指定できます (例:
-
トークンの保管
If you already have cloudflared installed on your machine:
の下に表示されているコマンドを、一旦コピーします。
まだ Cloudflare のページを開いているブラウザは閉じないでください。 -
トークン文字列の編集
コピーした文字列はcloudflared
コマンドの書式になっています。
今回使用するのは トークンの部分のみ ですので、文字列から以下の部分を除去します。sudo cloudflared service install
install
の後の半角スペースも除去します。 -
トークンの保管
docker-compose.yaml
が保管されているディレクトリに.env
というファイルを作成し、以下の内容で保存します。CLOUDFLARED_TOKEN=ステップ 4 で編集済みの文字列
-
トンネルの作成作業を完了する
Cloudflare のページに戻り、Next
をクリックします。
いくつかの入力欄が現れますから、必要な項目を入力します。-
Subdomain
:mstdn.example.com
のように、サブドメイン上に Mastodon インスタンスを設置する場合は指定します。 -
Domain (required)
: Mastodon インスタンスを設定するドメインの第 2 レベル部 (mstdn.example.com
であればexample.com
の部分) を指定します。 -
Path
: 何も入力しません。 -
Type
:HTTP
を選択します。 -
URL
:nginx
を入力します。
作業が終了したら、
Save tunnel
をクリックします。 -
-
cloudflared
サービスの追加
docker-compose.yaml
に以下を追記し、保存します。
追記の際は、インデントに注意してください。cloudflared: image: cloudflare/cloudflared:latest user: root restart: always command: tunnel --no-autoupdate run --token $CLOUDFLARED_TOKEN
-
-
Mastodon インスタンスの起動
docker compose up -d
で起動します。
正しく起動していることが確認できなければ、docker compose logs
でログを参照できます。 -
自分のアカウントの作成
インスタンスのセットアップが完了した後は、できる限り早く自分のアカウントを作成します。
以下のコマンドで指定したアカウントをOwner
に昇格できます。docker exec -it $(docker compose ps -q web) bin/tootctl accounts modify アカウント名 --role Owner
セットアップは以上です。お疲れ様でした。
Discussion