Una rete Matrix decentralizzata

Matrix Synapse: Costruire la Tua Piattaforma di Comunicazione Decentralizzata

Hai mai desiderato riprendere il controllo delle tue conversazioni online, lontano dalle grandi piattaforme centralizzate che raccolgono i tuoi dati? Se la risposta è sì, sei nel posto giusto! Oggi esploreremo Matrix, un protocollo aperto e decentralizzato per la comunicazione in tempo reale, e ti guideremo passo passo nell’installazione di Synapse, il server di riferimento di Matrix, sul tuo server Rocky Linux 9 utilizzando Docker Compose e un reverse proxy Traefik per una gestione impeccabile dei certificati Let’s Encrypt.


Matrix: Un Ritorno alle Origini del Web Aperto

Ricordi i primi giorni del World Wide Web, quando la decentralizzazione e i protocolli aperti erano la norma? Matrix sposa appieno questa filosofia. Non è solo un’applicazione di messaggistica; è un protocollo aperto per la comunicazione federata, che permette a chiunque di ospitare il proprio server e interagire con gli utenti di altri server Matrix, senza intermediari. Questo significa:

  • Decentralizzazione: Nessun singolo punto di controllo. La tua comunicazione è distribuita su una rete di server gestiti da individui e organizzazioni diverse.
  • Interoperabilità: Grazie al protocollo aperto, puoi comunicare con chiunque sulla rete Matrix, indipendentemente dal client o dal server che utilizza.
  • Sicurezza e Privacy: Le conversazioni possono essere crittografate end-to-end, garantendo che solo i partecipanti possano leggerle.
  • Trasparenza: Essendo open source, il codice di Matrix e Synapse è accessibile e verificabile da tutti.

Con Matrix, possiedi i tuoi dati e hai il controllo su come comunichi, un principio fondamentale che ci riporta alla visione originale di un internet libero e accessibile a tutti.


Prerequisiti per l’installazione

Prima di iniziare, assicurati di avere a disposizione:

  • Un server con Rocky Linux 9 installato e accesso root o tramite sudo.
  • Un nome di dominio (es. matrix.ilmiodominio.it) che punterà al tuo server Matrix.
  • Docker e Docker Compose installati sul server. Se non li hai, puoi installarli seguendo le guide ufficiali di Docker.

Installazione di Matrix Synapse con Docker Compose e Traefik

Questa guida si basa sull’utilizzo di Docker Compose per orchestrare Synapse e Traefik, garantendo un’installazione pulita e gestibile.

1. Configurazione Iniziale del Server

Assicurati che il tuo sistema sia aggiornato:

sudo dnf update -y
sudo dnf install -y git

2. Creazione delle Directory

Creiamo le directory necessarie per la persistenza dei dati di Synapse e dei certificati di Traefik:

sudo mkdir -p /opt/matrix
cd /opt/matrix
sudo mkdir -p synapse/data
sudo mkdir -p traefik/acme

3. Generazione del file homeserver.yaml di Synapse

Synapse richiede un file homeserver.yaml per la configurazione principale. Useremo Docker per generarlo nella directory corretta:

docker run --rm \
    -v /opt/matrix/synapse/data:/data \
    -e SYNAPSE_SERVER_NAME=matrix.ilmiodominio.it \ # Sostituisci con il tuo nome di dominio
    -e SYNAPSE_REPORT_STATS=no \ # Puoi impostarlo su 'yes' se vuoi inviare statistiche
    matrixdotorg/synapse:latest generate

Ricorda di sostituire matrix.ilmiodominio.it con il tuo dominio!

Questo comando genererà il file homeserver.yaml nella directory /opt/matrix/synapse/data. Ora, modifica questo file per abilitare alcune funzionalità e assicurarti che Synapse sia configurato correttamente per lavorare con Traefik:

sudo nano /opt/matrix/synapse/data/homeserver.yaml

Cerca e modifica le seguenti righe (o aggiungile se mancanti):

  • Assicurati che server_name sia impostato correttamente:
    server_name: "matrix.ilmiodominio.it"
  • Configura i listener per l’HTTP: **Synapse ascolterà sulla porta 8008 per Traefik.**
    listeners:
      - port: 8008
        tls: false
        type: http
        x_forwarded_for: true
        resources:
          - names: [client, federation]
  • Per la federazione (comunicazione con altri server Matrix), abilita l’IP di peering:
    federation_ip_range_blacklist: []
  • Se intendi usare registrazioni aperte (non consigliato per server personali), imposta:
    enable_registration: true

    Per registrazioni solo su invito, lascialo su false e imposta enable_registration_without_verification: false.

4. Creazione del file docker-compose.yml

Ora, crea il file docker-compose.yml nella directory /opt/matrix/. Questo file conterrà tutta la configurazione per i servizi Synapse e Traefik:

version: '3.8'

services:
  synapse:
    image: matrixdotorg/synapse:latest
    container_name: synapse
    restart: unless-stopped
    volumes:
      - ./synapse/data:/data
    environment:
      SYNAPSE_SERVER_NAME: matrix.ilmiodominio.it # Deve corrispondere al homeserver.yaml
      SYNAPSE_REPORT_STATS: "no" # O "yes"
    labels:
      # Router per il traffico client (web, app mobile)
      - "traefik.enable=true"
      - "traefik.http.routers.synapse-client-rtr.rule=Host(`matrix.ilmiodominio.it`)" # Sostituisci il tuo dominio
      - "traefik.http.routers.synapse-client-rtr.entrypoints=websecure"
      - "traefik.http.routers.synapse-client-rtr.tls=true"
      - "traefik.http.routers.synapse-client-rtr.tls.certresolver=letsencrypt"
      - "traefik.http.routers.synapse-client-rtr.service=synapse-svc"
      # Servizio per il traffico client
      - "traefik.http.services.synapse-svc.loadbalancer.servers.0.url=http://synapse:8008" # Synapse ascolta su 8008

      # Router per la federazione Matrix (comunicazione tra server)
      - "traefik.http.routers.synapse-federation-rtr.rule=Host(`matrix.ilmiodominio.it`) && PathPrefix(`/_matrix/federation/v1`)"
      - "traefik.http.routers.synapse-federation-rtr.entrypoints=websecure"
      - "traefik.http.routers.synapse-federation-rtr.tls=true"
      - "traefik.http.routers.synapse-federation-rtr.tls.certresolver=letsencrypt"
      - "traefik.http.routers.synapse-federation-rtr.service=synapse-federation-svc"
      # Servizio per la federazione
      - "traefik.http.services.synapse-federation-svc.loadbalancer.servers.0.url=http://synapse:8008" # Synapse ascolta su 8008 per la federazione

      # Router per il ben noto file .well-known/matrix/server (importante per la scoperta automatica)
      - "traefik.http.routers.synapse-wellknown-server-rtr.rule=Host(`matrix.ilmiodominio.it`) && PathPrefix(`/.well-known/matrix/server`)"
      - "traefik.http.routers.synapse-wellknown-server-rtr.entrypoints=websecure"
      - "traefik.http.routers.synapse-wellknown-server-rtr.tls=true"
      - "traefik.http.routers.synapse-wellknown-server-rtr.tls.certresolver=letsencrypt"
      - "traefik.http.routers.synapse-wellknown-server-rtr.service=synapse-wellknown-server-svc"
      - "traefik.http.services.synapse-wellknown-server-svc.loadbalancer.servers.0.url=http://synapse:8008"

      # Router per il ben noto file .well-known/matrix/client (importante per la scoperta automatica)
      - "traefik.http.routers.synapse-wellknown-client-rtr.rule=Host(`matrix.ilmiodominio.it`) && PathPrefix(`/.well-known/matrix/client`)"
      - "traefik.http.routers.synapse-wellknown-client-rtr.entrypoints=websecure"
      - "traefik.http.routers.synapse-wellknown-client-rtr.tls=true"
      - "traefik.http.routers.synapse-wellknown-client-rtr.tls.certresolver=letsencrypt"
      - "traefik.http.routers.synapse-wellknown-client-rtr.service=synapse-wellknown-client-svc"
      - "traefik.http.services.synapse-wellknown-client-svc.loadbalancer.servers.0.url=http://synapse:8008"

    networks:
      - matrix_net

  traefik:
    image: traefik:v2.10
    container_name: traefik
    restart: unless-stopped
    command:
      - "--api.dashboard=true" # Abilita il dashboard di Traefik
      - "--providers.docker=true" # Abilita il provider Docker
      - "--providers.docker.exposedbydefault=false" # Non esporre servizi di default
      - "--providers.docker.network=matrix_net" # Specifica la rete Docker da monitorare
      - "--entrypoints.web.address=:80" # Entrypoint HTTP
      - "--entrypoints.websecure.address=:443" # Entrypoint HTTPS
      - "--certificatesresolvers.letsencrypt.acme.email=tua_email@esempio.com" # Inserisci la tua email
      - "--certificatesresolvers.letsencrypt.acme.storage=/acme.json" # Percorso per i certificati ACME
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web" # Usa HTTP challenge
      - "--log.filepath=/traefik.log"
      - "--log.level=INFO"
      - "--accesslog.filepath=/access.log"
      - "--accesslog.level=INFO"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./traefik/acme:/acme.json # Persistenza dei certificati e configurazione
    ports:
      - "80:80"
      - "443:443"
      # Porta per il dashboard di Traefik - SCOMMENTA SOLO PER DEBUG e PROTEGGI CON AUTH
      # - "8080:8080"
    labels:
      # Configurazione per il dashboard di Traefik (OPZIONALE, PROTEGGI SEMPRE!)
      - "traefik.enable=true"
      - "traefik.http.routers.traefik-dashboard-rtr.rule=Host(`monitor.ilmiodominio.it`)" # Sostituisci con un sottodominio per il dashboard
      - "traefik.http.routers.traefik-dashboard-rtr.entrypoints=websecure"
      - "traefik.http.routers.traefik-dashboard-rtr.tls=true"
      - "traefik.http.routers.traefik-dashboard-rtr.tls.certresolver=letsencrypt"
      - "traefik.http.routers.traefik-dashboard-rtr.service=api@internal"
      # Middleware per autenticazione base (genera hash password con `htpasswd -nb utente password`)
      - "traefik.http.middlewares.traefik-auth.basicauth.users=admin:$apr1$...$..." # Genera il tuo hash password qui
      - "traefik.http.routers.traefik-dashboard-rtr.middlewares=traefik-auth"
    networks:
      - matrix_net

networks:
  matrix_net:
    external: false

Ricorda di sostituire matrix.ilmiodominio.it e monitor.ilmiodominio.it con i tuoi domini/sottodomini! Non dimenticare di sostituire tua_email@esempio.com con il tuo indirizzo email e di generare un hash password sicuro per il dashboard di Traefik se decidi di abilitarlo!

5. Avvio del Stack Docker Compose

Una volta che tutti i file sono a posto, puoi avviare il tuo server Matrix Synapse. Assicurati di essere nella directory /opt/matrix:

sudo docker compose up -d

Verifica lo stato dei contenitori:

sudo docker compose ps

Dovresti vedere synapse e traefik in stato “Up”. Traefik si occuperà di reindirizzare il traffico HTTP a HTTPS e di ottenere automaticamente i certificati Let’s Encrypt per il tuo dominio. Il file acme.json nella directory traefik/acme conterrà i certificati e dovrà avere i permessi corretti (di solito 600) dopo la prima esecuzione per essere accessibile solo da Traefik.

6. Creazione dell’utente amministratore (opzionale ma consigliato)

Per creare un utente amministratore sul tuo server Matrix, puoi usare il comando register_new_matrix_user all’interno del contenitore Synapse:

sudo docker compose exec synapse register_new_matrix_user -c /data/homeserver.yaml http://localhost:8008 -a -u tuousername -p tuapassword

Sostituisci tuousername e tuapassword con le tue credenziali!


Configurazione Firewall

Affinché il tuo server Matrix Synapse sia raggiungibile e possa federare correttamente, devi assicurarti che le seguenti porte siano aperte sul firewall del tuo server (es. firewalld su Rocky Linux):

  • Porta 80 (HTTP): Necessaria per il challenge di Let’s Encrypt (per la verifica del dominio) e per il reindirizzamento HTTP a HTTPS.
  • Porta 443 (HTTPS): La porta principale per il traffico web sicuro (client Matrix e federazione).

Per aprire queste porte con firewalld:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Se il tuo server non ha un firewall preinstallato o abilitato, dovresti considerare di installarne uno (firewalld è una buona scelta per Rocky Linux) per la sicurezza generale del sistema.


I Client Matrix: La Libertà della Scelta

Uno dei maggiori vantaggi di Matrix, in linea con la filosofia dei protocolli aperti, è la vasta gamma di client compatibili disponibili. Non sei bloccato a un’unica applicazione proprietaria; puoi scegliere il client che meglio si adatta alle tue esigenze e preferenze.

Alcuni dei client più popolari includono:

  • Element: Il client di riferimento, disponibile per web, desktop (Windows, macOS, Linux) e mobile (Android, iOS). Offre un’esperienza completa con chat, chiamate vocali/video e tutte le funzionalità di Matrix.
  • SchildiChat: Una fork di Element con miglioramenti all’interfaccia utente e alcune funzionalità aggiuntive.
  • FluffyChat: Un client moderno e user-friendly, particolarmente apprezzato per la sua interfaccia pulita su mobile.
  • Cinny: Un client web leggero e veloce, ideale per chi cerca semplicità e prestazioni.
  • Nheko: Un client desktop (Qt) che offre un’esperienza nativa e focalizzata sulle performance.

Questa varietà non solo ti offre flessibilità, ma promuove anche l’innovazione e la resilienza dell’ecosistema Matrix. Ogni sviluppatore può contribuire con nuove idee e implementazioni, arricchendo l’esperienza utente complessiva e garantendo che il protocollo rimanga vibrante e in continua evoluzione, proprio come dovrebbe essere una rete veramente aperta e decentralizzata.


Conclusione: Il tuo viaggio nell’automazione è appena iniziato!

Congratulazioni! Hai configurato il tuo server Matrix Synapse, un passo significativo verso la riappropriazione della tua comunicazione digitale. Hai abbracciato la filosofia della decentralizzazione e dei protocolli aperti che ha reso il web un luogo di innovazione e libertà. Ora puoi connetterti alla rete Matrix con il client che preferisci, invitare i tuoi amici e goderti una comunicazione sicura, privata e, soprattutto, sotto il tuo controllo.