# ───────────────────────────────────────────────────────────────────────────── # docker-compose — un commandement pour tourner HormoneTrack Web. # # docker compose up -d → http://:8080/ # docker compose up -d --build (rebuild après mise à jour du dépôt) # # Le conteneur ne détient AUCUNE donnée (site statique) : le volume n'est # pas nécessaire, la persistance vit dans les navigateurs. Pas de variable # d'environnement, pas de volume — la config = le code servi. # ───────────────────────────────────────────────────────────────────────────── services: web: build: . # Nom d'image stable : retaguer par version à chaque release sync si # tu veux garder un historique (docker tag hormonetrack-web hormonetrack-web:vX.Y.Z) image: hormonetrack-web:latest container_name: hormonetrack-web ports: - "8080:8080" # port non privilégié de l'image unprivileged nginx restart: unless-stopped # ── Durcissement (site statique : AUCUNE écriture nécessaire) ─────────── # Filesystem en lecture seule + tmpfs pour les seuls dirs que nginx # touche : l'image unprivileged place ses temporaires dans /tmp # (proxy_temp, client_temp, pid) — sans ce tmpfs, nginx émerge # « mkdir /tmp/proxy_temp failed (30: Read-only file system) » au # démarrage avec read_only (constaté au premier container-test 8 sept.). read_only: true tmpfs: - /var/cache/nginx - /run - /tmp security_opt: - no-new-privileges:true