Files
courcellematthi/docker-compose.yaml
2026-08-05 22:40:03 +02:00

97 lines
4.8 KiB
YAML

# =============================================================================
# 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