111 lines
3.7 KiB
YAML
111 lines
3.7 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
|
||
# Generierte Auftragsdateien read-only einblenden (gleicher Ordner wie
|
||
# das Backend beschreibt / SFTP-Ziel) – für Direktzugriff statt Kopie.
|
||
# Schreibbar: die Unterschriftenservice-Auftragsanlage schreibt die
|
||
# Seiten-SVGs direkt in den Auftragsordner (sonst nur lesend).
|
||
- /var/skrift-output:/var/skrift-output
|
||
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
|