Dans ce guide technique, nous allons dockeriser une application Node.js et la mettre en production avec Docker Compose et Traefik. Vous apprendrez à construire une image optimisée, configurer un proxy inverse automatisé pour le TLS et déployer votre stack en quelques commandes. L’objectif : un processus reproductible, sécurisé et facile à maintenir.

1. préparer le Dockerfile multi-étapes

Le Dockerfile multi-étapes réduit la taille finale de l’image et améliore la sécurité :

FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build

FROM node:18-alpine AS runtime
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/server.js"]

Explications :

  • Étape builder : installe les dépendances et génère les fichiers compilés.
  • Étape runtime : ne conserve que le nécessaire pour exécuter l’application.

2. définir le fichier docker-compose.yml

Créez un fichier docker-compose.yml à la racine :

version: "3.8"
services:
  app:
    image: votre-registry/app:latest
    build:
      context: .
      target: runtime
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.app.rule=Host(`votre-domaine.com`)"
      - "traefik.http.routers.app.entrypoints=websecure"
      - "traefik.http.routers.app.tls.certresolver=le"
    restart: always
    networks:
      - web

  traefik:
    image: traefik:v2.10
    command:
      - "--providers.docker=true"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.le.acme.email=admin@votre-domaine.com"
      - "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "./letsencrypt:/letsencrypt"
    networks:
      - web

networks:
  web:
    external: false

3. lancer et vérifier le déploiement

  1. Construire et démarrer les services :
    docker-compose up -d --build
  2. Vérifier les logs Traefik :
    docker-compose logs -f traefik
  3. Tester l’accès en HTTPS sur https://votre-domaine.com.

4. bonnes pratiques pour la production

  • Scannez vos images avec docker scan ou un outil interne (technologies/docker).
  • Limitez les ressources CPU/mémoire dans docker-compose.yml pour éviter les débordements.
  • Activez un monitoring léger (HEALTHCHECK dans le Dockerfile) et centralisez les logs.
  • Isoler les volumes importants et chiffrez les données sensibles.

5. passer à l’échelle et CI/CD

Pour une montée en charge, vous pouvez :

  • Ajouter un load balancer ou scaler les services via docker-compose scale app=3.
  • Intégrer ces étapes dans votre pipeline CI/CD (services/saas) pour automatiser le déploiement.

conclusion

Vous avez désormais un environnement Dockerisé prêt pour la production, avec un proxy Traefik gérant automatiquement les certificats TLS. Ce workflow améliore la sécurité, la maintenabilité et la rapidité de déploiement de votre application Node.js. Pour aller plus loin ou obtenir un accompagnement personnalisé, contactez nos experts.