Frontend (prod web): - Image builder Flutter 3.29.3 (Dockerfile + workflow CI alignés) - web/index.html: bootstrap Flutter 3.29 (flutter_bootstrap.js), scripts pdf.js conservés - Dockerfile: rm html avant COPY pour éviter l’index « Welcome to nginx » - nginx: server_name _ pour Traefik - env: sur le web, API = Uri.base.origin si pas de API_BASE_URL (évite mixed content http/https) - auth: message d’erreur réseau avec type/détail si non-Exception - CGU/PDF: commentaire sans mention Flutter 3.19 obsolète - pubspec.lock: résolution dépendances Flutter 3.29 Base de données & doc: - BDD.sql: validations.commentaire, valide_par, FK ON DELETE SET NULL + commentaire - patch 2026-04-17: valide_par avec ON DELETE SET NULL - patch 2026-04-18: FK validations en SET NULL sur bases existantes - seed: statut validation « valide » (enum) - FK_POLICIES.md: valide_par - doc workflow: Flutter 3.29.3 Made-with: Cursor
21 lines
610 B
Docker
21 lines
610 B
Docker
# Stage builder
|
||
FROM ghcr.io/cirruslabs/flutter:3.29.3 AS builder
|
||
WORKDIR /app
|
||
COPY pubspec.* ./
|
||
RUN flutter pub get
|
||
COPY . .
|
||
RUN flutter build web --release
|
||
|
||
# Stage production
|
||
FROM nginx:alpine
|
||
# Image nginx:alpine contient déjà index.html « Welcome to nginx ».
|
||
# Un merge de dossiers sans nettoyage peut laisser ce fichier si le build
|
||
# Flutter n’écrase pas tous les fichiers → SPA invisible. On vide d’abord.
|
||
RUN rm -rf /usr/share/nginx/html/*
|
||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||
COPY --from=builder /app/build/web /usr/share/nginx/html
|
||
|
||
EXPOSE 80
|
||
|
||
CMD ["nginx", "-g", "daemon off;"]
|