Mastodonのサーバをdockerで建てる
環境
OS: Ubuntu 22.04.2 LTS x86_64
前提条件
docker composeが入っている。
下準備
git clone https://github.com/mastodon/mastodon.git
cd mastodon
cp .env.production.sample .env.production
sudo docker compose pull
docker-compose.ymlの変更
db:
restart: always
image: postgres:14-alpine
shm_size: 256mb
networks:
- internal_network
healthcheck:
test: ['CMD', 'pg_isready', '-U', 'postgres']
volumes:
- ./postgres14:/var/lib/postgresql/data
environment:
- 'POSTGRES_HOST_AUTH_METHOD=trust'
となっているので、
['CMD', 'pg_isready', '-U', 'postgres']
を
['CMD', 'pg_isready', '-U', 'example-mastodon-user', '-d', 'mastodon_prpduction']
に変えて、
'POSTGRES_HOST_AUTH_METHOD=trust'
を消し、代わりに、POSTGRES_USER
, POSTGRES_DB
, POSTGRES_PASSWORD
を追加します。以下のようになるはずです。
db:
restart: always
env_file: .env.db
image: postgres:14-alpine
shm_size: 256mb
networks:
- internal_network
healthcheck:
test: ['CMD', 'pg_isready', '-U', 'example-mastodon-user', '-d', 'mastodon_production']
volumes:
- ./postgres14:/var/lib/postgresql/data
environment:
POSTGRES_USER: example-mastodon-user
POSTGRES_PASSWORD: hogehoge
POSTGRES_DB: mastodon_production
あと、portが他のものにかぶるようだったら変更します。
.env.productionの変更
続いて、.env.productionを変更していきます。以下をまず変更します。
LOCAL_DOMAIN=your_domain
REDIS_HOST=redis
DB_HOST=db
DB_PASS=your_passwd
また、ElasticSearchはいったんES_ENABLED=false
で無効化します。
そしたら、
docker run --rm tootsuite/mastodon bundle exec rake secret
を2回行い、それぞれSECRET_KEY_BASE
とOTP_SECRET
に入れます。
そして、docker run --rm --env-file ./.env.production tootsuite/mastodon bundle exec rake mastodon:webpush:generate_vapid_key
を行い、出力されたものに置き換えます。
あと、SMTPの設定をそれぞれ変えていきます(以下はsendgridの例)
SMTP_SERVER=smtp.sendgrid.net
SMTP_PORT=587
SMTP_LOGIN=apikey
SMTP_PASSWORD=generated_apikey
SMTP_FROM_ADDRESS=notifications@example.com
SMTP_AUTH_METHOD=plain
SMTP_ENABLE_STARTTLS_AUTO=true
今回はオブジェクトストレージは使いませんので、S3_ENABLED=false
にします。
初期設定
sudo docker compose run --rm web rails db:create
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
あとはcloudflareのtunnel等を用いて、LOCAL_DOMAIN
にアクセスできれば終わりです!
メール認証が終わった後に、
sudo docker compose exec web bin/tootctl accounts modify user_id --role Admin
user_idをadminにすることができます。
あとがき
今回は、dockerを用いてmastodonを構築しました。個人的には、公式のdocker構築ドキュメントがないので少し戸惑いました。
誤った点があればご指摘ください。
参照
Discussion