Mastodon
How to install Mastodon ActivityPub server on FreeBSD.
Installation Procedure
Install Dependencies
pkg install -y nginx acme.sh postgresql13-server mastodon
Configure Nginx Web Server
Add the following inside the http block of /usr/local/etc/nginx/nginx.conf
include /usr/local/www/mastodon/dist/nginx.conf;
Update Nginx configuration:
Note: The mastodon/dist/nginx.conf was originally provided by the www/mastodon package. It will need to be created.
sed -i '' -e 's/example.com/<YOUR DESIRED DOMAIN>/g' /usr/local/www/mastodon/dist/nginx.conf
Enable nginx on startup and start nginx:
sysrc nginx_enable="YES" service nginx start
Configure SSL certificates with acme.sh
mkdir -p /usr/local/etc/ssl/<YOUR DESIRED DOMAIN> acme.sh --issue --webroot /usr/local/www/mastodon/public -d <YOUR DESIRED DOMAIN> acme.sh --install-cert -d <YOUR DESIRED DOMAIN> --cert-file /usr/local/etc/ssl/<YOUR DESIRED DOMAIN>/cert.pem --key-file /usr/local/etc/ssl/<YOUR DESIRED DOMAIN>/key.pem --ca-file /usr/local/etc/ssl/<YOUR DESIRED DOMAIN>/ca.pem --fullchain-file /usr/local/etc/ssl/<YOUR DESIRED DOMAIN>/fullchain.pem --reloadcmd 'service nginx restart'
Configure PostgreSQL DB Server
Enable postgresql on startup, initial databases and start postgresql:
sysrc postgresql_enable="YES" service postgresql initdb service postgresql start
Create a new role for the mastodon database:
su -l postgres -c 'createuser -d mastodon'
Configure Redis Server
Enable redis on startup and start redis:
sysrc redis_enable="YES" service redis start
protected-mode should be disabled in /usr/local/etc/redis.conf
Configure Mastodon
File permissions is an important factor for a working copy of Mastodon so let's switch to the dedicated mastodon user and run the installations:
su -l mastodon cd yarn set version classic bundle config deployment 'true' bundle config without 'development test' bundle install -j$(getconf _NPROCESSORS_ONLN) yarn install --pure-lockfile
On the next step let's install and configure the Mastodon system still as the mastodon user.
127.0.0.1 rather than localhost or sockets.
RAILS_ENV=production bundle exec rake mastodon:setup
Enable the services at startup and start the services:
sysrc mastodon_sidekiq_enable=YES sysrc mastodon_streaming_enable=YES sysrc mastodon_web_enable=YES service mastodon_sidekiq start service mastodon_streaming start service mastodon_web start
Upgrade Procedure - 4.0.2=>4.1.0
Stop the services
service mastodon_sidekiq stop service mastodon_streaming stop service mastodon_web stop
Upgrade the packages
pkg upgrade -y
Upgrade the rubygems and assets
su -l mastodon cd bundle install -j$(getconf _NPROCESSORS_ONLN) yarn install --pure-lockfile RAILS_ENV=production bundle exec rails db:migrate RAILS_ENV=production bundle exec rake tmp:cache:clear RAILS_ENV=production bundle exec rails assets:precompile exit
Restart the services
service -R
References & Resources
- Stefano Marinelli: Installing Mastodon inside a FreeBSD jail using BastilleBSD (it-notes.dragas.net, 2022-11-23)
- BastilleBSD template to bootstrap Mastodon in a FreeBSD jail (github.com: ddowse, 2022-11-23)
- Installer Mastodon sous FreeBSD (sans le port) (blog.gegeweb.org, French, 2018-06-17)