Matrix auf einem eigenen Cloud Server mit FreeBSD betreiben

Im folgenden schauen wir uns ein mögliches Setup auf einem eigenen Server bei einem Hoster eurer Wahl an.

  • Für dieses Setup nutzen wir FreeBSD als Basissystem um die Dienste auf dem Server per Jail voneinander zu trennen. Wir installieren hier exemplarisch alle benötigten Dienste in seperate Jails (Synapse, Element-web, NGINX und PostgreSQL).
  • NGINX nochmal seperat als Reverse Proxy vor den internen Diensten. Der Reverse Proxy nimmt die HTTPS Anfragen entgegen, um diese dann an die internen Jail weiter zu leiten. Das vereinfacht insbesondere den Aufbau im Jails enorm.
  • Acme.sh holt Zertifikate auf dem Reverse Proxy bei Let's Encrypt ab.

Als Jail Verwaltung bietet sich unter FreeBSD BastilleBSD an, was hier als Grundlage dient.

Zusammengefasst sind folgende Schritte nötig, um das Ziel dieser Anleitung zu erreichen:

Fehler oder Verbesserungsvorschläge bitte hier hin.

Zeitaufwand: ca 60 Minuten.
Letzte Aktualisierung:

  • 20.11.2022: Initiales Dokument.

Voraussetzungen für dieses Tutorial

  • FreeBSD Server
  • Eigenes Webhosting
    • Zugriff auf die DNS Verwaltung der Domain.
    • Zugriff auf die Datei Verwaltung der Domain (z.B. per FTP oder SSH).
    • die eigene Domain die bereits per htttps erreichbar ist (z.B. https://DOMAIN.DE).
    • eine neue Subdomain mit fester IP-Adresse als A Record oder alternativ ein Hostname im CNAME im DNS hinterlegen (z.B. MATRIX.DOMAIN.DE).
    • das Anlegen von zwei Ordnerns und Dateien auf der Domain mit den Inhalten:
      • "https://DOMAIN.DE/.well-known/matrix/server = {"m.server": "MATRIX.DOMAIN.DE:8448"}';
      • "https://DOMAIN.DE/.well-known/matrix/client" = {"m.homeserver":{"base_url": "https://MATRIX.DOMAIN.DE"}}';

Begrifflichkeiten

  • USERNAME = SSH Benutzeraccount (root Login ist nicht direkt möglich) mit SU Rechten
  • MATRIXIP = IP Adresse des lokalen Vaultwarden Servers
  • MATRIXHOSTNAME = Hostname es des Matrix Servers (z.B. MATRIX.DOMAIN.DE)
  • MATRIXDOMAIN = Domain Name des des Matrix Servers (z.B. DOMAIN.DE)
  • ACCOUNTNAME = Name des Let's Encrypt Accounts
  • EMAILADRRESSE = Email Adresse des Let's Encrypt Accounts
  • DATENBANKNAME = Name der Datenbank im PostgreSQL Server
  • DATENBANKBENUTZER = Name des Vaultwarden Benutzers im PostgreSQL Server
  • DATENBANKKENNWORT = Kennwort des Vaultwarden Benutzers im PostgreSQL Server

Diagramm

Damit sieht das Setup so aus:

                   ┌─────────────────────┐                             ┌─────────────────────┐
                   │ core       10.0.0.1 │                             │ proxy      10.0.0.12│
                   │  bastille           │                             │ nginx:8448          │
                   │  ssh:22             │                             │ nginx:443           │
WAN: 0.0.0.0 ──────┼► pf:80:443:8448     ├────── matrix.domain.de ─────┼► acme-client:80     │
                   └─────────────────────┘                             └──────────┬──────────┘
                                                                                  │
                                                                       ┌──────────▼──────────┐
                                                                       │ web        10.0.0.14│
                                                                       │ nginx:8448          │
                                                                       │ nginx:443           │
                                                                       └──────────┬──────────┘
                                                                                  │
                                             ┌─────────────────────┐   ┌──────────▼──────────┐
                                             │ db         10.0.0.11│   │ matrix     10.0.0.13│
                                             │ postgresql:5432   ◄─┼───┤ synapse:8008        │
                                             └─────────────────────┘   └─────────────────────┘