Betriebssystem: Debian 12
Ressourcen: (kleiner geht vermutlich auch)
CPU:2 vCore
RAM:2 GB
SSD:60 GB
Benötigte Ports:
Port | Protokoll | Beschreibung | Öffentlich? |
---|---|---|---|
443 | TCP | HTTPS (Matrix-API + Element-Web) | Ja |
80 | TCP | HTTP (nur Weiterleitung) | Optional |
8448 | TCP | Föderation (Matrix-Kommunikation) | Ja (wenn Föderation geplant) |
8008 | TCP | Lokale Synapse HTTP-API | Nein (nur intern) |
sudo apt-get upgrade
sudo apt-get install -y lsb-release wget apt-transport-https certbot python3-certbot-nginx coturn postgresql
sudo wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" |
sudo tee /etc/apt/sources.list.d/matrix-org.list
sudo apt-get update
sudo apt-get install matrix-synapse-py3 libpq5 -y
Domain für Matrix server (nicht element web client falls vorgesehen) eingeben.
su - postgres
createuser --pwprompt synapse_user
2 * passwort ohne sonderzeichen
createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse_user synapse
exit
cd /etc/matrix-synapse/
sudo nano homeserver.yaml
ACHTUNG wir ersetzen folgende sektion:
database:
name: "sqlite3"
args:
database: "/data/homeserver.db"
Mit (strg + k) zum löschen der Zeilen
Das static-auth-secret
in der turnserver.conf
muss dasselbe sein wie das turn_shared_secret
, das du in der YAML-Konfigurationsdatei von Matrix Synapse eingetragen hast.
database:
name: psycopg2
args:
user: synapse_user
password:
database: synapse
host: localhost
cp_min: 5
cp_max: 10
registration_shared_secret: "RANDOM STRING"
turn_uris: [ "turn:matrix.yoururl.com?transport=udp", "turn:matrix.yoururl.com?transport=tcp" ]
turn_shared_secret: "[your secret key here]"
turn_user_lifetime: 86400000
turn_allow_guests: true
Setzte 2 mal deine matrix domain, synapse pw, und random string (den du dir ausdenkst und merkst)
strg + s, strg + x
sudo nano /etc/turnserver.conf
strg + w, suche nach:
use-auth-secret
static-auth-secret=[your secret key here]
realm=matrix.deine_domain.de
entferne das # vor jeder zeile
bei static-auth-secret=north
trage den secret key aus der homserver.yml ein.
Enable prometheus exporter
# If enabled the turnserver will expose an endpoint with stats on a prometheus format
# this endpoint is listening on a different port to not conflict with other configurations.
#
# You can simply run the turnserver and access the port 9641 and path /metrics
#
# For more info on the prometheus exporter and metrics
# https://prometheus.io/docs/introduction/overview/
# https://prometheus.io/docs/concepts/data_model/
#
#prometheus
strg + s, strg + x
certbot certonly --nginx -d matrix.deine_domain.de
sudo nano /etc/nginx/sites-available/default
server {
listen 80;
listen [::]:80;
server_name matrix.deine_domain.de;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name matrix.deine_domain.de;
ssl on;
ssl_certificate /etc/letsencrypt/live/matrix.deine_domain.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/matrix.deine_domain.de/privkey.pem;
location / {
proxy_pass http://localhost:8008;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 8448 ssl default_server;
listen [::]:8448 ssl default_server;
server_name matrix.deine_domain.de;
ssl on;
ssl_certificate /etc/letsencrypt/live/matrix.deine_domain.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/matrix.deine_domain.de/privkey.pem;
location / {
proxy_pass http://localhost:8008;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
port 8448 öffnen
# Redirect HTTP to HTTPS
server {
listen 80;
listen [::]:80;
server_name matrix.deine_domain.de;
return 301 https://$host$request_uri;
}
# HTTPS für Web-Client und Federation
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name matrix.deine_domain.de;
# TLS-Zertifikate
ssl_certificate /etc/letsencrypt/live/matrix.deine_domain.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/matrix.deine_domain.de/privkey.pem;
# Sicherheitsoptimierungen für TLS
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
# HSTS (optional, aber empfohlen)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
proxy_pass http://localhost:8008;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket-Unterstützung
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
# HTTPS für Federation (Port 8448)
server {
listen 8448 ssl http2;
listen [::]:8448 ssl http2;
server_name matrix.deine_domain.de;
# TLS-Zertifikate
ssl_certificate /etc/letsencrypt/live/matrix.deine_domain.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/matrix.deine_domain.de/privkey.pem;
# Sicherheitsoptimierungen für TLS
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
location / {
proxy_pass http://localhost:8008;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket-Unterstützung
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Teste federation unter https://federationtester.matrix.org/
sudo systemctl restart coturn.service nginx matrix-synapse.service
sudo systemctl enable nginx matrix-synapse.service coturn.service
cd /etc/matrix-synapse/
Folgend legen wir den ersten Admin an, ohne das -a am ende wäre ein normaler User. Der Pfad zur Homeserver.yaml muss korrekt sein.
register_new_matrix_user -u USERNAME -p PASS -c /etc/matrix-synapse/homeserver.yaml -a