Synapse Matrix Server
Matrix Synapse Server Setup
Installations- und Konfigurationshandbuch
1. Voraussetzungen
[Bearbeiten | Quelltext bearbeiten]• Docker und Docker Compose auf dem vServer
• Plesk mit Nginx als Webserver
• Domain mx.nanotec.org mit SSL-Zertifikat (Let's Encrypt via Plesk)
• Postfix/Exim als Mailserver auf dem Host
2. Docker Compose Konfiguration
[Bearbeiten | Quelltext bearbeiten]Datei: /opt/dockers/synapse/docker-compose.yml
2.1 Services
[Bearbeiten | Quelltext bearbeiten]• postgres – PostgreSQL 16 Alpine als Datenbankbackend
• synapse – avhost/docker-matrix Image
2.2 Volume-Mappings
[Bearbeiten | Quelltext bearbeiten]• /opt/dockers/synapse/data → /data
• /opt/dockers/synapse/media_store → /media_store
• /opt/dockers/synapse/pgdata → /var/lib/postgresql/data
2.3 Port-Mappings
[Bearbeiten | Quelltext bearbeiten]• 3478:3478 – TURN/STUN (Coturn)
• 8008:8008 – Client-Server API (intern, Nginx leitet weiter)
Wichtig: Port 8448 wird nicht in Docker gemappt – Nginx übernimmt diesen direkt.
2.4 Extra Host für Mailserver
[Bearbeiten | Quelltext bearbeiten]Damit der Container den Host-Mailserver erreichen kann:
extra_hosts: - "host.docker.internal:host-gateway"
Prüfen ob der Eintrag gesetzt ist:
docker exec synapse cat /etc/hosts
3. Erstkonfiguration (einmalig)
[Bearbeiten | Quelltext bearbeiten]3.1 homeserver.yaml generieren
[Bearbeiten | Quelltext bearbeiten]docker run -it --rm \ -v /opt/dockers/synapse/data:/data \ -e SERVER_NAME=mx.nanotec.org \ -e REPORT_STATS=no \ avhost/docker-matrix:latest generate
3.2 Datenbank-Konfiguration
[Bearbeiten | Quelltext bearbeiten]In homeserver.yaml den SQLite-Block ersetzen:
database: name: psycopg2 args: user: synapse password: PASSWORT database: synapse host: postgres cp_min: 5 cp_max: 10
3.3 Listener-Konfiguration
[Bearbeiten | Quelltext bearbeiten]listeners: - port: 8008 tls: false type: http x_forwarded: true bind_addresses: ['0.0.0.0'] resources: - names: [client, federation] compress: false
4. E-Mail-Konfiguration
[Bearbeiten | Quelltext bearbeiten]Synapse kommuniziert intern mit dem Host-Mailserver auf Port 25 ohne TLS und ohne Authentifizierung.
4.1 homeserver.yaml – E-Mail-Block
[Bearbeiten | Quelltext bearbeiten]email: smtp_host: "host.docker.internal" smtp_port: 25 require_transport_security: false notif_from: "robot@nanotec.org" app_name: "Matrix" enable_notifs: true notif_for_new_users: true validation_token_lifetime: 1h
4.2 Postfix – Docker-Subnetz freigeben
[Bearbeiten | Quelltext bearbeiten]In /etc/postfix/main.cf das Docker-Subnetz ergänzen:
mynetworks = 127.0.0.0/8 172.16.0.0/12
Danach:
systemctl reload postfix
5. Nginx Federation-Konfiguration (Port 8448)
[Bearbeiten | Quelltext bearbeiten]Federation erfordert Port 8448 von außen über HTTPS. Nginx übernimmt TLS-Terminierung und leitet intern auf Port 8008 weiter.
5.1 Speicherort
[Bearbeiten | Quelltext bearbeiten]/etc/nginx/plesk.conf.d/vhosts/matrix-federation.conf
Hinweis: Nur Dateien in /etc/nginx/plesk.conf.d/vhosts/ werden von Plesk automatisch eingebunden.
5.2 Inhalt der Konfigurationsdatei
[Bearbeiten | Quelltext bearbeiten]server { listen 8448 ssl; listen [::]:8448 ssl; server_name mx.nanotec.org; ssl_certificate /opt/psa/var/certificates/scf4nSFAB; ssl_certificate_key /opt/psa/var/certificates/scf4nSFAB; location / { proxy_pass http://127.0.0.1:8008; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; client_max_body_size 50M; proxy_http_version 1.1; } }
Zertifikatspfad ermitteln:
grep ssl_certificate /etc/nginx/plesk.conf.d/vhosts/mx.nanotec.org.conf
5.3 Nginx testen und neu laden
[Bearbeiten | Quelltext bearbeiten]nginx -t && systemctl reload nginx
5.4 Lauscht Nginx auf 8448?
[Bearbeiten | Quelltext bearbeiten]ss -tlnp | grep 8448
Erwartet: nginx als Prozess (nicht docker-proxy)
6. Federation testen
[Bearbeiten | Quelltext bearbeiten]Online-Tester:
https://federationtester.matrix.org/#mx.nanotec.org
Direkter API-Test:
curl -v https://mx.nanotec.org:8448/_matrix/key/v2/server
7. Wartung & Hinweise
[Bearbeiten | Quelltext bearbeiten]7.1 Zertifikat-Erneuerung
[Bearbeiten | Quelltext bearbeiten]Plesk erneuert Let's Encrypt Zertifikate automatisch. Der Pfad in /opt/psa/var/certificates/ kann sich dabei ändern. Nach jeder Erneuerung Federation-Tester prüfen und ggf. matrix-federation.conf aktualisieren.
7.2 Offene Registrierung deaktivieren
[Bearbeiten | Quelltext bearbeiten]enable_registration: false
7.3 Backup – diese Verzeichnisse sichern
[Bearbeiten | Quelltext bearbeiten]• /opt/dockers/synapse/data – Konfiguration & Signing Keys
• /opt/dockers/synapse/media_store – Mediendateien
• /opt/dockers/synapse/pgdata – PostgreSQL Datenbank
• /etc/nginx/plesk.conf.d/vhosts/matrix-federation.conf
7.4 Nützliche Container-Befehle
[Bearbeiten | Quelltext bearbeiten]• Neustart (kein Datenverlust): docker restart synapse
• Neu erstellen: docker compose up -d --force-recreate synapse
• Logs: docker logs -f synapse
• Extra-Hosts prüfen: docker inspect synapse | grep -A5 ExtraHosts
• Hosts im Container: docker exec synapse cat /etc/hosts