Get mastodon up and running quickly with docker compose and Make.
Run one of the following commands via make <command>
The default command. Will run docker compose up
once setup has been completed.
Runs postgres via docker-compose-postgres.yaml, extracted from docker-compose.yaml, so that we can run it stand-alone and wait for it to be healthy via wait-for-db.sh that lets us run setup-db
.
Runs caddy via docker-compose-caddy.yaml. This does not currently work, so we have embedded it in docker-compose.yaml with its own volume.
Uses sed
to inject SITE_ADDRESS
into .env.sample
and output the result to .env.production
.
Generates SECRET_KEY_BASE
, OTP_SECRET
, VAPID_PRIVATE_KEY
, and VAPID_PUBLIC_KEY
using rake secret
and rake mastodon:webpush:generate_vapid_key
respectively, and appends them to .env.production
. See secrets for more details. This is run after config-caddy
as it uses docker-compose.yml
which depends on .env.caddy.production
existing.
Uses sed
to inject LETS_ENCRYPT_EMAIL
and SITE_ADDRESS
into .env.caddy.sample
and outputs the result to .env.caddy.production
. It appends TLS_INTERNAL
to the file, which defaults to tls internal
for the purposes of local testing. This should be empty for production use.
Runs config-mastodon
and config-caddy
.
Runs mastodon setup interactively. This will create .env.production
, a sample of which is at .env.sample. It will setup the database, and optionally prompt to create an admin account.
Runs mastodon setup non-interactively with values copied from .env.sample. It will run config-caddy
prior to execution. It will setup the database but not prompt to create an admin account.
This uses the tootctl accounts create and the web
container to create an account with the Owner
role which you can use to login to your instance. We usually output the result of this elsewhere (e.g. ~/admin.txt
) during VM setup so that we can access it later.
Outputs the result of setup-admin to admin.txt
in the current directory.
Will run docker compose down
to remove any running containers, and remove caddy/
, mastodon/
, which are mounted into the containers, as well as .env.production and
.env.caddy`.
Runs the entire series of rollback run-postgres config setup-db setup-admin-txt run
.
The original setup with Caddy is inspired by Mastodon Setup with Docker and Caddy, but is based on the upstream docker-compose.yml from mastodon/mastodon. This makes it easy to diff and track upstream changes.
We are deferring the creation of .env.sample to another script/process for now.
The Caddy web server requires LETS_ENCRYPT_EMAIL
which is currently hard-coded into docker-compose.yaml
and docker-compose-caddy.yaml
.
Caddyfile uses tls internal
so that we can access mastodon with TLS at https://localhost after running.
We would like to be able to mount ./mastodon/public:/srv/mastodon/public:ro
in docker-compose-caddy.yml rather than using its own volume but this causes Mastodon to throw errors.