Mastodonのサーバをdockerで建てる
まえがき
2024/10/9 v4.3.0で改稿
環境
OS: Ubuntu 22.04.2 LTS x86_64
前提条件
docker composeが入っている。
下準備
バージョンはその都度確認してください
git clone https://github.com/mastodon/mastodon.git
cd mastodon
git fetch && git checkout v4.3.0
cp .env.production.sample .env.production
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'
となっているので、envrionment
の部分全てを消し、env_fileを.env.dbにして、
.env.dbを新規作成し、以下の内容を書きます
POSTGRES_USER=mastodon
POSTGRES_PASSWORD=passwd
POSTGRES_DB=mastodon_production
あと、portが他のものにかぶるようだったら変更します。
'POSTGRES_HOST_AUTH_METHOD=trust'
をそのままにした場合、.env.dbでの設定は不要で、.env.productionのみ設定してください。
.env.production
続いて、.env.productionを変更していきます。以下をまず変更します。
DB_USER、DB_PASSともに.env.dbでpostgresの設定した場合はそちらと同じものを用いてください。
LOCAL_DOMAIN=mstdn.example.com
REDIS_HOST=redis
DB_HOST=db
DB_USER=mastodon
DB_PASS=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
にします。
R2を使う場合は、以下のサイトに例が載っています
nginx
これを参考にして設定します
ElasticSearch
docker-compose.yml
のesに関する行をコメントアウトして、"network.host=0.0.0.0"
をenvironment
に追加します。
そして、env.prodctionのES_HOST
をesにしておきます。また、vm.max_map_count=262144
を/etc/sysctl.conf
に書き込みます。(これをしないと起動できません)
そしたら、docker compose run --rm web rails chewy:deploy
を行います
初期設定
docker-compose run --rm web bin/rails db:encryption:init
で出てきたものを.env.production
にコピペしてください。
docker compose run --rm web bin/rails db:migrate
docker compose run --rm web bin/rails assets:precompile
これで、LOCAL_DOMAIN
にアクセスできれば終わりです!
メール認証が終わった後に、
sudo docker compose exec web bin/tootctl accounts modify user_id --role Admin
user_idをadminにすることができます。
あとがき
今回は、dockerを用いてmastodonを構築しました。個人的には、公式のdocker構築ドキュメントがないので少し戸惑いました。
誤った点があればご指摘ください。
Discussion