Files
skrift-programme/Docker/directus/docker-compose.yml
Lucas Orth 3cb93d078e Unterschriftenservice, Extern-Modus, Adressmodell, Alt-Mail, Team-Mails
skrift-app (Konfigurator):
- Datei-Produkte (Unterschriftenservice): Mehrfach-Upload (PDF/Word/Excel),
  komplett preisfrei (keine Preisleiste/Aufpreise/Kostenübersicht/Zahlung)
- Extern-/Etsy-Modus (?extern=1&versand&kuvert&beschriftung&menge): vom Betreiber
  vorkonfiguriert, Kunde füllt nur Empfänger/Text/Rechnungsdaten/Übersicht,
  keine Preise/Zahlung; Menge greift immer (auch >25 / ohne Empfänger); eigener
  Danke-Text
- Adressmodell: zwei feste Adressen (Rechnung/Lieferung) ohne Namen statt
  Dropdown; Auto-Vorbefüllung; Lieferadresse nur bei Sammelversand; abweichende
  Lieferadresse per Default aus; Pflichtfelder erzwungen
- Platzhalter-Tabelle immer im Text-Schritt (auch Sammelversand ohne Kuvert) +
  Excel; Tabellen-Eingabe nur bis 25, „Ab 26"-Hinweis entfernt
- Stammdaten: zwei Adressblöcke + Erfolgsmeldung

Directus/Backend:
- Signatur-Endpunkte /signature-preview + /signature-render (Proxy zum
  signature-service, Marker + Konto-Offsets), Modul-Reiter „Unterschriften"
  (aus Auftrag oder manuell), Tabelle über volle Breite
- Generierung läuft bei jeder Bestellung; Kuverts immer (Datei-Produkt: nur
  Kuvert, DIN Lang als Default); source_files am Auftrag
- Produktions-Board: „Dateien"-Button (hochgeladene Originale, keine SVGs)
- Alt-Mail-Login: Zweit-Mails melden im selben Konto an (skrift-auth)
- Team-Mails schlank + konfigurierbar (email_settings.team_email) für
  Bestellung/Muster/Anfrage; keine Bestellbestätigung bei Datei-Produkten,
  separate Vorlagen unterschriften_eingang/extern_eingang
- Rechnungsadresse wird ins Konto übernommen, wenn dort noch keine steht
- Kunden-Policy: directus_files create/read (Upload); Bootstrap: users
  billing_address/shipping_address/alt_emails, orders.source_files/source=extern,
  signatures marker/offsets, unterschriftenservice input_mode=datei/pricing_mode=formel

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-26 14:52:09 +02:00

109 lines
3.6 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
# Generierte Auftragsdateien read-only einblenden (gleicher Ordner wie
# das Backend beschreibt / SFTP-Ziel) – für Direktzugriff statt Kopie.
- /var/skrift-output:/var/skrift-output:ro
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}
# Skrift-Backend (SVG-Generierung: Vorschau + finaler Auftrag).
# SKRIFT_BACKEND_TOKEN MUSS dem API_TOKEN des Backends entsprechen,
# sonst antwortet das Backend mit 401.
SKRIFT_BACKEND_URL: ${SKRIFT_BACKEND_URL:-http://skrift-backend:4000}
SKRIFT_BACKEND_TOKEN: ${SKRIFT_BACKEND_TOKEN}
SKRIFT_PREVIEW_LIMIT: ${SKRIFT_PREVIEW_LIMIT:-10}
SKRIFT_TEAM_EMAIL: ${SKRIFT_TEAM_EMAIL:-hello@skrift.de}
# Shared Secret für den WordPress-Webhook (JetFormBuilder → /skrift-orders/inbound/*).
# Muss identisch als ?token=... in der Webhook-URL stehen.
SKRIFT_WEBHOOK_TOKEN: ${SKRIFT_WEBHOOK_TOKEN}
# Signatur-Plotter-Service (Vorschau/Render im Unterschriftenservice-Modul).
SKRIFT_SIGN_URL: ${SKRIFT_SIGN_URL:-http://skrift-signature-service:8000}
# PayPal – server-seitige Zahlungsprüfung (Secret liegt NUR hier, nie im Frontend)
PAYPAL_CLIENT_ID: ${PAYPAL_CLIENT_ID}
PAYPAL_CLIENT_SECRET: ${PAYPAL_CLIENT_SECRET}
PAYPAL_ENV: ${PAYPAL_ENV:-sandbox}
expose:
- "8055"
networks:
- internal
- npm
volumes:
directus-db:
directus-uploads:
networks:
internal:
npm:
name: nginx-proxy-manager_default
external: true