Zum Inhalt

Architektur

Beispielseite, die zeigt, wie sich die Cloud-Infrastruktur mit Mermaid dokumentieren lässt — angelehnt an den tatsächlichen Aufbau in diesem Repo (DNS, Reverse Proxy, S3-kompatibler Object Storage, Backups). Details zu den einzelnen Stacks stehen weiterhin in docs/ARCHITECTURE.md im Repo-Root.

Überblick

graph TD
    User((Nutzer)) -->|HTTPS| DNS[Hetzner DNS<br/>jxbit.de]
    DNS -->|A/AAAA Record| Traefik[Traefik<br/>Reverse Proxy + TLS]

    subgraph Apps["Anwendungen"]
        Authentik[Authentik<br/>SSO]
        Nextcloud[Nextcloud]
        Duplicati[Duplicati]
        MkDocs[MkDocs]
    end

    Traefik -->|Host-Routing per Label| Authentik
    Traefik --> Nextcloud
    Traefik --> Duplicati
    Traefik --> MkDocs

    Authentik --> AuthDB[(Postgres<br/>authentik-internal)]
    Nextcloud --> NcDB[(Postgres + Redis<br/>nextcloud-internal)]
    Nextcloud -->|Primary Storage| S3[(S3 Object Storage<br/>jxcloud-data)]
    Duplicati -->|verschlüsseltes Backup| S3Backup[(S3 Bucket<br/>Backup-Ziel)]
    Duplicati -->|liest| HostFS[/Host-Verzeichnis<br/>DUPLICATI_SOURCE_DIR/]

Zertifikatsausstellung (DNS-01)

Traefik löst Zertifikate für *.jxbit.de per DNS-01-Challenge über die Hetzner-DNS-API, statt Ports 80/443 des ACME-Providers zu brauchen:

sequenceDiagram
    participant T as Traefik
    participant LE as Let's Encrypt
    participant DNS as Hetzner DNS API

    T->>LE: Zertifikatsanfrage für *.jxbit.de
    LE->>T: DNS-01 Challenge Token
    T->>DNS: TXT-Record _acme-challenge.jxbit.de setzen
    DNS-->>LE: TXT-Record ist propagiert
    LE->>DNS: TXT-Record prüfen
    LE-->>T: Zertifikat ausgestellt
    T->>DNS: TXT-Record wieder entfernen

Nextcloud: Storage- und Backup-Pfad

Zwei getrennte S3-Buckets: einer als primärer Objektspeicher für Nextcloud-Nutzdaten, einer als Backup-Ziel für Duplicati.

graph LR
    NC[Nextcloud App] -->|Primary Object Store| S3[(S3 Bucket<br/>jxcloud-data)]
    NC --> DB[(Postgres)]
    NC --> Redis[(Redis Cache)]
    Dup[Duplicati] -->|verschlüsseltes Backup| S3B[(S3 Bucket<br/>Backup-Ziel)]
    Dup -->|liest| Src[/Host-Verzeichnis<br/>DUPLICATI_SOURCE_DIR/]

Weitere Diagrammtypen (Klassen-, Zustands-, ER-Diagramme, Gantt) siehe Erste Schritte.