Directus (Postgres, hinter NPM) wird die zentrale Datenquelle für Kunden, Aufträge, Produkte, Preise und Gutscheine; das skrift-backend bleibt reine Generierungs-Engine. - Docker/directus: docker-compose (Directus 11 + Postgres), Bootstrap-Skript legt Collections, Rollen/Policies/Rechte und Seed idempotent an. - Extension skrift-auth: passwortloser Login per E-Mail-Code (Codes nur als Hash, Ablauf, Versuchslimit) sowie Kontoanlage aus dem Checkout. - Extension skrift-orders: kontrollierter Bestell-Endpunkt für Gäste und eingeloggte Kunden; Preis wird immer serverseitig berechnet (editierbare Formel via sicherem Interpreter, Werte aus price_items). - skrift-backend: neuer Endpunkt /api/order/from-directus erzeugt SVGs aus einem Directus-Auftrag und schreibt Status + artifact_path zurück. Dafür wurde die Kernlogik aus generateOrder als runGeneration herausgelöst (Verhalten unverändert); generateOrder ist jetzt ein HTTP-Wrapper. - compose: NPM-Netz ergänzt, API_TOKEN/DIRECTUS_* werden durchgereicht. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
47 lines
1.3 KiB
YAML
47 lines
1.3 KiB
YAML
version: '3.8'
|
||
|
||
services:
|
||
skrift-backend:
|
||
build: .
|
||
container_name: skrift-backend
|
||
restart: unless-stopped
|
||
ports:
|
||
- "4000:4000"
|
||
environment:
|
||
- NODE_ENV=${NODE_ENV:-production}
|
||
- PORT=4000
|
||
- SCRIPTALIZER_LICENSE_KEY=${SCRIPTALIZER_LICENSE_KEY}
|
||
- SCRIPTALIZER_ERR_FREQUENCY=${SCRIPTALIZER_ERR_FREQUENCY:-10}
|
||
- BATCH_SIZE=${BATCH_SIZE:-30}
|
||
- CACHE_LIFETIME_HOURS=${CACHE_LIFETIME_HOURS:-2}
|
||
- RATE_LIMIT_PER_MINUTE=${RATE_LIMIT_PER_MINUTE:-2}
|
||
- API_TOKEN=${API_TOKEN}
|
||
- DIRECTUS_URL=${DIRECTUS_URL}
|
||
- DIRECTUS_TOKEN=${DIRECTUS_TOKEN}
|
||
volumes:
|
||
- ./fonts:/app/fonts:ro # SVG Fonts (read-only)
|
||
- skrift-cache:/app/cache # Preview cache (temporary)
|
||
- /var/skrift-output:/app/output # Output files for N8N
|
||
networks:
|
||
- skrift-network
|
||
- npm
|
||
healthcheck:
|
||
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:4000/health"]
|
||
interval: 30s
|
||
timeout: 3s
|
||
retries: 3
|
||
start_period: 5s
|
||
|
||
volumes:
|
||
skrift-cache:
|
||
driver: local
|
||
|
||
networks:
|
||
skrift-network:
|
||
driver: bridge
|
||
# Netz des Nginx Proxy Managers – damit NPM den Container per
|
||
# container_name (skrift-backend:4000) erreichen kann.
|
||
npm:
|
||
name: nginx-proxy-manager_default
|
||
external: true
|