Installer Mastodon sous FreeBSD (sans le port)
Rédigé par Gérald Niel - - 3 commentaires
Si vous ne savez pas ce qu'est Mastodon, je vous invite à aller lire mon petit billet à ce sujet.
En novembre 2017, lorsque m'est venu l'idée de monter une instance Mastodon sur Freebsd, le premier réflexe a donc été de rechercher dans mes moteurs de recherche favori les mots clefs #Mastodon et #FreeBSD. Et je suis tombé sur ces pages :
Heureuse surprise de découvrir qu'il existait un port FreeBSD et qu'en un coup de pkg install mastodon
il n'y avait pratiquement plus rien d'autre à faire. J'ai utilisé le port de la version 1.4.0 à la version 2.3.3 de Mastodon, sans problèmes ni bugs.
Au passage un grand merci à Joseph Mingrone pour le boulot. Nous allons d'ailleurs en réutiliser une partie.
Cependant le port n'est désormais plus maintenu, trop de complications visiblement à chaques mises à jour de l'arbre des ports FreeBSD ou de Mastodon. En l'occurence, le port est "cassé" si on suit la branche "latest" des paquets car Mastodon de fonctionne pas (encore ?) avec Node 10. Le port est donc resté figé à la version 2.3.3 de Mastodon.
Il faut donc trouver une autre solution… et se retrousser les manches…
Nous allons partir du principe dans ce qui suit que vous savez installer/configurer/administrer un système FreeBSD, que vous savez configurer/installer les prisons (jails) et que vous savez configurer redis et postgresql.
Et que donc vous avez un système ou une jail avec le réseau fonctionnel.
Pour ma part, l'instance Mastodon tourne dans une jail dédiée, avec son IP locale sur lo1, le réseau IPV4 des prisons étant 10.0.0.0/8. L'ip de la jail est 10.0.0.100, à vous d'adapter en fonction de votre configuration.
Le service dispose d'une IPV4 et une IPV6 publiques dédiées aussi.
Nous ferons tourner nginx, postgresql, redis sur la même "machine".
Installation des dépendances
En premier lieu, avant de commencer, il faut aller lire les documentations officielles, l'installation ou la mise à jour de Mastodon sous FreeBSD ne diffère pas tant que ça de l'installation et configuration sous Debian. Et en particulier :
- Mastodon Production Guide
- Migration Guide (si vous avez déjà une instance Mastodon installée avec le port, dans ce cas il est préférable de monter une nouvelle instance dans une jail toute neuve).
- Updating Mastodon (pour les futures mises à jour, et si vous migrez de la 2.3.3 vers la dernière 2.4.1 à la date de rédaction de ce billet).
Sur la jail fraichement installée et démarée, on commence par installer le minimum (je suis habitué à bash) :
# pkg install bash sudo
Ceci fait on peut lancer bash, ou redémarer la prison. Et installer l'ensemble des dépendances nécéssaire.
Attention, comme vu plus haut, Mastodon ne fonctionne pas avec Node 10, il est donc impératif de rester en quarterly pour les paquets, surtout ne pas modifier /etc/pkg/FreeBSD.conf
pour passer en latest.
# pkg install git imagemagick-nox11 ffmpeg libxml2 \
libxslt gcc protobuf pkgconf autoconf automake gmake bison python \
readline ncurses openssl libyaml icu libffi gdbm libidn redis \
postgresql95-server postgresql95-contrib postgresql95-client \
ruby ruby24-gems rubygem-bundler \
node yarn npm nginx dehydreated
Concernant Ruby, il est impératif de ne rien installer d'autre au risque de conflit entre les gem installés au niveau du système et ceux pour l'application.
Il est possible d'installer le paquet ruby25 (qui est la version de ruby officiellement supportée par Mastodon), cependant il faudra installer rybygem et le bundler depuis les sources. À vous de voir…
Installer Ruby via les sources pour l'utilisateur de l'application n'est pas une bonne idée, il y a alors un problème avec la librairie protobuf. Cf. l'issue #3057 sur le github de Mastodon ou celle-ci sur le github de cld3-ruby. Je n'ai pas trouvé de solution au problème avec une installation de ruby dans le répertoire de l'utilisateur mastodon en suivant la doc officielle.
Une foi les dépendances installées, créons l'utilisateur (j'ai gardé l'uid de l'utilisateur créé à l'installation du port) :
# pw useradd -n mastodon -u 144 -c "Mastodon User" -m -d /usr/local/www/mastodon -s /usr/local/bin/bash
Concernant le répertoire de l'utilisateur, libre à vous de modifier et d'utiliser /home/mastodon
, ou /var/www/mastodon
, tout dépend de l'organisation du système. Dans la logique de FreeBSD, j'ai choisi d'utiliser /usr/local/www
comme racine.
Installation de Mastodon (Ruby & NodeJS)
On va désormais scrupuleusement suivre la documentation officielle :
# su - mastodon
$ git clone https://github.com/tootsuite/mastodon.git live
$ cd ~/live
$ git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
$ bundle install -j$(getconf NPROCESSORS_ONLN) --deployment --without development test
$ yarn install --pure-lockfile
$ exit
Pour l'instant rien d'autre, nous allons nous occuper de PostgreSQL, de la configuration de Nginx et des scripts de démarrage avant de configurer la suite.
PosgreSQL
On part du principe que vous avez initialisé la base de donnée post installtion du paquet (service postgresql initdb) et que vous avez éventuellement modifié la configuration pour autoriser les connexions depuis l'ip de la jail ou pour utiliser une socket unix.
Il faut aller éventuellement modifier (le chemin dépend de la version de postgresql installé) /var/db/postgres/data95/pg_hba.conf
et /var/db/postgres/data95/postgresql.conf
.
En tant que root :
# psql -d template1 -U pgsql -c "CREATE USER mastodon CREATEDB;"
ou
# sudo -u pqsql psql
pgsql=# CREATE USER mastodon CREATEDB;
pgsql=# \q
Attention, si vous avez installé les ports postgresql96-*
l'utilisateur est postgres et non pgsql.
Et si la jail a ses IP publiques exposées et n'est pas uniquement avec les IP du réseau local sur lo1, il est nécéssaire de spécifier l'hôte. La connexion a localhost ne fonctionne alors pas.
Autre point important compte tenu de ce que j'indique ci-dessus, si vous comptez mettre à jour de la 2.3.3 vers la 2.4.1 en migrant dans une nouvelle jail, impératif d'installer la même version de postgresql, à savoir postgresql95-*
.
Dans le cas où vous migrer de la version 2.3.3 installé via les port dans une autre jail, depuis l'hôte le répertoire contenant la bdd peut être copié de l'ancienne jail vers la nouvelle jail.
Ne pas oubler de modifier la configuration pour être en phase avec le réseau de la nouvelle jail.
Configuration de Nginx
Pour la configuration de Nginx nous allons nous inspirer de ce qui existait pour le port et placer la configuration de nginx dans le répertoire de l'utilisateur mastodon (/usr/local/www/mastdon
pour ma configuration).
Ce n'est pas fondamentalement différent de la documentation officielle.
Mon instance (https://stoneartprod.xyz) tourne dans une jail dont l'ipv4 est 10.0.0.100, à adpater en fonction.
J'utilise Let's Encrypt et le port dehydrated
pour gérer les certificats SSL.
# su - mastodon
$ ee nginx.conf
worker_processes 2;
error_log /var/log/httpd-error.log;
user www www;
events
{
worker_connections 1024;
}
http
{
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/httpd-access.log;
default_type application/octet-stream;
include /usr/local/etc/nginx/mime.types;
index index.html
keepalive_timeout 65;
gzip on;
sendfile on;
include /usr/local/www/mastodon/nginx-include.conf;
}
$ ee nginx-include.conf
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
listen [::]:80;
server_name stoneartprod.xyz www.stoneartprod.xyz mastodon.stoneartprod.xyz;
root /usr/local/www/mastodon/live/public;
# Redirect LetsEncrypt to dehydrated
location ^~ /.well-known/acme-challenge {
auth_basic "off";
alias /usr/local/www/dehydrated;
}
location / {
return 301 https://stoneartprod.xyz$request_uri;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name www.stoneartprod.xyz mastodon.stoneartprod.xyz;
rewrite ^(.*) https://stoneartprod.xyz$1 permanent;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_certificate /usr/local/etc/dehydrated/certs/stoneartprod.xyz/fullchain.pem;
ssl_certificate_key /usr/local/etc/dehydrated/certs/stoneartprod.xyz/privkey.pem;
# generate with openssl dhparam 2048 > /path/to/dhparam.pem
ssl_dhparam /usr/local/etc/dehydrated/certs/dhparam.pem;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name stoneartprod.xyz;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_certificate /usr/local/etc/dehydrated/certs/stoneartprod.xyz/fullchain.pem;
ssl_certificate_key /usr/local/etc/dehydrated/certs/stoneartprod.xyz/privkey.pem;
# generate with openssl dhparam 2048 > /path/to/dhparam.pem
ssl_dhparam /usr/local/etc/dehydrated/certs/dhparam.pem;
keepalive_timeout 70;
sendfile on;
client_max_body_size 0;
root /usr/local/www/mastodon/live/public;
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
add_header Strict-Transport-Security "max-age=31536000";
location / {
try_files $uri @proxy;
}
location /sw.js {
add_header Cache-Control no-cache;
add_header Pragma "no-cache";
}
location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) {
add_header Cache-Control "public, max-age=31536000, immutable";
try_files $uri @proxy;
}
location @proxy {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Proxy "";
proxy_pass_header Server;
proxy_pass http://10.0.0.100:3000;
proxy_buffering off;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
tcp_nodelay on;
}
location /api/v1/streaming {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Proxy "";
proxy_pass http://10.0.0.100:4000;
proxy_buffering off;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
tcp_nodelay on;
}
# Redirect LetsEncrypt to dehydrated
location ^~ /.well-known/acme-challenge {
auth_basic "off";
alias /usr/local/www/dehydrated;
}
error_page 500 501 502 503 504 /500.html;
}
Dans /etc/rc.conf :
nginx_enable="YES"
nginx_profiles="mastodon"
nginx_mastodon_configfile="/usr/local/www/mastodon/nginx.conf"
Démarrage des services
Pour gérer le démarrage des services nous allons réutiliser et adapter les scripts de démarrage créés et utilisés pour le port FreeBSD.
$ ee /usr/local/etc/rc.d/mastodon_web
#!/bin/sh
# $FreeBSD: head/net-im/mastodon/files/mastodon_web.in 461097 2018-02-06 19:42:03Z jrm $
# PROVIDE: mastodon_web
# REQUIRE: LOGIN postgresql nginx redis
# KEYWORD: shutdown
#
# Add the following line to /etc/rc.conf to enable the Mastodon web server.
#
# mastodon_web_enable="YES"
#
# mastodon_web_concurrency: default: 2
# mastodon_web_loglevel: debug or error, default: error
# mastodon_web_port: default: 3000
# mastodon_web_threads: default: 5
#
# The options below can be set in /etc/rc.conf. If they are not set there, they
# will be read from .env.production.
#
# mastodon_db_name: e.g., mastodon_production
# mastodon_db_host: e.g., localhost
# mastodon_db_user: e.g., mastodon
# mastodon_db_port: e.g., 5432
# mastodon_local_domain: e.g., mastodon.mydomain.org (once set, do not change)
# mastodon_smtp_from_address: e.g., mastodon@mydomain.org
# mastodon_redis_host: e.g., localhost
# mastodon_redis_port: e.g., 6397
#
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
. /etc/rc.subr
desc="Mastodon web workers server"
name=mastodon_web
rcvar=mastodon_web_enable
load_rc_config $name
: ${mastodon_web_enable:=NO}
: ${mastodon_web_concurrency:=2}
: ${mastodon_web_loglevel:=error}
: ${mastodon_web_port:=3000}
: ${mastodon_web_threads:=5}
mastodon_web_chdir="/usr/local/www/mastodon/live"
mastodon_web_env="HOME=/usr/local/www/mastodon \
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin \
MAX_THREADS=\"${mastodon_web_threads}\" \
PORT=\"${mastodon_web_port}\" \
RAILS_ENV=production \
RAILS_LOG_LEVEL=\"${mastodon_web_loglevel}\" \
WEB_CONCURRENCY=\"${mastodon_web_concurrency}\" \
${mastodon_db_url:+DATABASE_URL=\"${mastodon_db_url}\"} \
${mastodon_db_host:+DB_HOST=\"${mastodon_db_host}\"} \
${mastodon_db_name:+DB_NAME=\"${mastodon_db_name}\"} \
${mastodon_db_port:+DB_PORT=\"${mastodon_db_port}\"} \
${mastodon_db_user:+DB_USER=\"${mastodon_db_user}\"} \
${mastodon_db_password:+DB_PASS=\"${mastodon_db_password}\"} \
${mastodon_local_domain:+LOCAL_DOMAIN=\"${mastodon_local_domain}\"} \
${mastodon_smtp_from_address:+SMTP_FROM_ADDRESS=\"${mastodon_smtp_from_address}\"} \
${mastodon_redis_host:+REDIS_HOST=\"${mastodon_redis_host}\"} \
${mastodon_redis_port:+REDIS_PORT=\"${mastodon_redis_port}\"}"
mastodon_web_user=mastodon
pidfile="/var/run/mastodon/${name}.pid"
procname="ruby24:"
command="/usr/local/bin/bundle"
command_args="exec puma -C config/puma.rb \
>> /var/log/mastodon/${name##mastodon_}.log 2>&1 &"
run_rc_command "$1"
$ ee /usr/local/etc/rc.d/mastodon_workers
#!/bin/sh
# $FreeBSD: head/net-im/mastodon/files/mastodon_workers.in 461097 2018-02-06 19:42:03Z jrm $
# PROVIDE: mastodon_workers
# REQUIRE: LOGIN postgresql nginx redis
# KEYWORD: shutdown
# Add the following lines to /etc/rc.conf to enable the Mastodon background
# workers.
#
# mastodon_workers_enable="YES"
#
# mastodon_workers_dbpool: default: 5
# mastodon_workers_loglevel: debug or error, default: error
# mastodon_workers_threads: default: 5
#
# The options below can be set in /etc/rc.conf. If they are not set there, they
# will be read from .env.production.
#
# mastodon_db_name: e.g., mastodon_production
# mastodon_db_host: e.g., localhost
# mastodon_db_user: e.g., mastodon
# mastodon_db_port: e.g., 5432
# mastodon_local_domain: e.g., mastodon.mydomain.org (once set, do not change)
# mastodon_smtp_from_address: e.g., mastodon@mydomain.org
# mastodon_redis_host: e.g., localhost
# mastodon_redis_port: e.g., 6397
#
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
. /etc/rc.subr
desc="Mastodon background workers server"
name=mastodon_workers
rcvar=mastodon_workers_enable
load_rc_config $name
: ${mastodon_workers_enable:=NO}
: ${mastodon_workers_loglevel:=error}
: ${mastodon_workers_dbpool:=5}
: ${mastodon_workers_threads:=5}
mastodon_workers_chdir="/usr/local/www/mastodon/live"
mastodon_workers_env="HOME=/usr/local/www/mastodon \
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin \
DB_POOL=\"${mastodon_workers_dbpool}\" \
RAILS_ENV=production \
RAILS_LOG_LEVEL=\"${mastodon_workers_loglevel}\" \
${mastodon_db_url:+DATABASE_URL=\"${mastodon_db_url}\"} \
${mastodon_db_host:+DB_HOST=\"${mastodon_db_host}\"} \
${mastodon_db_name:+DB_NAME=\"${mastodon_db_name}\"} \
${mastodon_db_port:+DB_PORT=\"${mastodon_db_port}\"} \
${mastodon_db_user:+DB_USER=\"${mastodon_db_user}\"} \
${mastodon_db_password:+DB_PASS=\"${mastodon_db_password}\"} \
${mastodon_local_domain:+LOCAL_DOMAIN=\"${mastodon_local_domain}\"} \
${mastodon_smtp_from_address:+SMTP_FROM_ADDRESS=\"${mastodon_smtp_from_address}\"} \
${mastodon_redis_host:+REDIS_HOST=\"${mastodon_redis_host}\"} \
${mastodon_redis_port:+REDIS_PORT=\"${mastodon_redis_port}\"}"
mastodon_workers_user=mastodon
pidfile="/var/run/mastodon/${name}.pid"
procname="ruby24:"
command="/usr/local/bin/bundle"
command_args="exec sidekiq -c ${mastodon_workers_threads} -q default -q mailers -q pull -q push \
>> /var/log/mastodon/${name##mastodon_}.log 2>&1 &"
run_rc_command "$1"
$ ee /usr/local/etc/rc.d/mastodon_stream
#!/bin/sh
# $FreeBSD: head/net-im/mastodon/files/mastodon_stream.in 452460 2017-10-19 18:31:56Z jrm $
# PROVIDE: mastodon_stream
# REQUIRE: LOGIN postgresql nginx redis
# KEYWORD: shutdown
# Add the following line to /etc/rc.conf to enable the Mastodon streaming
# service.
#
# mastodon_stream_enable="YES"
#
# mastodon_stream_port: default 4000
#
# The options below can be set in /etc/rc.conf. If they are not set there, they
# will be read from .env.production.
#
# mastodon_db_name: e.g., mastodon_production
# mastodon_db_host: e.g., localhost
# mastodon_db_user: e.g., mastodon
# mastodon_db_port: e.g., 5432
# mastodon_local_domain: e.g., mastodon.mydomain.org (once set, do not change)
# mastodon_smtp_from_address: e.g., mastodon@mydomain.org
# mastodon_redis_host: e.g., localhost
# mastodon_redis_port: e.g., 6397
#
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
. /etc/rc.subr
desc="Mastodon streaming server"
name=mastodon_stream
rcvar=mastodon_stream_enable
load_rc_config $name
: ${mastodon_stream_enable:=NO}
: ${mastodon_stream_port=4000}
sig_stop=HUP
mastodon_stream_chdir="/usr/local/www/mastodon/live"
mastodon_stream_env="HOME=/usr/local/www/mastodon \
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin \
NODE_ENV=production \
PORT=\"${mastodon_stream_port}\" \
${mastodon_db_url:+DATABASE_URL=\"${mastodon_db_url}\"} \
${mastodon_db_host:+DB_HOST=\"${mastodon_db_host}\"} \
${mastodon_db_name:+DB_NAME=\"${mastodon_db_name}\"} \
${mastodon_db_port:+DB_PORT=\"${mastodon_db_port}\"} \
${mastodon_db_user:+DB_USER=\"${mastodon_db_user}\"} \
${mastodon_db_password:+DB_PASS=\"${mastodon_db_password}\"} \
${mastodon_local_domain:+LOCAL_DOMAIN=\"${mastodon_local_domain}\"} \
${mastodon_smtp_from_address:+SMTP_FROM_ADDRESS=\"${mastodon_smtp_from_address}\"} \
${mastodon_redis_host:+REDIS_HOST=\"${mastodon_redis_host}\"} \
${mastodon_redis_port:+REDIS_PORT=\"${mastodon_redis_port}\"} \
USER=mastodon"
mastodon_stream_user=mastodon
command="/usr/local/bin/node"
command_args="./streaming/index.js \
>> /var/log/mastodon/${name##mastodon_}.log 2>&1 &"
run_rc_command "$1"
On active les service dans rc.conf :
# chmod +x /usr/local/etc/rc.d/mastodon_*
# sysrc mastodon_web_enable="YES"
# sysrc mastodon_workers_enable="YES"
# sysrc mastodon_stream_enable="YES"
Configuration de Mastodon
Avant de poursuivre il faut modifier quelques fichiers pour pouvoir utiliser les scripts de démarrage et gérer les fichiers de pid.
J'ai pour cela regardé les fichier de patch du port original.
# su - mastodon
$ cd ~/live
$ ee config/puma.rb
Il faut insérer, à la ligne n°4 :
pidfile '/var/run/mastodon/mastodon_web.pid'
Pour sidekiq :
$ ee config/sidekiq.yml
Ajouter à la fin du fichier, après la dernière ligne :
:pidfile: /var/run/mastodon/mastodon_workers.pid
Et enfin, pour paperclip :
$ ee config/environments/production.rb
À la ligne n°103, insérez :
# Paperclip config:
Paperclip.options[:image_magick_path] = "/usr/local/bin"
Paperclip.options[:command_path] = "/usr/local/bin"
Voilà… normalement je n'ai rien oublié… j'éspère ! 😉
Ah si ! J'oubliais justement, sans ça, ça va merder… :
# mkdir /var/run/mastodon
# chown mastodon /var/run/mastodon
# mkdir /var/log/mastodon
# chown mastodon /var/log/mastodon
Si vous démarrez l'installation alors vous pouvez maintenat suivre le guide de production pour Mastodon et lancer, sous l'utilisateur mastodon, dans le répertoire ~/live
:
$ RAILS_ENV=production bundle exec rake mastodon:setup
Si vous mettez à jour depuis une version installé via les ports dans une autre jail vous pouvez suivre le guide de migration.
Pour PostgreSQL les deux options fonctionnent, soit copie de la base de donnée de l'ancienne jail vers la nouvelle, soit dump de la base sql et import du dump. J'ai testé les deux options.
Et dans le cas de la migration/mise à jour de la 2.3.3 vers une version supérieure (2.4.1 au moment de la rédaction) il faut suivre le guide de mise à jour, et en particulier ne pas oublier :
# su - mastodon
$ cd ~/live
$ RAILS_ENV=production bundle exec rails db:migrate
$ RAILS_ENV=production bundle exec rails assets:precompile
Si vous êtes joueur, vous pouvez toujour tenter la mise à jour depuis la jail où la machine où vous aviez installé Mastodon avec le port.
Cependant pour éviter les problème il faudra supprimer tous les gems installé via les ports.
# pkg delete rubygem-*
Cependant… il me semble plus sage de partir dans une jail toute neuve, ça permet de garder sous le coude la version 2.3.3 fonctionnelle sans rien casser dedans, au cas où…
Prudence est mère de sureté ! 😉
Un foi l'installation/configuration terminée, il est temps de lancer les services :
# service nginx start
# service mastodon_web start
# service mastodon_workers start
# service mastodon_stream start
Et comme d'habitude HTH !
Remerciement
Encore grand merci à Joseph Mingrone pour avoir maintenu le port FreeBSD et pour les scripts de démarrage et les patch que j'ai réutilisé.
Et un grand merci à l'ensemble des contributeurs au projet Mastodon.
Ce document est, comme l'ensemble du contenu de ce blog sous licence Creative Commons CC BY-SA 3.0.
Autres documents et liens en rapport
- Migration de Mastodon dans une Jail FreeBSD par Jaccques Foucry aka Lovis_IX
3 commentaires