Mastodon Social Network

  •  Configurare il social network di microblogging open source, decentralizzato, Mastodon con Apache2. Un esempio di file di configurazione per Apache2. del
  • , aggiornata al
  • , di
  • in

Mastodon LogoHo installato una istanza del famoso social network di microblogging decentralizzato e open source Mastodon sul mio server casalingo equipagiato con un Raspberry Pi 4 e Linux Ubuntu 20.04. La procedura di installazione ufficiale prevede di usare Nginx come web server, io invece ho usato Apache2 perché lo avevo già installato sul server e non mi andava di complicarmi la vita installando un web server diverso, per poi doverli configurare in modo che non si calpestino i piedi tra di loro. L'istanza Mastodon la puoi trovare all'indirizzo: soc.pierobosio.info. Si tratta appunto del mio Raspberry Pi 4 che gira in casa mia interfacciato su un IPv4 dinamico della TIM/Telecom e non in una Web Farm professionale. Se la connessione Tim ha problemi, il server non è più raggiungibile.

La parte più ostica dell'installazione è stata quella di configurare Apache2 come server proxy in funzione delle esigenze di Mastodon. La guida ufficiale, purtroppo, non offre un file di configurazione di esempio per Apache2, ma solo per Nginx. Ho dovuto cercare su Internet file esempio di configurazione per Apache2 condivisi da altri smanettoni per cercare di capire come affrontare il problema e devo dire che ho trovato siti web che mi hanno aiutato perlomeno a preparare un file di configurazione di Apache2 funzionante. Però non so dire se la configurazione di Apache2 che ho trovato è corretta per le esigenze di Mastodon o se in futuro potrebbe darmi dei problemi.

Mastodon è una piattaforma software con delle peculiarità particolari e interessanti che non conosco bene e che per ora non riesco a padroneggiare completamente, come per esempio il DBMS che non è il classico Mysql, ma è PostgreSQL. Tuttavia, qui intendo condividere il file di configurazione di Apache2, per quanto riguarda la sezione adibita a Mastodon. Ci sono moduli di Apache2 che se non sono già attivati, vanno prima comunque installati e attivati, tra questi:

  • headers
  • http2
  • proxy
  • proxy_http
  • proxy_http2
  • proxy_wstunnel
  • socache_shmcb
  • ssl

File di Configurazione:

<VirtualHost xxx.xxx.xxx:80>
    SuexecUserGroup "#xxxx" "#yyyy" # UserID e GroupID dell'utente mastodon.
    ServerName host.miodominio.tld
    DocumentRoot  # la cartella public di Mastodon, esempio: /home/mastodon/live/public
 
    <Directory /home/mastodon/live/public>
        # eventuali direttive Apache2 opzionali per la cartella
       ....
    </Directory>

    RedirectMatch ^/(?!.well-known)(.*)$ https://host.miodominio.tld/$1

# Update: Mastodon v. > 3.5.3

Redirect 301 /.well-known/webfinger https://miodominio.tld/.well-known/webfinger
Redirect 301 /.well-known/nodeinfo https://miodominio.tld/.well-known/nodeinfo
</VirtualHost>

<VirtualHost xxx.xxx.xxx:443>
    SuexecUserGroup "#xxxx" "#yyyy" # UserID e GroupID dell'utente mastodon.
    ServerName host.miodominio.tld
    DocumentRoot  # la cartella public di Mastodon esempio: /home/mastodon/live/public
    <Directory /home/mastodon/live/public>
     # eventuali direttive Apache2 opzionali per la cartella
    ...
    </Directory>

    RewriteEngine on
    SSLEngine on
    SSLCertificateFile # percorso cartella con il file del certificato SSL con chiave pubblica
    SSLCertificateKeyFile # cartella cartella con il file del certificato SSL con chiave privata
    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
    SSLCACertificateFile # percorso cartella con il file del certificato SSL delle autorità di certificazione
  
    # Sezione Mastodon
    SSLProxyEngine On
    RequestHeader set Front-End-Https "On"
   
    SSLHonorCipherOrder on
    SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:EECDH+AESGCM:AES256+EECDH:AES128+EECDH
    SSLCompression off
    SSLSessionTickets off

    Protocols h2 http/1.1 h2c
    Header always set Strict-Transport-Security "max-age=31536000"
    <LocationMatch "^/(assets|avatars|emoji|headers|packs|sounds|system)">
        Header always set Cache-Control "public, max-age=31536000, immutable"
        Require all granted
    </LocationMatch>
    <Location "/">
        Require all granted
    </Location>
    ProxyPreserveHost On
    RequestHeader set X-Forwarded-Proto "https"
    ProxyAddHeaders On
   #
    ProxyPass /500.html !
    ProxyPass /sw.js !
    ProxyPass /robots.txt !
    ProxyPass /manifest.json !
    ProxyPass /browserconfig.xml !
    ProxyPass /mask-icon.svg !
    ProxyPassMatch ^(/.*\.(png|ico)$) !
    ProxyPassMatch ^/(assets|avatars|emoji|headers|packs|sounds|system) !
    #
    ProxyPass /avatars/original/missing.png !
    ProxyPass /headers/original/missing.png !
    ProxyPass /inert.css !
    ProxyPass /oops.png !
    ProxyPass /packs !
    ProxyPass /assets !
    ProxyPass /system !
    ProxyPass /emoji !
    ProxyPass /sounds !
    #
    ProxyPass /api/v1/streaming ws://localhost:4000
    ProxyPassReverse /api/v1/streaming ws://localhost:4000
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/
   #
    ErrorDocument 500 /500.html
    ErrorDocument 501 /500.html
    ErrorDocument 502 /500.html
    ErrorDocument 503 /500.html
    ErrorDocument 504 /500.html

# Update: Mastodon v. > 3.5.3

Redirect 301 /.well-known/webfinger https://miodominio.tld/.well-known/webfinger
Redirect 301 /.well-known/nodeinfo https://miodominio.tld/.well-known/nodeinfo
</VirtualHost>

Questa è solo una bozza di esempio non esaustivo con le direttive Apache2 per la piattaforma Mastodon, configurazione che va poi completata e adattata in base ai parametri del tuo server.