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>
86 lines
2.3 KiB
YAML
86 lines
2.3 KiB
YAML
# Directus + Postgres — Daten-/Auth-/Admin-Schicht für Skrift.
|
||
#
|
||
# Hinter dem Nginx Proxy Manager (kein Host-Port; NPM proxyt intern per container_name).
|
||
# Im NPM als Proxy Host anlegen:
|
||
# Domain Names : admin.skrift.de (PUBLIC_URL in .env muss dazu passen)
|
||
# Scheme : http
|
||
# Forward Hostname : skrift-directus
|
||
# Forward Port : 8055
|
||
# SSL : Let's-Encrypt-Zertifikat aktivieren
|
||
#
|
||
# Start: cp .env.example .env → Werte setzen → docker compose up -d
|
||
|
||
services:
|
||
database:
|
||
image: postgres:16-alpine
|
||
container_name: skrift-directus-db
|
||
restart: unless-stopped
|
||
volumes:
|
||
- directus-db:/var/lib/postgresql/data
|
||
environment:
|
||
POSTGRES_USER: ${DB_USER}
|
||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||
POSTGRES_DB: ${DB_DATABASE}
|
||
healthcheck:
|
||
test: ["CMD", "pg_isready", "-U", "${DB_USER}", "-d", "${DB_DATABASE}"]
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 5
|
||
networks:
|
||
- internal
|
||
|
||
directus:
|
||
image: directus/directus:11
|
||
container_name: skrift-directus
|
||
restart: unless-stopped
|
||
depends_on:
|
||
database:
|
||
condition: service_healthy
|
||
volumes:
|
||
- directus-uploads:/directus/uploads
|
||
# Bind-Mount: Extensions kommen aus dem Repo-Ordner ./extensions
|
||
- ./extensions:/directus/extensions
|
||
environment:
|
||
SECRET: ${DIRECTUS_SECRET}
|
||
|
||
DB_CLIENT: pg
|
||
DB_HOST: database
|
||
DB_PORT: 5432
|
||
DB_DATABASE: ${DB_DATABASE}
|
||
DB_USER: ${DB_USER}
|
||
DB_PASSWORD: ${DB_PASSWORD}
|
||
|
||
# Erster Admin – wird nur beim allerersten Start angelegt
|
||
ADMIN_EMAIL: ${ADMIN_EMAIL}
|
||
ADMIN_PASSWORD: ${ADMIN_PASSWORD}
|
||
|
||
PUBLIC_URL: ${PUBLIC_URL}
|
||
|
||
# CORS für das Frontend (Portal/Konfigurator)
|
||
CORS_ENABLED: "true"
|
||
CORS_ORIGIN: ${CORS_ORIGIN}
|
||
|
||
# E-Mail: für passwortlosen Login-Code + Benachrichtigungen (Flows)
|
||
EMAIL_FROM: ${EMAIL_FROM}
|
||
EMAIL_TRANSPORT: smtp
|
||
EMAIL_SMTP_HOST: ${EMAIL_SMTP_HOST}
|
||
EMAIL_SMTP_PORT: ${EMAIL_SMTP_PORT}
|
||
EMAIL_SMTP_USER: ${EMAIL_SMTP_USER}
|
||
EMAIL_SMTP_PASSWORD: ${EMAIL_SMTP_PASSWORD}
|
||
EMAIL_SMTP_SECURE: ${EMAIL_SMTP_SECURE}
|
||
expose:
|
||
- "8055"
|
||
networks:
|
||
- internal
|
||
- npm
|
||
|
||
volumes:
|
||
directus-db:
|
||
directus-uploads:
|
||
|
||
networks:
|
||
internal:
|
||
npm:
|
||
name: nginx-proxy-manager_default
|
||
external: true
|