zurück zur Dokumentation
[advanced] self-hosted docker deployment infrastructure

Self-Hosted-Setup

dForge mit Docker auf Ihrer eigenen Infrastruktur ausrollen. Konfiguration, Datenbank-Setup und Produktiv-Checkliste.

veröffentlicht · aktualisiert

Überblick

dForge kann auf jeder Infrastruktur selbst gehostet werden, die Docker unterstützt. Ein Standard-Deployment umfasst:

ServiceStandard-PortBeschreibung
postgres5438PostgreSQL 18 — initialisiert das Auth-Schema beim ersten Start automatisch
auth5002Auth-API — JWT, Anwenderverwaltung, E-Mail-Versand
api5001Haupt-Mandanten-API — RPC, Aktionen, Berichte
app5179SvelteKit-Frontend (Dev- oder Produktiv-Build)
seq5341Seq-Log-Viewer (Oberfläche für strukturierte Logs)
cliCLI-Tool (On-Demand-Container)

Voraussetzungen

  • Docker und Docker Compose
  • PostgreSQL 18+ (oder das mitgelieferte Docker-Image verwenden)
  • Mindestens 2 GB RAM (4 GB empfohlen)
  • 10 GB Speicherplatz (variiert mit dem Datenvolumen)

Schnellstart mit Docker Compose

git clone <repo-url> && cd dForge-core/docker

# Alles starten
docker compose up -d

# Einen Mandanten mit Beispiel-Modulen anlegen
./setup-tenant.sh mycompany "My Company" admin@mycompany.com

Öffnen Sie http://localhost:5179 und melden Sie sich an.

setup-tenant.sh akzeptiert ein optionales --erp-Flag, um den vollständigen ERP-Stack statt des Standard-CRM-+-HR-Beispiels zu installieren.

Konfiguration

Umgebungsvariablen

Die gesamte Konfiguration lebt in docker/.env (committete Defaults) und docker/.env.local (gitignored, für Geheimnisse).

VariableBeschreibungDefault
POSTGRES_USERPostgreSQL-Benutzerdforge
POSTGRES_PASSWORDPostgreSQL-Passwortdforge
POSTGRES_PORTPostgreSQL-Host-Port5438
POSTGRES_DBPostgreSQL-Admin-Datenbankdforge
JWT_SECRETJWT-Signing-Geheimnis (muss mindestens 32 Zeichen lang sein)(Pflicht)
JWT_ISSUERJWT-Issuer-URLhttps://auth.dforge.app
JWT_AUDIENCEJWT-Audience-URLhttps://dforge.app
EMAIL_PROVIDERE-Mail-Backend (resend, log)resend
EMAIL_FROM_ADDRESSAbsender-Adressenoreply@dforge.app
EMAIL_RESEND_API_KEYResend-API-Key (in .env.local setzen)
APP_PORTFrontend-Port5179
SEQ_URISeq-Log-Viewer-URLhttp://seq:80

Datenbank-Setup

dForge verwendet zwei Arten von Datenbanken:

  1. Auth-Datenbank — speichert Anwender, Mandanten, Sessions. Wird einmal angelegt.
  2. Mandanten-Datenbanken — eine pro Mandant. Werden automatisch angelegt, wenn Sie einen Mandanten bereitstellen. Benannt dforge_{tenant_code}.

Jede Mandanten-Datenbank hat:

  • dforge-Schema — Metadaten-Tabellen (Entitäten, Ansichten, Sicherheit)
  • Modul-Schemas (z. B. crm, hr, fin) — Geschäfts-Datentabellen
  • Einen dedizierten Datenbank-Benutzer (tenant_{tenant_code}) mit Zugriff, der auf seine eigene Datenbank beschränkt ist

Mandantenverwaltung

Der cli.sh-Helfer wickelt den CLI-Container ein, sodass Sie nicht jedes Mal docker compose run tippen müssen. Aus dem docker/-Verzeichnis ausführen.

Einen Mandanten anlegen

./cli.sh tenant create --code acme --name "Acme Corp"

Das legt die Mandanten-Datenbank (dforge_acme), einen dedizierten Datenbank-Benutzer (tenant_acme) an und initialisiert das Metadaten-Schema.

Mandanten auflisten

./cli.sh tenant list

Module installieren

./cli.sh module install --code acme --path /modules/crm
./cli.sh module install --code acme --path /modules/hr
./cli.sh module install --code acme --path /modules/fin

# Neu installieren, um Änderungen zu übernehmen
./cli.sh module install --code acme --path /modules/crm --force

# Installierte Module auflisten
./cli.sh module list --code acme

Module werden in den CLI-Container unter /modules/ gemountet.

Alles zurücksetzen

./reset.sh    # Löscht alle Daten und beginnt von vorn

Produktiv-Checkliste

Sicherheit

  • Starkes, einzigartiges JWT_SECRET generieren
  • Starkes DB_ADMIN_PASSWORD setzen
  • SSL/TLS für alle Verbindungen aktivieren
  • Firewall-Regeln konfigurieren (nur Ports 443, 5179 freigeben)
  • Regelmäßige Datenbank-Backups einrichten
  • PostgreSQL-Authentifizierungs-Einstellungen prüfen (pg_hba.conf)

Performance

  • Ausreichend RAM für PostgreSQL zuweisen (shared_buffers = 25 % des System-RAM)
  • Connection-Pooling konfigurieren, wenn viele Mandanten betrieben werden
  • Monitoring einrichten (CPU, Speicher, Festplatte, DB-Verbindungen)
  • Log-Rotation konfigurieren

Backups

  • Automatisierte PostgreSQL-Backups planen (pg_dump pro Mandanten-Datenbank)
  • Backup-Wiederherstellungs-Prozedur testen
  • Backups an einem Ort getrennt vom Anwendungs-Server speichern
  • Recovery Time Objective (RTO) dokumentieren

Updates

dForge-Releases werden als Docker-Images verteilt. Zum Aktualisieren:

docker compose pull
docker compose up -d

Datenbank-Migrationen laufen beim Start automatisch, wenn eine neue Version Schema-Änderungen erfordert.

Monitoring

Logging

dForge gibt strukturierte Logs nach stdout aus und schickt sie an Seq (den mitgelieferten Log-Viewer unter http://localhost:5341). Für externe Aggregation richten Sie einen beliebigen strukturierten Log-Sammler auf die stdout-Ausgaben der API- und Auth-Container, oder setzen Sie SEQ_URI auf Ihre eigene Seq-Instanz.

Health-Checks

  • API: GET /health — gibt 200 zurück, wenn die API läuft
  • Auth: GET /health — gibt 200 zurück, wenn der Auth-Service läuft
  • Datenbank: Überwachen Sie die PostgreSQL-Verbindungs-Anzahl und die Abfrage-Performance

Skalierung

Für Deployments mit hohem Traffic:

  • Horizontal: Mehrere API-Instanzen hinter einem Load Balancer betreiben. Jede Instanz ist zustandslos.
  • Datenbank: Read-Replicas für Berichts-Workloads in Erwägung ziehen. Jede Mandanten-Datenbank kann auf einen separaten PostgreSQL-Server verschoben werden.
  • Caching: Die API verwendet In-Memory-Metadaten-Caching mit automatischer Invalidierung beim Installieren/Deinstallieren von Modulen.
/ war das hilfreich?

Stecken Sie irgendwo fest?
Sagen Sie es uns.

Wir lesen jede Nachricht und aktualisieren die Dokumentation auf Basis dessen, was Leser fragen. Der schnellste Weg, die Dokumentation zu verbessern, ist, uns zu schreiben.