Post

Costruisci il tuo server Mastodon

Gira un bel po di dramma in questi giorni riguardo twitter, ed è anche pieno di alternative anche più attraenti. Facciamoci la nostra instanza Mastodon che potenzialmente è un ottima alternativa a Twitter.

Che Cosa è Mastodon

Mastodon è un social network di microblogging open source molto simile alla piattaforma acquisita recentemente da Elon Musk, le persone sono in grado di creare profili, pubblicare messaggi (fino ad un massimo di 500 caratteri), condividere immagini o video e seguire ulteriori persone. Unica cosa e grande differenza sostanziale rispetto a Twitter è la parziale decentralizzazione, il che significa che non esiste una società che gestisce l’intera rete Mastodon.

Cosa ci occorre

  • Dominio registrato
  • Una instanza VPS, con 4GB RAM raccomandati
  • DNS con record A che punta la nostra VPS
  • Un provider SMTP per mandare in uscita le email

Setup iniziale

Questi comandi non sono specifici per Mastodon, ma aiutano a configurare e ad avere una buona base di partenza su ogni nuovo server.

Creare un user non-root

1
adduser pippo
1
usermod -aG sudo pippo

uscire e riautenticatevi con l’user appena creato

1
ssh utente@IP

Installazione e aggiornamento

Sempre buona norma installare gli aggiornamenti su una nuova instanza appena creata. Come prima cosa aggiornate l’indice dei repository per aggiornare le cache locali e vedere se ci sono pacchetti più recenti:

1
sudo apt update
1
sudo apt dist-upgrade

Configurare l’hostname

modificatelo dal seguente file /etc/hostname:

1
sudo nano /etc/hostname

dentro il file, cambiate l’hostname con lo stesso nome utilizzato dal vostro dominio.

prossima, modificare /etc/hosts e configurate anche qui:

1
sudo nano /etc/hosts

Installare i pacchetti richiesti

Prima cosa installeremo i pacchetti development dal default repository di Debian:

1
sudo apt install build-essential bundler git libidn11-dev libjemalloc-dev libpq-dev nodejs npm postgresql postgresql-contrib rbenv redis-server ruby ruby-dev

per nginx consiglio di seguire i seguenti comandi piuttosto che utilizzare il default di debian

1
2
3
apt-get update
apt install -y curl gnupg2 ca-certificates lsb-release \
debian-archive-keyring

Scaricare e salvare la signing key di NGINX:

1
2
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

lsb_release serve per definire l’OS e il nome della release, poi creiamo un apt source file:

1
2
3
4
5
OS=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
RELEASE=$(lsb_release -cs)
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/${OS} ${RELEASE} nginx" \
| tee /etc/apt/sources.list.d/nginx.list

ora potete aggiornare le cache del repository e installare nginx:

1
2
3
apt-get update
apt-get install -y nginx
nginx

adesso dobbiamo installare yarn via npm:

1
sudo npm install --global yarn

Database setup e configurazioni

configuriamo PostgreSQL

1
sudo su postgres
1
2
3
4
5
6
7
8
9
10
11
12
13
psql

CREATE DATABASE mastodon_db;

CREATE USER mastodon;

ALTER USER mastodon createdb;

ALTER USER mastodon WITH ENCRYPTED PASSWORD 'password_super_segreta';

ALTER DATABASE mastodon_db OWNER TO mastodon;

exit

un secondo exit, per ritornarare al nostro user di partenza:

Configuriamo il nostro utente mastodon di sistema

dobbiamo creare un utente dedicato esclusivamente per mastodon. Per farlo, eseguire il seguente comando:

1
sudo adduser --group --system mastodon

Scarichiamo Mastodon

Possiamo scaricarlo dal repository git localmente nella nostra macchina con il seguente comando:

1
git clone https://github.com/mastodon/mastodon.git

cambiamo l’owner del repository appena scaricato:

1
sudo chown -R mastodon:mastodon mastodon

Creare la directory dell’app

spostiamo i file mastodon nella directory www

Mai servire una directory dalla propria home, spostiamola invece sotto la directory /var/www:

1
sudo mv mastodon /var/www/

Configurare la versione di mastodon da usare

spostiamoci sotto:

1
cd /var/www/mastodon

Aggiungiamo la directory Mastodon nella safe list

Se proviamo a modificare il repository, fallirà. Di default, i repositories sono protetti. Per permettere all’user mastodon di gestire i file mastodon, dobbiamo aggiungere la directory in una safe list (e farlo anche per l’utente mastodon):

1
sudo -u mastodon git config --global --add safe.directory /var/www/mastodon

Determinare l’ultima versione di Mastodon

Dobbiamo specificare la versione Mastodon da usare. come prima cosa segui il link:

mastodon/releases

prendi nota dell numero della versione indicato come “latest”.

controllare la versione con il seguente comando:

1
sudo -u mastodon git checkout <version>

Preparare Mastodon per l’installazione

1
sudo gem install bundler
1
sudo -u mastodon bundle config deployment 'true'
1
sudo -u mastodon bundle config without 'development test'
1
sudo -u mastodon bundle install -j$(getconf _NPROCESSORS_ONLN)

Configurare Mastodon

I seguenti comandi eseguirranno lo script di setup:

1
sudo -u mastodon RAILS_ENV=production bundle exec rake mastodon:setup

Installare il systemd units

Copiare gli script di startup nella directory /etc/systemd/system:

1
sudo cp /var/www/mastodon/dist/mastodon*.service /etc/systemd/system
1
sudo sed -i 's/home\/mastodon\/live/var\/www\/mastodon/g' /etc/systemd/system/mastodon-*.service
1
sudo sed -i 's/home\/mastodon\/.rbenv\/shims/usr\/local\/bin/g' /etc/systemd/system/mastodon-*.service
1
sudo systemctl daemon-reload
1
sudo systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming

Configurare il nostro Reverse Proxy

1
sudo cp /var/www/mastodon/dist/nginx.conf /etc/nginx/conf.d/mastodon.conf
1
sudo nano /etc/nginx/conf.d/mastodon.conf

Cambiare l’home path corretto, e il servername. entrambi nella sezione 80 e 443

aggiungere nella certificate section:

1
2
ssl_certificate /etc/ssl/certs/ssl-cert.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert.key;

verificate successivamente il prossimo step che puntino ai certificati giusti creati con certbot

Restart nginx

1
sudo systemctl restart nginx

Configurare i certificati TLS

1
sudo apt install snapd
1
sudo snap install core; sudo snap refresh core
1
sudo snap install --classic certbot
1
sudo ln -s /snap/bin/certbot /usr/bin/certbot
1
sudo certbot --nginx

Alcuni tweaks di sicurezza

1
sudo apt install unattended-upgrades

modificate /etc/apt/apt.conf.d/50unattended-upgrades

Abilitate il reboot automatico, il tempo di reboot automatico e abilitate il reboot automatico degli users.

Installare Crowdsec

Crowdsec è una versione più avanzata del fail2ban. (a breve di cercherò di ampliare)

1
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
1
sudo apt install crowdsec
1
sudo apt install crowdsec-firewall-bouncer-iptables

o in alternativa potete usare lo stesso fail2ban

Questo post è sotto licenza CC BY 4.0 a nome dell'autore.

DISCLAIMER: Questo blog non rappresenta una testata giornalistica in quanto viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge N°62 del 07/03/2001. Leggi di più

© Cybertome. Alcuni diritti riservati.

Servizio offerto da Jekyll con tema Chirpy