42 lines
1.5 KiB
YAML
42 lines
1.5 KiB
YAML
# 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
|