Mastodon Docker Setup
Clone Mastodon's repository.
# Clone mastodon to ~/mastodon directory git clone https://github.com/mastodon/mastodon.git # Change directory to ~/mastodon cd ~/mastodon # Checkout to the latest stable branch git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
Review the settings in
Getting the Mastodon image
Installing Docker containers
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.
docker-compose.ymlin your favorite text editor.
- Add environment variables to the
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 the
- Edit the three
image: tootsuite/mastodonlines to include the release you want. The default is
latestwhich is the most recent stable version, however it recommended to explicitly pin a tagged version. If you wanted to use v3.4.1 for example, you would edit the lines to say:
image: tootsuite/mastodon:v3.4.1. Visit https://hub.docker.com/r/tootsuite/mastodon/ to see the available tags.
- Comment out the
- Save the file and exit the text editor.
docker-compose buildto either pull or build the necessary container images.
- Create the public/system dir with
- Set correct file-owner with
sudo chown -R 991:991 public/system
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 is
5432(again, default), the database is
mastodon_production, the database user is
mastodonand the password is the one you chose and put into
- The redis server is
redis, the port is
6379and 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 chose
Nand 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 type
nonefor 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
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. The most used and best documented for Mastodon is
In case you have an Apache running on port 80 anyway, you can also use that apache2 instance as a reverse proxy.
Copy the example
nginx.conf to a specific one for your domain:
sudo cp dist/nginx.conf /etc/nginx/sites-available/example.com.conf
Then edit the file to replace
example.com with your domain, and adust the
root lines so they point to your installation. In my case I had to change the username and remove
Activate the configuration you added:
sudo ln -s ../sites-available/example.com.conf /etc/nginx/sites-enabled
SSL setup with Let's Encrypt
This depends on your host operating system. My experience is that DigitalOcean's setup documents work well for multiple Ubuntu and Debian versions.
To finish up, restart nginx with
sudo systemctl reload nginx.