Construire l’image NGINX
Construire le seul point d’entrée, sans encore le publier.
Dans ce chapitre : 8 étapes et 26 preuves de validation.
Étape 74 — Comprendre le rôle exact de NGINX
Section intitulée « Étape 74 — Comprendre le rôle exact de NGINX »Objectif. Tu sauras pourquoi le troisième container est ajouté en dernier.
État du projet avant cette étape. MariaDB et WordPress fonctionnent déjà ensemble, mais aucun port n’est publié vers la VM.
Comprendre le changement
Section intitulée « Comprendre le changement »NGINX sera la porte d’entrée unique. Il reçoit HTTPS sur 443 puis transmet les fichiers PHP à PHP-FPM sur wordpress:9000. Il ne contient ni WordPress ni la base.
Faire une seule chose
Section intitulée « Faire une seule chose »Lis le trajet complet avant de créer le moindre fichier NGINX : navigateur → NGINX → WordPress/PHP-FPM → MariaDB.
Prouver que c’est correct
Section intitulée « Prouver que c’est correct »Question de soutenance — Quel est le rôle de NGINX ?
Recevoir HTTPS, servir les fichiers et transmettre le PHP à wordpress:9000.
Étape 75 — Créer les trois fichiers NGINX
Section intitulée « Étape 75 — Créer les trois fichiers NGINX »Objectif. Tu prépareras les emplacements sans encore inventer leur contenu.
État du projet avant cette étape. Tu sais maintenant à quoi sert NGINX ; son image aura une recette, une configuration et un script de démarrage.
Comprendre le changement
Section intitulée « Comprendre le changement »Séparer ces trois rôles rend la construction lisible : Dockerfile installe, nginx.conf configure, entrypoint.sh prépare puis lance.
Faire une seule chose
Section intitulée « Faire une seule chose »Crée le dossier nginx avec Dockerfile, conf/nginx.conf et tools/entrypoint.sh. Laisse les deux derniers fichiers vides pour le moment.
Fichiers ou emplacements concernés
srcs/requirements/nginx/Dockerfilesrcs/requirements/nginx/conf/nginx.confsrcs/requirements/nginx/tools/entrypoint.sh
touch srcs/requirements/nginx/conf/default.conf srcs/requirements/nginx/tools/entrypoint.sh
chmod +x srcs/requirements/nginx/tools/entrypoint.shCe que fait chaque partie
- touch : crée configuration et entrypoint.
- chmod +x : prépare l’exécution du script.
Les fichiers existent et entrypoint.sh est exécutable.
Si cela échoue
Contrôlez requirements/nginx et le bit x.
Prouver que c’est correct
Section intitulée « Prouver que c’est correct »Question de soutenance — Quel est le rôle de NGINX ?
Recevoir HTTPS, servir les fichiers et transmettre le PHP à wordpress:9000.
Étape 76 — Écrire seulement FROM pour NGINX
Section intitulée « Étape 76 — Écrire seulement FROM pour NGINX »Objectif. Tu commenceras la troisième image avec la même règle que les deux précédentes.
État du projet avant cette étape. MariaDB et WordPress fonctionnent. Le Dockerfile NGINX est vide.
Comprendre le changement
Section intitulée « Comprendre le changement »NGINX doit être installé dans sa propre image. FROM choisit encore une base autorisée, pas une image nginx prête.
Faire une seule chose
Section intitulée « Faire une seule chose »Écris uniquement FROM avec le tag explicite déjà vérifié.
Fichiers ou emplacements concernés
srcs/requirements/nginx/Dockerfile
Avant de copier : remplacez <avant-derniere-stable> par vos valeurs.
FROM debian:<avant-derniere-stable>Ce que fait chaque partie
- FROM crée la base de la troisième image.
- Le tag doit correspondre au choix déjà documenté.
Le Dockerfile contient uniquement un FROM autorisé.
Si cela échoue
N’utilise ni nginx:<version> ni debian:latest.
Prouver que c’est correct
Section intitulée « Prouver que c’est correct »Question de soutenance — Quel est le rôle de NGINX ?
Recevoir HTTPS, servir les fichiers et transmettre le PHP à wordpress:9000.
Étape 77 — Installer NGINX et OpenSSL
Section intitulée « Étape 77 — Installer NGINX et OpenSSL »Objectif. Tu ajouteras seulement les deux programmes nécessaires au point d’entrée.
État du projet avant cette étape. L’image ne contient encore que la base.
Comprendre le changement
Section intitulée « Comprendre le changement »nginx reçoit les requêtes web. openssl générera le certificat local. Aucun PHP ni MariaDB ne doit être installé dans ce container.
Faire une seule chose
Section intitulée « Faire une seule chose »Ajoute le bloc RUN d’installation, sans COPY ni ENTRYPOINT.
Fichiers ou emplacements concernés
srcs/requirements/nginx/Dockerfile
RUN apt-get update \
&& apt-get install -y --no-install-recommends nginx openssl ca-certificates \
&& rm -rf /var/lib/apt/lists/*Ce que fait chaque partie
- nginx installe le serveur web.
- openssl fournit la création et les tests de certificat.
- ca-certificates gère les autorités connues.
- Le cache APT est retiré après installation.
Le bloc RUN installe NGINX et OpenSSL seulement.
Si cela échoue
Une erreur de paquet indique un catalogue absent ou un nom différent sur la base choisie.
Prouver que c’est correct
Section intitulée « Prouver que c’est correct »Question de soutenance — Quel est le rôle de NGINX ?
Recevoir HTTPS, servir les fichiers et transmettre le PHP à wordpress:9000.
Étape 78 — Construire et vérifier NGINX
Section intitulée « Étape 78 — Construire et vérifier NGINX »Objectif. Tu testeras le paquet avant toute configuration TLS.
État du projet avant cette étape. FROM et RUN sont écrits ; nginx.conf et entrypoint.sh ne sont pas encore copiés.
Comprendre le changement
Section intitulée « Comprendre le changement »nginx -v prouve le binaire. openssl version prouve l’outil TLS. Le container se termine après chaque commande car aucun service n’est encore lancé.
Faire une seule chose
Section intitulée « Faire une seule chose »Construis l’image intermédiaire puis affiche les deux versions.
docker build -t nginx:stage-packages srcs/requirements/nginx
docker run --rm nginx:stage-packages nginx -v
docker run --rm nginx:stage-packages openssl versionCe que fait chaque partie
- build crée l’étape avec paquets.
- nginx -v vérifie le serveur.
- openssl version vérifie l’outil cryptographique.
Les deux commandes affichent une version.
Si cela échoue
command not found signifie que le bloc RUN n’a pas été construit comme prévu.
Prouver que c’est correct
Section intitulée « Prouver que c’est correct »Question de soutenance — Quel est le rôle de NGINX ?
Recevoir HTTPS, servir les fichiers et transmettre le PHP à wordpress:9000.
Étape 79 — Copier les fichiers et déclarer l’entrée
Section intitulée « Étape 79 — Copier les fichiers et déclarer l’entrée »Objectif. Tu relieras la recette aux fichiers NGINX encore incomplets.
État du projet avant cette étape. Les paquets fonctionnent. Les fichiers de configuration et de démarrage existent dans conf et tools.
Comprendre le changement
Section intitulée « Comprendre le changement »COPY place nginx.conf et entrypoint.sh dans l’image. EXPOSE documente 443. ENTRYPOINT enregistre le script qui créera le certificat puis lancera NGINX.
Faire une seule chose
Section intitulée « Faire une seule chose »Ajoute ces lignes finales et vérifie que le script est exécutable.
Fichiers ou emplacements concernés
srcs/requirements/nginx/Dockerfile
COPY conf/nginx.conf /etc/nginx/nginx.conf
COPY tools/entrypoint.sh /usr/local/bin/nginx-entrypoint
RUN chmod +x /usr/local/bin/nginx-entrypoint
EXPOSE 443
ENTRYPOINT ["/usr/local/bin/nginx-entrypoint"]Ce que fait chaque partie
- Le premier COPY remplace la configuration principale.
- Le second installe le script de démarrage.
- EXPOSE documente le port interne.
- ENTRYPOINT sera exécuté à chaque container.
Le Dockerfile NGINX complet contient FROM, RUN, COPY, EXPOSE et ENTRYPOINT.
Si cela échoue
COPY failed indique un nom ou contexte incohérent avec le dossier nginx.
Prouver que c’est correct
Section intitulée « Prouver que c’est correct »Question de soutenance — Quel est le rôle de NGINX ?
Recevoir HTTPS, servir les fichiers et transmettre le PHP à wordpress:9000.
Étape 80 — Créer le certificat dans le container
Section intitulée « Étape 80 — Créer le certificat dans le container »Objectif. Tu prépareras un certificat de développement sans le committer.
État du projet avant cette étape. L’image possède OpenSSL, mais NGINX n’a encore aucun certificat à présenter au navigateur.
Comprendre le changement
Section intitulée « Comprendre le changement »Le script génère à chaque container les deux fichiers nécessaires : une clé privée et un certificat autosigné. Le nom du domaine vient de DOMAIN_NAME.
Faire une seule chose
Section intitulée « Faire une seule chose »Écris seulement la partie du script qui crée le dossier TLS et génère le certificat si celui-ci n’existe pas.
Fichiers ou emplacements concernés
srcs/requirements/nginx/tools/entrypoint.sh
#!/bin/sh
set -eu
: "${DOMAIN_NAME:?DOMAIN_NAME manquant}"
mkdir -p /etc/nginx/tls
if [ ! -s /etc/nginx/tls/inception.crt ] || [ ! -s /etc/nginx/tls/inception.key ]; then
openssl req -x509 -nodes -newkey rsa:2048 -days 365 \
-keyout /etc/nginx/tls/inception.key \
-out /etc/nginx/tls/inception.crt \
-subj "/CN=${DOMAIN_NAME}"
chmod 600 /etc/nginx/tls/inception.key
fiCe que fait chaque partie
- req -x509 : produit un certificat auto-signé.
- -nodes : garde la clé sans passphrase pour un démarrage non interactif.
- -newkey rsa:2048 : crée une nouvelle clé RSA.
- -subj /CN= : nomme le domaine local.
- chmod 600 : limite la lecture de la clé.
Au démarrage, les deux fichiers existent dans /etc/nginx/tls ; aucun n’apparaît dans Git.
Si cela échoue
Un navigateur affichera un avertissement de confiance normal pour un auto-signé. Une erreur de nom indique un DOMAIN_NAME incorrect.
Prouver que c’est correct
Section intitulée « Prouver que c’est correct »Question de soutenance — Quel est le rôle de NGINX ?
Recevoir HTTPS, servir les fichiers et transmettre le PHP à wordpress:9000.
Étape 81 — Construire l’image NGINX isolément
Section intitulée « Étape 81 — Construire l’image NGINX isolément »Objectif. Tu vérifieras la recette avant d’ajouter le service à Compose.
État du projet avant cette étape. Le Dockerfile et le début du script sont prêts ; la configuration NGINX est encore vide, donc le container n’est pas lancé.
Comprendre le changement
Section intitulée « Comprendre le changement »Construire maintenant isole les erreurs d’installation et de copie. Une construction réussie ne prouve pas encore que NGINX sait démarrer.
Faire une seule chose
Section intitulée « Faire une seule chose »Construis l’image inception-nginx directement, puis inspecte sa base et son entrypoint.
docker build -t inception-nginx srcs/requirements/nginx
docker image inspect inception-nginx --format '{{.Config.Entrypoint}}'Ce que fait chaque partie
- docker build exécute la nouvelle recette.
- -t inception-nginx donne un nom local explicite.
- inspect affiche l’entrypoint enregistré dans l’image.
La construction termine sans erreur et inspect affiche /usr/local/bin/entrypoint.sh.
Si cela échoue
Si COPY échoue, compare les chemins au contexte srcs/requirements/nginx.
Prouver que c’est correct
Section intitulée « Prouver que c’est correct »Question de soutenance — Quel est le rôle de NGINX ?
Recevoir HTTPS, servir les fichiers et transmettre le PHP à wordpress:9000.