Negli ultimi anni sono nati diversi progetti di social network decentralizzati. Uno dei interessanti è sicuramente Mastodon, si tratta di una piattaforma di microblogging completamente open source considerata alternativa a Twitter. Potenzialmente tutti gli utenti Mastodon possono ospitare un'istanza di tale social media su un proprio device.
Installare Mastodon non richiede conoscenze tecniche particolari ed è sostanzialmente alla portata di qualsiasi utente. In questa guida analizzeremo quindi la procedura per l'installazione di un'istanza del social network su Raspberry Pi.
Configurazione di Raspberry Pi OS
In questo tutorial diamo per scontato che Raspberry Pi OS, ovvero la distribuzione Linux sviluppata dai developer della Raspberry Pi Foundation, sia già installata e pienamente operativa. Partiamo quindi con il download e l'installazione di una serie di software e librerie varie che ci serviranno durante il setup dell'istanza di Mastodon.
Apriamo il terminale ed invochiamo la CLI (Command Line Interface) del gestore di pacchetti APT (Advanced Packaging Tool):
sudo apt update
sudo apt upgrade
Cosi facendo abbiamo eseguito un controllo degli aggiornamento di sistema disponibili. Se non vi sono update possiamo proseguire installando tali pacchetti, sempre tramite il package manager APT:
sudo apt install curl lsb-release imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git-core g++ libprotobuf-dev protobuf-compiler pkg-config nodejs gcc autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev nginx redis-server redis-tools certbot python3-certbot-nginx libidn11-dev libicu-dev libjemalloc-dev
Si tratta di un cospicuo set di librerie e tool che ci serviranno per far funzionare correttamente Mastodon. Successivamente è necessario generare un utente dedicato a tale istanza che sfrutteremo per l'esecuzione dell'applicativo:
sudo useradd mastodon -m
Installazione di NodeJS
Mastodon è stato realizzato tramite la nota runtime NodeJS e dipende da essa per il suo corretto funzionamento. Quindi dobbiamo procedere alla sua installazione e configurazione su Raspberry Pi OS. Torniamo in bash e digitiamo:
curl -fsSL https://deb.nodesource.com/setup_current.x | sudo -E bash -
sudo apt update
sudo apt install nodejs
Installazione e configurazione di PostgreSQL
Mastodon sfrutta il DBMS (Database Management System) PostgreSQL per gestire i dati. Ecco perché dobbiamo installare tale componente software prima di procedere alla configurazione dell'applicativo. Sempre da bash scriviamo:
curl -L https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-archive-keyring.gpg >/dev/null
Con questo comando abbiamo scaricato la chiave gpg dei pacchetti di PostgreSQL, ora provvediamo ad impostare il repository da cui reperire il software:
echo "deb [arch=arm64 signed-by=/usr/share/keyrings/postgresql-archive-keyring.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/postgresql.list
sudo apt update
e finalmente scarichiamo ed installiamo PostgreSQL:
sudo apt install postgresql postgresql-contrib
Successivamente è necessario predisporre un utente di Mastodon in tale database:
sudo -u postgres psql
CREATE USER mastodon CREATEDB;
\q
Configurazione di Yarn e delle librerie Ruby
Yarn è un package manager e per eseguire il build di Mastodon è necessario reperire dei pacchetti tramite questo tool. Dunque dobbiamo provvedere alla sua configurazione:
sudo corepack enable
sudo yarn set version stable
Successivamente passiamo invece all'installazione di altre librerie che servono a Mastodon, ovvero quelle di Ruby:
sudo su mastodon
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'eval "$(~/.rbenv/bin/rbenv init - bash)"' >> ~/.bashrc
exec bash
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.0.4
rbenv global 3.0.4
Arrivati a questo punto avremo non solo installato le librerie Ruby ma anche indicato al sistema di utilizzarle per tutti gli applicativi che le richiedono. Ora abilitiamo il package manager di Ruby:
gem install bundler --no-document
Installare Mastodon
Siamo finalmente pronti per installare Mastodon sul Raspberry Pi. Torniamo nella nostra home directory:
cd ~
Se non siamo loggati con l'utente chiamato mastodon
possiamo eseguire il login cosi:
sudo su mastodon
quindi passiamo alla clonazione del codice sorgente di Mastodon:
git clone https://github.com/mastodon/mastodon.git live
e dopo spostiamoci nella directory appena generata:
cd live
Ora procediamo all'installazione:
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
bundle config deployment 'true'
bundle config without 'development test'
bundle install -j$(nproc)
yarn install --pure-lockfile
Successivamente lanciamo il setup dell'applicativo:
RAILS_ENV=production bundle exec rake mastodon:setup
Arrivati a questo punto il programma ci domanderà il dominio da utilizzare, ecco un esempio:
mastodon.test.it
Nello step successivo Mastodon ci chiede se vogliamo sfruttare tale istanza in modalità single-user, ovvero un profilo privato gestibile unicamente da una sola persona. Se desiderate tale setup digitate "Y", altrimenti scrivete "N". Il programma vorrà sapere se lo stiamo eseguendo in un container Docker, noi in questo caso rispondiamo ovviamente con "N".
Le prossime domande riguardano tutte le impostazioni di PostgreSQL e Redis, possiamo rispondere a tutte affermativamente premendo il tasto invio. Mentre per quanto concerne il setup del cloud storage digitiamo "N", visto che stiamo operando completamente in locale. Lo stesso vale per l'invio di email inerenti a comunicazioni varie, mentre per le email che è possibile inviare agli utenti possiamo anche lasciare la casella di default premendo ancora su Invio.
Alle successive domande continuano a rispondere "Y" fino a quando non ci verrà chiesto di inserire un account di amministrazione, con le relative credenziali, ed un indirizzo email con cui eseguire il login.
Terminiamo il primo setup digitando:
exit
Configurare certificato SSL e NGIX
Per poterci connettere all'interfaccia Web è necessario avviare un Web server, in questo caso useremo NGINX, ed impostare un certificato SSL cosi da poter sfruttare il protocollo HTTPS.
Quindi torniamo in bash e scriviamo:
certbot --nginx -d TEST.com
Successivamente passiamo alla configurazione di NGIX:
sudo cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon
sudo ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon
A questo punto dobbiamo modificare un file in modo tale che al suo interno sia indicato il nostro dominio:
sudo nano /etc/nginx/sites-enabled/mastodon
la stringa su cui operare dovrebbe apparire cosi:
server_name example.com;
e va modificata in questo modo:
server_name test.com;
Ora dobbiamo indicare al Web server i certificati SSL generati poco prima, quindi reperiamo queste righe:
# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
e modifichiamole cosi:
ssl_certificate /etc/letsencrypt/live/mastodon.test.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mastodon.test.com/privkey.pem;
Salviamo tramite la shortcut CTRL+O e chiudiamo il documento con CTRL+X. Per rendere operative tali modifiche è necessario riavviare il Web server:
sudo systemctl reload nginx
Adesso impostiamo il demone di Mastodon in modo tale che sia attivo:
sudo cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/
sudo systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming
Se tutto dovesse andare per il meglio basterà aprire il browser e digitare questo URL per navigare nella nostra istanza di Mastodon:
https://mastodon.test.com