Files
courcellematthi/Dockerfile
T
2026-08-05 22:40:03 +02:00

80 lines
4.2 KiB
Docker

# =============================================================================
# Dockerfile — Site statique courcellematthi.eu
# -----------------------------------------------------------------------------
# Image mono-étape : le site n'a aucune dépendance et aucune compilation.
# Une étape de build (Node, npm install…) n'apporterait ici que du temps
# de déploiement et de la surface d'attaque en plus.
#
# Image finale : environ 50 Mo, dont 48 Mo pour Nginx Alpine.
# =============================================================================
# Version épinglée plutôt que « latest » : un redéploiement six mois plus tard
# doit produire exactement la même image. « latest » rend les builds
# non reproductibles et peut casser la production sans qu'on ait rien changé.
FROM nginx:1.27-alpine
# -----------------------------------------------------------------------------
# MÉTADONNÉES (spécification OCI)
# Visibles via « docker inspect », utiles pour l'inventaire et le débogage.
# -----------------------------------------------------------------------------
LABEL org.opencontainers.image.title="courcellematthi.eu"
LABEL org.opencontainers.image.description="Site personnel et CV de Matthieu Courcelle"
LABEL org.opencontainers.image.authors="Matthieu Courcelle <m@tthieu.be>"
LABEL org.opencontainers.image.url="https://www.courcellematthi.eu"
LABEL org.opencontainers.image.licenses="UNLICENSED"
# -----------------------------------------------------------------------------
# CONFIGURATION NGINX
# On remplace le fichier par défaut du site, pas nginx.conf global : la
# configuration de base de l'image (workers, types MIME, limites) est saine.
# -----------------------------------------------------------------------------
RUN rm /etc/nginx/conf.d/default.conf
COPY deploy/nginx.conf /etc/nginx/conf.d/site.conf
# -----------------------------------------------------------------------------
# CONTENU DU SITE
# .dockerignore exclut le superflu (README, configs alternatives, .git).
# -----------------------------------------------------------------------------
COPY . /usr/share/nginx/html/
# Retire du conteneur les fichiers qui n'ont rien à y faire : documentation,
# configurations serveur alternatives, sources de déploiement. Ils sont utiles
# dans le dépôt, pas dans l'image servie au public.
RUN rm -rf /usr/share/nginx/html/deploy \
/usr/share/nginx/html/Dockerfile \
/usr/share/nginx/html/.dockerignore \
/usr/share/nginx/html/docker-compose.yaml \
/usr/share/nginx/html/README.md \
/usr/share/nginx/html/DEPLOIEMENT-COOLIFY.md \
/usr/share/nginx/html/nginx.conf.example \
/usr/share/nginx/html/.htaccess \
/usr/share/nginx/html/verifier-depot.sh
# -----------------------------------------------------------------------------
# PERMISSIONS
# Lecture seule pour tous, aucun fichier exécutable : rien dans un site
# statique n'a besoin du bit d'exécution, sauf les répertoires (parcours).
# -----------------------------------------------------------------------------
RUN chmod -R a=r,u+w /usr/share/nginx/html && \
find /usr/share/nginx/html -type d -exec chmod a+x {} \;
# -----------------------------------------------------------------------------
# RÉSEAU
# EXPOSE est purement déclaratif : il documente le port et permet à Coolify
# de le détecter automatiquement. Il n'ouvre rien par lui-même.
# -----------------------------------------------------------------------------
EXPOSE 80
# -----------------------------------------------------------------------------
# SONDE DE SANTÉ
# Coolify affiche l'état du conteneur et peut le redémarrer s'il ne répond
# plus. wget est présent dans l'image Alpine, inutile d'installer curl.
# -----------------------------------------------------------------------------
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget --quiet --tries=1 --spider http://localhost/healthz || exit 1
# L'image officielle définit déjà le bon CMD ; on le réécrit pour rendre
# explicite le fonctionnement au premier plan (daemon off), indispensable
# pour que Docker suive correctement le cycle de vie du processus.
CMD ["nginx", "-g", "daemon off;"]