This post is now out of date. The FreeBSD port/package of Mastodon, net-im/mastodon, is no longer available. To install Mastodon on FreeBSD, refer to the Mastodon Production Guide.

Install the packages

# pkg install nginx postgresql95-server postgresql95-contrib mastodon

Enable and start required services

# sysrc redis_enable="YES" # service redis start # sysrc postgresql_enable="YES" # service postgresql initdb # service postgresql start

# sysrc nginx_profiles=mastodon # sysrc nginx_mastodon_configfile="/usr/local/www/mastodon/nginx.conf"

include /usr/local/www/mastodon/nginx-include.conf;

# sysrc nginx_enable="YES" # service nginx start

Create mastodon database user

# psql -d template1 -U pgsql -c "CREATE USER mastodon CREATEDB;"

Switch to the mastodon user

# su - mastodon

Customize .env.production

% RAILS_ENV=production rake secret

% RAILS_ENV=production rake mastodon:webpush:generate_vapid_key

Set up the database for the first time

% RAILS_ENV=production rails db:setup

Start the Mastodon daemons

# sysrc mastodon_web_enable="YES" # sysrc mastodon_workers_enable="YES" # sysrc mastodon_stream_enable="YES" # service mastodon_web start # service mastodon_workers start # service mastodon_stream start

Optional Configuration in /etc/rc.conf

/etc/rc.conf

.env.production

mastodon_web

mastodon_workers

mastodon_stream

Give users administration rights

# sudo su - mastodon % RAILS_ENV=production rails mastodon:make_admin USERNAME=alice

The Mastodon port ships with two sample nginx configuration files, a complete nginx.conf and nginx-include.conf, which mostly just includes the server block. If the web server is going to be dedicated to Mastodon, you can create a new nginx profile.If you prefer to continue using your current nginx.conf, you can add the line below to it. Make sure you put it inside the http block.In either case, you need to customize nginx-include.conf. At minimum, you will have to change all instances of. Once you are satisfied with its configuration, start nginx.Customize .env.production to suit your needs, but you must at least set values for LOCAL_DOMAIN and SMTP_FROM_ADDRESS. You also have to generate secrets for PAPERCLIP_SECRET, SECRET_KEY_BASE, and OTP_SECRET. Generate a different secret for each of these fields by running the command below three time. Save .env.production before moving on to the next step.If you are installing version 1.5.0 or later, to enable Web Push notifications, you need to generate a few extra secrets and put them in .env.production.Run the following commands with root privileges.As of version 2.0.0, values for some options can be read frominstead of. See the comments in Mastodon's three rc scripts,, andfor details.After the user alice has created an account through the web interface, you can give her administration rights by using the command below.