Ein gehärteter Matrix Synapse Server mit Element Web Client für Community-Betrieb.
| Service | Beschreibung |
|---|---|
| Synapse | Matrix Homeserver |
| PostgreSQL | Datenbank |
| Redis | Caching |
| Element | Web-Client |
| Caddy | Reverse Proxy (extern) |
git clone https://github.com/DEIN_USER/matrix-server.git
cd matrix-servercp .env.example .envBearbeite .env und setze alle Werte:
# Secrets generieren
openssl rand -base64 32 # Für jedes Secret einmal ausführenBenötigte Variablen:
DOMAIN,MATRIX_DOMAIN,ELEMENT_DOMAIN- Deine DomainsPOSTGRES_PASSWORD- Datenbank-PasswortSYNAPSE_*_SECRET- Synapse-SecretsSMTP_HOST,SMTP_PORT,SMTP_USER,SMTP_PASS- E-Mail-Versand
./setup.shDas Script:
- Validiert die
.envKonfiguration - Generiert alle Konfigurationsdateien aus Templates
- Erstellt den Synapse Signing Key
- Setzt die Berechtigungen
sudo cp Caddyfile /etc/caddy/Caddyfile
sudo systemctl reload caddydocker compose up -d./scripts/create-user.sh admin --adminmatrix/
├── docker-compose.yml # Docker-Konfiguration
├── .env.example # Template für Umgebungsvariablen
├── .env # Deine Konfiguration (nicht im Git!)
├── setup.sh # Setup-Script
├── templates/ # Konfigurationsvorlagen
│ ├── homeserver.yaml.template
│ ├── element-config.json.template
│ └── Caddyfile.template
├── scripts/ # Hilfsskripte
│ ├── backup.sh
│ ├── restore.sh
│ └── create-user.sh
├── synapse-data/ # Synapse-Daten (nicht im Git!)
├── postgres-data/ # PostgreSQL-Daten (nicht im Git!)
└── redis-data/ # Redis-Daten (nicht im Git!)
.env- Enthält alle Secrets und Passwörtersynapse-data/- Signing Keys, Datenbank, Medienpostgres-data/- PostgreSQL-Datenredis-data/- Redis-Daten
- Registrierung nur mit Token und E-Mail-Verifizierung
- Starke Passwort-Policy (12+ Zeichen, Sonderzeichen, Zahlen)
- Rate Limiting gegen Brute-Force
- Keine externen Ports (nur über Caddy)
- HTTPS mit Security Headers
Da die öffentliche Registrierung deaktiviert ist, können neue Benutzer nur per Einladungs-Token beitreten.
curl -X POST "https://MATRIX_DOMAIN/_synapse/admin/v1/registration_tokens/new" \
-H "Authorization: Bearer <ADMIN_ACCESS_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"uses_allowed": 1}'Schicke dem neuen Nutzer:
- Registrierungs-Link:
https://ELEMENT_DOMAIN/#/register?registrationToken=DEIN_TOKEN - Der Nutzer muss seine E-Mail-Adresse verifizieren
# Cronjob einrichten (täglich 3:00 Uhr)
echo "0 3 * * * $(pwd)/scripts/backup.sh" | sudo crontab -./scripts/backup.sh./scripts/restore.sh /opt/matrix-backups/matrix-backup-DATUM.tar.gzdocker compose pull
docker compose up -ddocker compose logs -f synapsedocker compose ps# Normaler Benutzer
./scripts/create-user.sh username
# Admin
./scripts/create-user.sh admin --adminMIT