Aller au contenu
Retour au blog

Vérifier un serveur Node avec Docker : port, santé et état

Diagnostiquez un site créé avec l’IA qui nécessite un serveur : Node, Docker, port 8080, healthz, 404 exactes et mémoire éphémère avec un exemple MIT testé.

  • Node.js
  • Docker
  • AI

Votre site fonctionne dans l’éditeur, puis disparaît lorsque vous fermez le terminal. Si un processus Node répond aux requêtes, vérifiez-le avant de choisir son hébergement. Cette méthode examine des signaux concrets : port, routes, santé, arrêt et état après redémarrage.

Nous utilisons Señal, un exemple original sous MIT, sans dépendances externes, comptes, paiements ni base de données. Sa page lit la version et la durée d’activité du serveur. Copier les fichiers sur un hébergement statique ne maintient pas ce processus en marche.

Fixer la version et démarrer le processus

Installez Node 22.23.3, publié par Node.js, et vérifiez que node --version renvoie v22.23.3. Conservez la licence MIT et le lockfile.

git clone https://github.com/ocentelles/hostbrid-example-service.git
cd hostbrid-example-service
git checkout dffe40abc37323cb9a84f172f804ed91670e465e
node --version
npm ci
npm run check
npm test
PORT=8080 npm start

npm ci utilise le lockfile et échoue s’il ne correspond pas à package.json. Cet exemple n’a aucun paquet externe. npm start maintient un serveur actif ; il ne génère pas dist. Ouvrez http://localhost:8080/ et gardez le terminal ouvert pendant les vérifications depuis un autre terminal.

Le code écoute sur 0.0.0.0:8080. PORT permet de changer le port, qui doit correspondre à la configuration du service. 0.0.0.0 accepte les connexions extérieures au processus : ce n’est pas une URL à visiter. L’exécution native peut permettre un accès depuis votre réseau local.

Reproduire l’image sans exposition publique

Avec un moteur Docker déjà disponible, arrêtez d’abord le processus natif pour libérer 8080 :

docker build -t hostbrid-service-check:dffe40a .
docker run --rm --name hostbrid-service-check -e PORT=8080 \
  -p 127.0.0.1:8080:8080 hostbrid-service-check:dffe40a

Le Dockerfile fixe Node 22.23.3 Alpine par digest. Node démarre directement avec un utilisateur non root. Ce mappage de ports publie 8080 seulement sur l’interface loopback de l’ordinateur. EXPOSE documente un port sans le publier. Ces commandes locales ne configurent ni domaine ni HTTPS.

Pour cette restriction à localhost, utilisez Docker Engine 28.0.0 ou ultérieur avec le réseau bridge par défaut. Docker avertit que, sur les anciennes versions, d’autres machines du même segment L2 peuvent atteindre les ports publiés sur localhost. Vérifiez la version du serveur avec docker version ; nous n’avons pas testé de daemon Docker local. Avertissement officiel.

Vérifier des comportements qui peuvent échouer

Depuis un autre terminal :

curl -fsS http://127.0.0.1:8080/healthz
curl -fsS http://127.0.0.1:8080/status.json
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/missing
curl -s -o /dev/null -w '%{http_code}\n' 'http://127.0.0.1:8080/healthz?check=1'

/healthz doit renvoyer un JSON avec status: ok ; /status.json contient version, bootId, uptimeSeconds et requests. La route absente et la query non déclarée doivent renvoyer 404, sans remplacer la réponse par l’accueil. Ouvrez aussi /service.css et /signal.svg : un accueil fonctionnel ne prouve pas la disponibilité des fichiers associés.

Signal Vérification
Connexion refusée Processus arrêté, autre port ou mappage absent.
Accueil 200, CSS 404 Routes des fichiers ou contexte de l’image.
Santé 200, fonction réelle en échec Cet endpoint vérifie la démo, pas les dépendances de votre application.
Activité revenue à zéro Le processus a redémarré ; vérifiez aussi bootId.

Trois contrôles de santé distincts

/healthz est une route applicative. Le HEALTHCHECK du Dockerfile exécute un helper dans le conteneur. Les probes Kubernetes se configurent séparément : readiness contrôle le trafic, liveness les redémarrages et startup le démarrage initial. Le Dockerfile ne les configure pas automatiquement.

Notre test a exécuté le helper avec succès. Cela ne prouve ni l’état health d’un daemon Docker ni les probes Kubernetes d’un service publié.

Arrêt et mémoire : vérifier la limite

docker stop --timeout 10 hostbrid-service-check

L’exemple traite SIGTERM en arrêtant les nouvelles connexions et en attendant les requêtes actives, avec une limite interne de cinq secondes. Le test conteneur a vérifié une sortie 0 et la fermeture du port en envoyant SIGTERM au serveur enfant du vérificateur. Il ne valide ni rollout ni signal envoyé par Kubernetes à Node en PID1.

Au redémarrage, bootId change et le compteur repart de zéro. Activité et requêtes résident en mémoire éphémère, sans stockage persistant. Les sondes comptent aussi comme requêtes : ce ne sont pas des visiteurs. Des données durables nécessitent stockage, sauvegardes et restauration conçus et testés séparément.

Preuve obtenue et conditions avant publication

Le 8 octobre 2026, nous avons construit une image OCI et exécuté 11 vérifications dans un Job temporaire : version, santé, état, activité, fichiers, 404, arrêt et remise à zéro de la mémoire. Le Job et ses propres références d’image ont été nettoyés. Aucun service d’hébergement n’a été créé ; HTTPS public, OAuth client et déploiement automatique après push n’ont pas été démontrés.

Pour une application avec processus sur Hostbrid Projects, vérifiez un plan incluant des services et un quota disponible, le Dockerfile à la racine, le port et les variables. Le quota statique n’autorise pas les processus permanents. Consultez le tarif actuel avant de créer des ressources ; cet exemple ne démontre pas de services gratuits. Domaine, HTTPS, probes et persistance doivent chacun être vérifiés avec votre application.

Si votre application sépare le site, l’API et la base de données dans plusieurs conteneurs, consultez le guide de déploiement Docker Compose sur VPS. Il traite d’une pile multi-services ; cette page vérifie un seul processus Node.

Une fois le processus testé, comparez les parcours dans le guide d’hébergement Node.js : Sites, Projects avec Git et un VPS impliquent des exigences différentes pour le domaine et l’exploitation.

Gérez vos sites, serveurs et e-mails.

Mot de passe oublié ?

C’est gratuit et ça prend une minute.

8 caractères minimum. Ni que des chiffres, ni un mot de passe courant.

Nous vous enverrons un e-mail pour confirmer le compte.