Files
skrift-programme/Docker/directus/docker-compose.yml
Lucas Orth 2dbbc4611a 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>
2026-07-20 19:13:35 +02:00

86 lines
2.3 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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