# ============================================================================= # docker-compose.yaml — Déploiement Coolify # ----------------------------------------------------------------------------- # Utiliser ce fichier UNIQUEMENT si le déploiement Coolify est configuré en # type « Docker Compose ». En type « Dockerfile », Coolify génère lui-même la # configuration et ce fichier est ignoré. # # Voir DEPLOIEMENT-COOLIFY.md pour le choix entre les deux méthodes. # ============================================================================= services: site: build: context: . dockerfile: Dockerfile # Redémarrage automatique après un reboot du serveur ou un plantage. restart: unless-stopped # ------------------------------------------------------------------------- # RÉSEAUX # ------------------------------------------------------------------------- # Le réseau « coolify » est celui où vit Traefik. Un conteneur qui n'y est # pas rattaché est invisible pour le reverse proxy : Traefik affiche alors # une 404, alors que le conteneur tourne parfaitement. # # C'est la panne la plus fréquente sur Coolify, et elle est trompeuse # parce que les journaux du conteneur sont vides — la requête ne # l'atteint jamais. networks: - coolify # ------------------------------------------------------------------------- # ÉTIQUETTES TRAEFIK # ------------------------------------------------------------------------- labels: - traefik.enable=true # --- Routeur HTTPS --- - traefik.http.routers.courcellematthi.rule=Host(`www.courcellematthi.eu`) - traefik.http.routers.courcellematthi.entrypoints=https - traefik.http.routers.courcellematthi.tls=true - traefik.http.routers.courcellematthi.tls.certresolver=letsencrypt - traefik.http.routers.courcellematthi.service=courcellematthi # --- Port du service --- # DÉCLARATION OBLIGATOIRE. Traefik ne devine le port que si le conteneur # n'en expose qu'un seul, et cette détection échoue régulièrement. # Sans cette ligne : « 502 Bad Gateway » ou « service not found ». - traefik.http.services.courcellematthi.loadbalancer.server.port=80 # --- Redirection du domaine nu vers www --- # Doit correspondre au rel="canonical" du HTML, sous peine de contenu # dupliqué aux yeux des moteurs de recherche. - traefik.http.routers.courcellematthi-apex.rule=Host(`courcellematthi.eu`) - traefik.http.routers.courcellematthi-apex.entrypoints=https - traefik.http.routers.courcellematthi-apex.tls=true - traefik.http.routers.courcellematthi-apex.tls.certresolver=letsencrypt - traefik.http.routers.courcellematthi-apex.middlewares=courcellematthi-towww - traefik.http.routers.courcellematthi-apex.service=courcellematthi - traefik.http.middlewares.courcellematthi-towww.redirectregex.regex=^https://courcellematthi\.eu/(.*) - traefik.http.middlewares.courcellematthi-towww.redirectregex.replacement=https://www.courcellematthi.eu/$${1} - traefik.http.middlewares.courcellematthi-towww.redirectregex.permanent=true # --- HSTS --- # Émis par Traefik, qui termine le TLS, et non par Nginx dans le conteneur. # # ATTENTION : à n'activer qu'une fois le HTTPS confirmé fonctionnel. # Un HSTS émis par erreur rend le domaine inaccessible en HTTP pendant # deux ans côté navigateur, sans possibilité d'annulation serveur. # Commencer avec max-age=300 pour valider, puis passer à 63072000. - traefik.http.routers.courcellematthi.middlewares=courcellematthi-hsts - traefik.http.middlewares.courcellematthi-hsts.headers.stsSeconds=300 - traefik.http.middlewares.courcellematthi-hsts.headers.stsIncludeSubdomains=true - traefik.http.middlewares.courcellematthi-hsts.headers.stsPreload=true - traefik.http.middlewares.courcellematthi-hsts.headers.forceSTSHeader=true # ------------------------------------------------------------------------- # SONDE DE SANTÉ # Redondante avec celle du Dockerfile, mais explicite ici pour que l'état # remonte correctement dans l'interface Coolify. # ------------------------------------------------------------------------- healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/healthz"] interval: 30s timeout: 3s retries: 3 start_period: 5s # ----------------------------------------------------------------------------- # Le réseau « coolify » est créé par Coolify lui-même : on le déclare externe # pour s'y rattacher sans tenter de le recréer. # ----------------------------------------------------------------------------- networks: coolify: external: true