Skip to content
Diese Seite wurde mit KI-Unterstützung erstellt und übersetzt. Falls Ihnen Ungenauigkeiten auffallen, helfen Sie gerne bei der Verbesserung. Auf GitHub bearbeiten

Produktionsbereitstellung ​

Dieser Leitfaden behandelt die Bereitstellung von OpenPR in einer Produktionsumgebung mit HTTPS, einem Reverse-Proxy, Datenbankhärtung und Sicherheits-Best-Practices.

Architektur ​

mermaid
graph LR
    INTERNET["Internet<br/>:443"] --> CADDY["Caddy<br/>Auto HTTPS"]
    CADDY --> FE["Frontend<br/>Nginx :3000"]
    FE --> API["API :8080"]
    FE --> MCP["MCP :8090"]
    API --> PG["PostgreSQL :5432"]
    WORKER["Worker"] --> PG

Voraussetzungen ​

  • Ein Server mit mindestens 2 CPU-Kernen und 2 GB RAM
  • Ein Domainname, der auf die IP-Adresse Ihres Servers zeigt
  • Docker und Docker Compose (oder Podman)

Schritt 1: Umgebung konfigurieren ​

Eine Produktions-.env-Datei erstellen:

bash
# Database (use strong passwords)
DATABASE_URL=postgres://openpr:STRONG_PASSWORD_HERE@postgres:5432/openpr
POSTGRES_DB=openpr
POSTGRES_USER=openpr
POSTGRES_PASSWORD=STRONG_PASSWORD_HERE

# JWT (generate a random secret)
JWT_SECRET=$(openssl rand -hex 32)
JWT_ACCESS_TTL_SECONDS=86400
JWT_REFRESH_TTL_SECONDS=604800

# Logging
RUST_LOG=info

Geheimnisse

Niemals .env-Dateien in die Versionskontrolle einbeziehen. chmod 600 .env verwenden, um die Dateiberechtigungen einzuschränken.

Schritt 2: Caddy einrichten ​

Caddy auf dem Host-System installieren:

bash
sudo apt install -y caddy

Die Caddyfile konfigurieren:

# /etc/caddy/Caddyfile
your-domain.example.com {
    reverse_proxy localhost:3000
}

Caddy erhält und erneuert automatisch Let's Encrypt-TLS-Zertifikate.

Caddy starten:

bash
sudo systemctl enable --now caddy

Alternative: Nginx

Falls Nginx bevorzugt wird, diesen mit einem Proxy-Pass zu Port 3000 konfigurieren und certbot für TLS-Zertifikate verwenden.

Schritt 3: Mit Docker Compose bereitstellen ​

bash
cd /opt/openpr
docker-compose up -d

Überprüfen, ob alle Dienste gesund sind:

bash
docker-compose ps
curl -k https://your-domain.example.com/health

Schritt 4: Admin-Konto erstellen ​

https://your-domain.example.com im Browser öffnen und das Admin-Konto registrieren.

Erster Benutzer

Der erste registrierte Benutzer wird Admin. Das Admin-Konto registrieren, bevor die URL geteilt wird.

Sicherheits-Checkliste ​

Authentifizierung ​

  • [ ] JWT_SECRET auf einen zufälligen Wert mit 32+ Zeichen ändern
  • [ ] Angemessene Token-TTL-Werte setzen (kürzer für Zugriff, länger für Aktualisierung)
  • [ ] Das Admin-Konto sofort nach der Bereitstellung erstellen

Datenbank ​

  • [ ] Ein starkes Passwort für PostgreSQL verwenden
  • [ ] PostgreSQL-Port (5432) nicht ins Internet exponieren
  • [ ] PostgreSQL-SSL für Verbindungen aktivieren (wenn die Datenbank remote ist)
  • [ ] Regelmäßige Datenbank-Backups einrichten

Netzwerk ​

  • [ ] Caddy oder Nginx mit HTTPS (TLS 1.3) verwenden
  • [ ] Nur Port 443 (HTTPS) und optional 8090 (MCP) ins Internet exponieren
  • [ ] Eine Firewall (ufw, iptables) verwenden, um den Zugriff einzuschränken
  • [ ] MCP-Server-Zugriff auf bekannte IP-Bereiche beschränken

Anwendung ​

  • [ ] RUST_LOG=info setzen (kein debug oder trace in der Produktion)
  • [ ] Festplattennutzung für das Uploads-Verzeichnis überwachen
  • [ ] Protokollrotation für Container-Protokolle einrichten

Datenbank-Backups ​

Automatisierte PostgreSQL-Backups einrichten:

bash
#!/bin/bash
# /opt/openpr/backup.sh
BACKUP_DIR="/opt/openpr/backups"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"

docker exec openpr-postgres pg_dump -U openpr openpr | gzip > "$BACKUP_DIR/openpr_$DATE.sql.gz"

# Keep only last 30 days
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +30 -delete

Zu cron hinzufügen:

bash
# Daily backup at 2 AM
0 2 * * * /opt/openpr/backup.sh

Überwachung ​

Integritätsprüfungen ​

Dienst-Integritäts-Endpunkte überwachen:

bash
# API
curl -f http://localhost:8080/health

# MCP-Server
curl -f http://localhost:8090/health

Protokollüberwachung ​

bash
# Alle Protokolle verfolgen
docker-compose logs -f

# Bestimmten Dienst verfolgen
docker-compose logs -f api --tail=100

Skalierungsüberlegungen ​

  • API-Server: Kann mehrere Replikas hinter einem Load Balancer betreiben. Alle Instanzen verbinden sich mit derselben PostgreSQL-Datenbank.
  • Worker: Eine einzelne Instanz betreiben, um doppelte Job-Verarbeitung zu vermeiden.
  • MCP-Server: Kann mehrere Replikas betreiben. Jede Instanz ist zustandslos.
  • PostgreSQL: Für hohe Verfügbarkeit PostgreSQL-Replikation oder einen verwalteten Datenbankdienst in Betracht ziehen.

Aktualisieren ​

Um OpenPR zu aktualisieren:

bash
cd /opt/openpr
git pull origin main
docker-compose down
docker-compose up -d --build

Datenbankmigrationen werden beim Start des API-Servers automatisch angewendet.

Nächste Schritte ​

Released under the Apache-2.0 License.