Docker: Plateforme de production

Cette documentation fait partie du guide Node.js. Consultez le guide complet ici : Comment utiliser et déployer une application Node.js avec Docker.

Bienvenue dans la documentation Stackhero

Stackhero offre une plateforme Docker cloud CaaS (Containers as a Service) prête à l’emploi, conçue pour des déploiements de containers rapides et fiables :

  • Déployez en production avec un simple docker-compose up. Aucune configuration supplémentaire requise : démarrez simplement vos containers.
  • Choisissez votre propre nom de domaine, automatiquement sécurisé avec HTTPS (par exemple : https://api.votre-entreprise.com, https://www.votre-entreprise.com ou https://backoffice.votre-entreprise.com).
  • Profitez de performances élevées et d’une sécurité robuste sur une infrastructure privée et dédiée.
  • Appliquez les mises à jour en un clic pour une maintenance simple et sans tracas.

Vos containers peuvent être en production en environ cinq minutes. Stackhero prend en charge l’infrastructure, les mises à jour et la sécurité pour vous permettre de vous concentrer sur la livraison de vos applications. Pour en savoir plus sur l’hébergement cloud Docker CaaS.

Si vous n'avez pas encore de service Stackhero for Docker, vous pouvez en créer un facilement depuis votre tableau de bord Stackhero. Il sera activé en environ 2 minutes.

Si vous êtes nouveau sur Stackhero, vous pouvez essayer l'hébergement cloud de conteneurs Docker gratuitement pendant un mois.

Avant de déployer votre application en production, vous devez préparer quelques fichiers de configuration :

  1. Copiez secrets/global.production.example en secrets/global.production.
  2. Modifiez secrets/global.production et remplacez <XXXXXX>.stackhero-network.com par le nom d'hôte de votre service Docker depuis votre tableau de bord Stackhero.
  3. Copiez secrets/my-app.production.example en secrets/my-app.production.
  4. Modifiez secrets/my-app.production et insérez vos identifiants.
  5. Mettez à jour docker/docker-compose.production.yml en remplaçant <XXXXXX>.stackhero-network.com par le nom d'hôte de votre service Docker.

Le déploiement en production est simple : exécutez :

make production-deploy

Cette commande crée un conteneur Docker, transfère les données de votre projet et les envoie à votre service Docker en production. Ouvrez votre navigateur et naviguez vers le nom d'hôte de votre service Docker (par exemple, https://<XXXXXX>.stackhero-network.com). Vous devriez voir votre API REST répondre "Hello World".

Vous pouvez également utiliser make production, qui déploie vos conteneurs et affiche les logs en temps réel.

Pour surveiller votre environnement de production ou résoudre des problèmes, vous pouvez consulter vos logs en utilisant ces commandes :

  • Pour diffuser les logs en direct, exécutez : make production-logs-live
  • Pour récupérer tous les logs stockés, exécutez : make production-logs
  • Pour récupérer les logs d'un jour spécifique (remplacez YYYY-MM-DD par la date souhaitée), exécutez : make production-logs | grep "YYYY-MM-DD"

Si vous souhaitez utiliser un nom de domaine différent de https://<XXXXXX>.stackhero-network.com, Stackhero for Docker intègre Traefik pour simplifier la gestion des domaines. Traefik gère le routage HTTP et le chiffrement TLS (HTTPS) pour vous.

Voici quelques exemples pour personnaliser vos noms de domaine :

  • Pour servir api.my-company.com via votre conteneur my-app sur le port 5000 avec chiffrement TLS, mettez à jour le fichier docker/docker-compose.production.yml en remplaçant la section labels par :

        labels:
          - "traefik.enable=true" # Activer Traefik pour router le trafic vers ce conteneur
          - "traefik.http.routers.my-app.rule=Host(`api.my-company.com`)" # Définir l'hôte
          - "traefik.http.routers.my-app.tls.certresolver=letsencrypt" # Utiliser letsencrypt pour les certificats TLS
          - "traefik.http.services.my-app.loadbalancer.server.port=5000" # Spécifier le port 5000
    
  • Pour servir my-company.com via votre conteneur my-app sur le port 5000 et rediriger toutes les requêtes de www.my-company.com vers my-company.com, mettez à jour la section labels dans le même fichier avec :

        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.my-app.rule=Host(`my-company.com`) || Host(`www.my-company.com`)" # Inclure les deux domaines
          - "traefik.http.routers.my-app.tls.certresolver=letsencrypt"
          - "traefik.http.services.my-app.loadbalancer.server.port=5000" # Spécifier le port 5000
    
          # Rediriger www.my-company.com vers my-company.com :
          - "traefik.http.routers.my-app.middlewares=redirect-www"
          - "traefik.http.middlewares.redirect-www.redirectregex.regex=^https://www.my-company.com/(.*)"
          - "traefik.http.middlewares.redirect-www.redirectregex.replacement=https://my-company.com/$${1}"
          - "traefik.http.middlewares.redirect-www.redirectregex.permanent=true"
    

N'oubliez pas de configurer le DNS pour my-company.com et www.my-company.com afin que chacun pointe en tant que CNAME vers votre service Docker à https://<XXXXXX>.stackhero-network.com.