Clone Mastodon's repository.
# Clone Mastodon to ~/mastodon directory
git clone https://github.com/mastodon/mastodon
# Change directory to ~/mastodon
cd ~/mastodon
Review the settings in docker-compose.yml
.
If you're not making any local code changes or customizations on your instance, you can use a prebuilt Docker image to avoid the time and resource consumption of a build.
- Open
docker-compose.yml
in your favorite text editor. - Add environment variables to the
db
section:environment: POSTGRES_PASSWORD: xyz <-- choose a safe one, 20-30 chars POSTGRES_DB: mastodon_production POSTGRES_USER: mastodon POSTGRES_HOST_AUTH_METHOD: trust
- To use pre-built images comment out the
build: .
lines for theweb
,streaming
, andsidekiq
services. - Save the file and exit the text editor.
- Run
docker-compose build
to either pull or build the necessary container images. - Create the public/system dir with
mkdir public/system
- Set correct file-owner with
sudo chown -R 991:991 public/system
First, make sure .env.production
exists, even if empty, to satisfy docker;
touch .env.production
Next generate a configuration with:
docker-compose run --rm web bundle exec rake mastodon:setup
This is an interactive wizard that will guide you through the options and generate app secrets.
- Enter the Fully Qualified Domain Name (FQDN) of your Mastodon instance.
- Select if you want a Single User instance (not recommended, but if you prefer, use that).
- Obviously, you are running Mastodon in a docker instance, so type Y (or hit return, as it's the default)
- The PostgreSQL host is
db
, the port is5432
(again, default), the database ismastodon_production
, the database user ismastodon
and the password is the one you chose and put intodocker-compose.yml
. - The redis server is
redis
, the port is6379
and the password is empty. - If you want to store uploaded files on the cloud, enter Y here and put in the necessary data.
- If you want to send emails from the local machine, enter
Y
. I choseN
and was able to send email via a free mailgun account. Accept the default port then enter the user and password for the email sending account. Select the SMTP authentication typeplain
andnone
for OpenSSL verify mode. Choose what sender address the emails will have.mastodon@*yourdomain.com*
is a decent possibility.
Now it will output your configuration. Copy and paste that into the .env.production
file.
The wizard will setup the database schema and precompile assets. After it's done, you can launch Mastodon with:
docker-compose up -d
You need a reverse proxy in front of your Mastodon instance.
Use the following caddy configuration;
domain.com {
root * /home/<user>/mastodon/public # the same ./public as in the docker compose, replace <user>
encode gzip
@static file
handle @static {
file_server
}
handle /api/v1/streaming* {
reverse_proxy localhost:4000 # the "streaming" container in the docker compose
}
handle {
reverse_proxy localhost:3000 # the "web" container in the docker compose
}
}