Aller au contenu

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.

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.

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.

Lis le trajet complet avant de créer le moindre fichier NGINX : navigateur → NGINX → WordPress/PHP-FPM → MariaDB.

Preuves de validation 0 / 3

Une case correspond à une preuve observée ou expliquée, pas simplement à une commande copiée.

Question de soutenance — Quel est le rôle de NGINX ?

Recevoir HTTPS, servir les fichiers et transmettre le PHP à wordpress:9000.

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.

Séparer ces trois rôles rend la construction lisible : Dockerfile installe, nginx.conf configure, entrypoint.sh prépare puis lance.

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/Dockerfile
  • srcs/requirements/nginx/conf/nginx.conf
  • srcs/requirements/nginx/tools/entrypoint.sh
À EXÉCUTER DANS🖥️ Dans la VM · 📁 racine du repository
touch srcs/requirements/nginx/conf/default.conf srcs/requirements/nginx/tools/entrypoint.sh
chmod +x srcs/requirements/nginx/tools/entrypoint.sh
Ce que fait chaque partie
  1. touch : crée configuration et entrypoint.
  2. chmod +x : prépare l’exécution du script.
Résultat attendu

Les fichiers existent et entrypoint.sh est exécutable.

Si cela échoue

Contrôlez requirements/nginx et le bit x.

Preuves de validation 0 / 3

Une case correspond à une preuve observée ou expliquée, pas simplement à une commande copiée.

Question de soutenance — Quel est le rôle de NGINX ?

Recevoir HTTPS, servir les fichiers et transmettre le PHP à wordpress:9000.

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.

NGINX doit être installé dans sa propre image. FROM choisit encore une base autorisée, pas une image nginx prête.

Écris uniquement FROM avec le tag explicite déjà vérifié.

Fichiers ou emplacements concernés

  • srcs/requirements/nginx/Dockerfile
À ÉCRIRE DANSFichier srcs/requirements/nginx/Dockerfile

Avant de copier : remplacez <avant-derniere-stable> par vos valeurs.

FROM debian:<avant-derniere-stable>
Ce que fait chaque partie
  1. FROM crée la base de la troisième image.
  2. Le tag doit correspondre au choix déjà documenté.
Résultat attendu

Le Dockerfile contient uniquement un FROM autorisé.

Si cela échoue

N’utilise ni nginx:<version> ni debian:latest.

Preuves de validation 0 / 3

Une case correspond à une preuve observée ou expliquée, pas simplement à une commande copiée.

Question de soutenance — Quel est le rôle de NGINX ?

Recevoir HTTPS, servir les fichiers et transmettre le PHP à wordpress:9000.

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.

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.

Ajoute le bloc RUN d’installation, sans COPY ni ENTRYPOINT.

Fichiers ou emplacements concernés

  • srcs/requirements/nginx/Dockerfile
À ÉCRIRE DANSFichier srcs/requirements/nginx/Dockerfile · sous FROM
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
  1. nginx installe le serveur web.
  2. openssl fournit la création et les tests de certificat.
  3. ca-certificates gère les autorités connues.
  4. Le cache APT est retiré après installation.
Résultat attendu

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.

Preuves de validation 0 / 3

Une case correspond à une preuve observée ou expliquée, pas simplement à une commande copiée.

Question de soutenance — Quel est le rôle de NGINX ?

Recevoir HTTPS, servir les fichiers et transmettre le PHP à wordpress:9000.

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.

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é.

Construis l’image intermédiaire puis affiche les deux versions.

À EXÉCUTER DANSDans la VM · racine du repository
docker build -t nginx:stage-packages srcs/requirements/nginx
docker run --rm nginx:stage-packages nginx -v
docker run --rm nginx:stage-packages openssl version
Ce que fait chaque partie
  1. build crée l’étape avec paquets.
  2. nginx -v vérifie le serveur.
  3. openssl version vérifie l’outil cryptographique.
Résultat attendu

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.

Preuves de validation 0 / 3

Une case correspond à une preuve observée ou expliquée, pas simplement à une commande copiée.

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.

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.

Ajoute ces lignes finales et vérifie que le script est exécutable.

Fichiers ou emplacements concernés

  • srcs/requirements/nginx/Dockerfile
À ÉCRIRE DANSFichier srcs/requirements/nginx/Dockerfile · sous le bloc RUN
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
  1. Le premier COPY remplace la configuration principale.
  2. Le second installe le script de démarrage.
  3. EXPOSE documente le port interne.
  4. ENTRYPOINT sera exécuté à chaque container.
Résultat attendu

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.

Preuves de validation 0 / 4

Une case correspond à une preuve observée ou expliquée, pas simplement à une commande copiée.

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.

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.

É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
À ÉCRIRE DANS📄 srcs/requirements/nginx/tools/entrypoint.sh · première partie
#!/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
fi
Ce que fait chaque partie
  1. req -x509 : produit un certificat auto-signé.
  2. -nodes : garde la clé sans passphrase pour un démarrage non interactif.
  3. -newkey rsa:2048 : crée une nouvelle clé RSA.
  4. -subj /CN= : nomme le domaine local.
  5. chmod 600 : limite la lecture de la clé.
Résultat attendu

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.

Preuves de validation 0 / 4

Une case correspond à une preuve observée ou expliquée, pas simplement à une commande copiée.

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é.

Construire maintenant isole les erreurs d’installation et de copie. Une construction réussie ne prouve pas encore que NGINX sait démarrer.

Construis l’image inception-nginx directement, puis inspecte sa base et son entrypoint.

À EXÉCUTER DANSDans la VM · racine du repository
docker build -t inception-nginx srcs/requirements/nginx
docker image inspect inception-nginx --format '{{.Config.Entrypoint}}'
Ce que fait chaque partie
  1. docker build exécute la nouvelle recette.
  2. -t inception-nginx donne un nom local explicite.
  3. inspect affiche l’entrypoint enregistré dans l’image.
Résultat attendu

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.

Preuves de validation 0 / 3

Une case correspond à une preuve observée ou expliquée, pas simplement à une commande copiée.

Question de soutenance — Quel est le rôle de NGINX ?

Recevoir HTTPS, servir les fichiers et transmettre le PHP à wordpress:9000.