Import aus Monorepo (frischer Start)
All checks were successful
Build & Deploy / deploy (push) Successful in 10s

This commit is contained in:
Lucas Orth
2026-08-24 12:13:50 +02:00
commit 0ddaab27d0
34 changed files with 12768 additions and 0 deletions

41
docker-compose.yml Normal file
View File

@@ -0,0 +1,41 @@
# Auto-Deploy per Tag-Push – siehe DEPLOY.md. Fester Projekt-/Container-Name,
# Image mit Versionstag (Rollback ohne Rebuild), kein Port-Mapping (NPM proxyt
# intern über den Container-Namen).
name: skrift-backend
services:
app:
image: skrift-backend:${IMAGE_TAG:-latest}
build: .
container_name: skrift-backend
restart: unless-stopped
# Betriebs-Defaults inline; Secrets/Config kommen aus .env (Secret DOTENV).
environment:
- NODE_ENV=production
- PORT=4000
env_file: .env
volumes:
# Fonts sind ins Image gebacken (COPY im Dockerfile) – kein Bind nötig.
- skrift-backend-cache:/app/cache
# Gemeinsamer Ausgabe-/SFTP-Ordner: ABSOLUTER Host-Pfad, bewusst KEIN named
# volume – Directus liest ihn (ro) und er ist das SFTP-Ziel der Produktion.
- /var/skrift-output:/app/output
networks:
- nginx-proxy-manager_default
# Gate für `--wait`. /health liefert 503, wenn Scriptalizer-Key fehlt oder
# der Output-Ordner nicht schreibbar ist – dann bricht der Deploy bewusst ab.
healthcheck:
test: ["CMD", "node", "-e", "require('http').get('http://127.0.0.1:4000/health',r=>process.exit(r.statusCode===200?0:1)).on('error',()=>process.exit(1))"]
interval: 60s
timeout: 5s
retries: 3
networks:
nginx-proxy-manager_default:
external: true
volumes:
# Vorschau-Cache (regenerierbar) mit festem Namen, damit er nicht am
# Projektnamen hängt.
skrift-backend-cache:
name: skrift-backend-cache