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