Bereitstellung & HTTPS
Bereitstellung & HTTPS
PgArachne ist darauf ausgelegt, eine Aufgabe gut zu erfüllen: API Gateway. Für SSL/TLS (HTTPS), Header-Sicherheit und öffentliches Routing sollten Sie einen Reverse Proxy davor platzieren.
Option A: Caddy Server
Am besten für: Moderne Produktionsbereitstellungen, Benutzerfreundlichkeit.
Caddy ist der einzige Webserver, der standardmäßig automatisch SSL-Zertifikate (Let’s Encrypt) bezieht und erneuert. Er erfordert fast keine Konfiguration.
# Caddyfile
example.com {
reverse_proxy localhost:8080
}Option B: Nginx
Am besten für: Unternehmensumgebungen, komplexes Routing.
Nginx ist der Industriestandard für hochleistungsfähiges Load Balancing. Verwenden Sie dies, wenn Sie bereits eine Nginx-Infrastruktur haben. Sie müssen Certbot manuell verwalten.
server {
server_name example.com;
location / {
proxy_pass http://localhost:8080;
}
}Option C: Ngrok
Am besten für: Lokale Entwicklung, Demos, Webhook-Tests.
Ngrok erstellt einen sicheren Tunnel vom öffentlichen Internet direkt zu Ihrem Laptop, ohne Firewalls zu konfigurieren. Ideal, um Kollegen Ihre Arbeit sofort zu zeigen.
./ngrok http 8080Produktions-Checkliste
- TLS am Reverse Proxy terminieren und
X-Forwarded-ProtosowieX-Forwarded-Forweiterreichen. - In PgArachne
TRUSTED_PROXIESauf die Proxy-IP/CIDR-Bereiche setzen. - Für SSE-Routen Buffering deaktivieren und ausreichend lange Read-Timeouts setzen.
- Metriken nur intern exponieren (Standard
127.0.0.1:9090) und aus dem Monitoring-Netz scrapen.
Nginx-Hardening-Beispiel (SSE, Datei-Downloads, Forwarded Header)
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# SSE: /{API_PREFIX}/{database}/sse — long-lived stream, must not be buffered
location ~ ^/db/[^/]+/sse$ {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
proxy_read_timeout 1h;
}
# File downloads: /{API_PREFIX}/{database}/file — large files and ZIP archives
location ~ ^/db/[^/]+/file/?$ {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
proxy_read_timeout 300s;
}Ersetzen Sie db durch Ihren API_PREFIX, falls Sie ihn geändert haben.
Große Downloads (/file) hinter einem Reverse Proxy
- Response-Buffering deaktivieren (
proxy_buffering offin Nginx). Eine einzelne Datei wird mitContent-Lengthgesendet, ein ZIP-Archiv ohne. Bei aktiviertem Buffering legt Nginx zuerst die gesamte Antwort in einer temporären Datei ab, was den Beginn des Downloads verzögert und Speicherplatz kostet. - Read-Timeout erhöhen (
proxy_read_timeout, Standard 60 s), wenn die Datenbankfunktion, die die Dateien erzeugt, länger laufen kann — PgArachne sendet nichts, bis die Funktion alle Zeilen zurückgegeben hat. - Nicht komprimieren:
application/zipund andere bereits komprimierte Medientypen (gzipauf einem ZIP verbraucht nur CPU). - Speicherlimit: PgArachne hält die Zeilen einer Antwort im Speicher (begrenzt durch
FILE_MAX_BYTES, Standard 64 MiB, undFILE_MAX_ENTRIES); dimensionieren Sie die Limits passend zur erwarteten Zahl gleichzeitiger Downloads.client_max_body_sizebetrifft nur die kleine JSON-Anfrage, nicht den Download. - Caddy streamt Antworten standardmäßig; keine zusätzliche Konfiguration nötig.