Directus als Daten-/Auth-Schicht + Backend-Anbindung
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>
This commit is contained in:
85
Docker/directus/docker-compose.yml
Normal file
85
Docker/directus/docker-compose.yml
Normal file
@@ -0,0 +1,85 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user