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 impostaenable_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.