Thread
Keisuke Hayashi
Keisuke Hayashi

メモ: Mastodonをローカル環境で立ち上げる手順。

1. git clone git@github.com:mastodon/mastodon.git

2. cd mastodon

3. docker compose -f .devcontainer/compose.yaml build --no-cache

4. docker compose -f .devcontainer/compose.yaml up -d

5. docker compose -f .devcontainer/compose.yaml exec app bin/setup

6. docker compose -f .devcontainer/compose.yaml exec app bin/dev

これでデータがない状態でアプリが起動する。

Keisuke Hayashi
Keisuke Hayashi

次に本番環境で稼働しているデータをダンプして、ローカル環境でリストアする手順。

7. ssh vps_server

8. pg_dump mastodon_production > mastodon_production_$(date +%Y%m%d).sql

9. gzip mastodon_production_$(date +%Y%m%d).sql

10. exit

11. mkdir -p backups

Keisuke Hayashi
Keisuke Hayashi

12. scp 'vps_server:/home/mastodon/mastodon_production_*.sql.gz' backups/

13. gunzip backups/mastodon_production_*.sql.gz

14. docker compose -f .devcontainer/compose.yaml exec db psql -U postgres -d template1 -c "DROP DATABASE IF EXISTS postgres;"

15. docker compose -f .devcontainer/compose.yaml exec db psql -U postgres -d template1 -c "CREATE DATABASE postgres;"

16. docker compose -f .devcontainer/compose.yaml exec -T db psql -U postgres -d postgres < backups/mastodon_production_xxx.sql

Keisuke Hayashi
Keisuke Hayashi

本番サーバーから必要な環境変数を取得してローカル環境用にコピペする。ActiveRecord暗号化キーやCloudflare R2の設定で必要。

17. ssh vps_server "sudo cat /home/mastodon/live/.env.production | grep -E '(SECRET_KEY_BASE|OTP_SECRET|VAPID_|ACTIVE_RECORD_ENCRYPTION|S3_|AWS_|CDN_)'"

18. vi .env.development

その後に開発サーバーを再起動すると、投稿や画像が表示されるはず。

Keisuke Hayashi
Keisuke Hayashi

Good.

Image 1
Keisuke Hayashi
Keisuke Hayashi

これでようやくMastodonインスタンスを消せる。DB名やMastodonバージョンの不一致でデータがうまく表示されずに詰まったけどなんとか完了。