zurück zur Dokumentation

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:

Service Standard-Port Beschreibung
postgres 5438 PostgreSQL 18 — initialisiert das Auth-Schema beim ersten Start automatisch
auth 5002 Auth-API — JWT, Anwenderverwaltung, E-Mail-Versand
api 5001 Haupt-Mandanten-API — RPC, Aktionen, Berichte
app 5179 SvelteKit-Frontend (Dev- oder Produktiv-Build)
seq 5341 Seq-Log-Viewer (Oberfläche für strukturierte Logs)

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).

Variable Beschreibung Default
POSTGRES_USER PostgreSQL-Benutzer dforge
POSTGRES_PASSWORD PostgreSQL-Passwort dforge
POSTGRES_PORT PostgreSQL-Host-Port 5438
POSTGRES_DB PostgreSQL-Admin-Datenbank dforge
JWT_SECRET JWT-Signing-Geheimnis (muss mindestens 32 Zeichen lang sein) (Pflicht)
JWT_ISSUER JWT-Issuer-URL https://auth.dforge.app
JWT_AUDIENCE JWT-Audience-URL https://dforge.app
EMAIL_PROVIDER E-Mail-Backend (resend, log) resend
EMAIL_FROM_ADDRESS Absender-Adresse noreply@dforge.app
EMAIL_RESEND_API_KEY Resend-API-Key (in .env.local setzen)
APP_PORT Frontend-Port 5179
SEQ_URI Seq-Log-Viewer-URL http://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.