# ───────────────────────────────────────────────────────────────────────────── # HormoneTrack Web — image de déploiement Docker (site statique, 100 % local). # # POURQUOI C'EST SIMPLE : l'app n'a AUCUN build (ES modules natifs) et AUCUN # composant serveur — « conteneuriser » = servir les fichiers avec nginx. # Le conteneur ne détient AUCUNE donnée : tout vit dans le localStorage des # navigateurs clients (le serveur ne fait que distribuer des fichiers, cf # docs/DEVELOPPEMENT.md §10 — la vie privée est inchangée). # # Choix d'image : `nginx-unprivileged` (utilisateur 101, port 8080, écritures # limitées à /tmp) — meilleure pratique conteneur (pas de root), même image # que pour un self-host NAS/VPS. Alpine = ~50 Mo décompressé. # # Build : docker build -t hormonetrack-web . # Run : docker run -p 8080:8080 hormonetrack-web (ou docker compose up -d) # Cf docs/DEVELOPPEMENT.md §10 « Déploiement ». # ───────────────────────────────────────────────────────────────────────────── FROM nginxinc/nginx-unprivileged:alpine # ── Métadonnées OCI (traçabilité du conteneur déployé) ─────────────────────── LABEL org.opencontainers.image.title="HormoneTrack Web" \ org.opencontainers.image.description="Suivi de thérapie hormonale — app web 100 % locale (site statique). Portage navigateur de l'app Android." \ org.opencontainers.image.source="https://gitea.cloudyfy.fr/Siphonight/HormoneTrack-web" \ org.opencontainers.image.licenses="GPL-3.0" # ── Config nginx spécifique (port non-privilégié, no-cache, gzip, sécurité) ── COPY nginx.conf /etc/nginx/conf.d/default.conf # ── Fichiers du site ──────────────────────────────────────────────────────── # Tout le dépôt SAUF ce qui n'est pas runtime (tests, scripts, npm) — cf # .dockerignore. ⚠️ docs/ DOIT rester dans l'image : le dialog « Nouveautés » # fetch docs/CHANGELOG.md au démarrage. COPY . /usr/share/nginx/html/ # Le site est statique : le healthcheck synthétique vérifie que nginx répond # (busybox wget est présent dans l'image alpine). HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD wget -q -O /dev/null http://127.0.0.1:8080/ || exit 1 # Port non privilégié (l'image unprivileged n'a pas le droit de binde <1024) EXPOSE 8080