eptm_dashboard/docker-compose.prod.yml
Julien Balet 7d3b6e9136 v1.1.0 — fixes sync + UX dev/prod
Sync push_then_sync : préserve les absences 'publiee_escada' contre
écrasement/orphelines après push (PDF Escada stale). UI reconnaît le
statut (calendrier, éditeur, KPIs) au lieu d'afficher 'présent'.

Sync_esacada : timeout grille 20s → 45s + retry après reload (AUTOMAT 1
échouait à la 1re classe après changement de langue).

Telegram : ajoute liste d'erreurs + tail du log dans les notifs d'échec
même en mode normal — avant on avait juste 'a échoué (code 1)'.

UX :
- Calendrier toujours visible (même sans absences) et démarre sur le
  mois courant (pas sur le 1er mois d'absence) ; tous les jours
  cliquables pour pouvoir ajouter une absence.
- Date du jour pré-sélectionnée aussi via navigate_to (clic depuis
  /classe).
- KPIs cards taggées kpi-card/kpi-value pour CSS responsive mobile.
- Badge 'DEV' dans la sidebar (APP_ENV=dev) — invisible en prod.
- Badge 'Built with Reflex' masqué.
- KPIs retirés du dashboard /accueil.

Prod :
- Dockerfile.prod multi-stage (Reflex export bundle + runtime slim).
- docker-compose.prod.yml séparé (port 3002, projet eptm-dashboard-prod).
- .gitignore + .dockerignore nettoyés.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 09:11:39 +02:00

45 lines
1.5 KiB
YAML

# Stack PROD — EPTM Dashboard.
#
# Cohabite avec docker-compose.dev.yml :
# - Port interne 3002 (frontend + backend même port en prod Reflex) ;
# dev : 3001 frontend Vite + 8001 backend granian, séparés.
# - Volumes runtime distincts : ./data_prod et ./logs-prod
# - Image immuable buildée depuis Dockerfile.prod (pas de mount code)
# - NPM (proxy_net) dispatche dashboard.eptm-automation.ch → app:3002
# Nom de projet distinct du dev pour éviter que les deux compose se
# marchent dessus (sinon Compose recrée le container dev quand on lance prod).
name: eptm-dashboard-prod
services:
app:
build:
context: .
dockerfile: Dockerfile.prod
image: eptm-dashboard-prod:latest
container_name: eptm-dashboard-prod-app-1
init: true
restart: unless-stopped
# Pas de port exposé sur le host : accès uniquement via NPM (proxy_net).
volumes:
# Runtime isolé de dev — DB, settings, auth, logs, etc.
- ./data_prod:/app/data
- ./logs-prod:/logs
env_file:
- .env.prod
environment:
# Frontend et backend sur le même port en prod (exigence Reflex 0.9+).
- FRONTEND_PORT=3002
- BACKEND_PORT=3002
- API_URL=https://dashboard.eptm-automation.ch
# Le hot reload n'est pas censé tourner en prod, mais on garde la
# même exclusion pour cohérence si jamais quelqu'un toggle dev mode.
- REFLEX_HOT_RELOAD_EXCLUDE_PATHS=/app/data
- TZ=Europe/Zurich
networks:
- default
- proxy_net
networks:
proxy_net:
external: true