Créer et déployer une application Node.js

La création d'une application Node.js n'est que la première étape du cycle de vie du développement logiciel. C'est au moment de la rendre accessible, performante et résiliente dans un environnement de production que le déploiement d'applications prend tout son sens. Le déploiement d'applications Web modernes implique de sélectionner une architecture qui correspond à votre profil de trafic, à l'étape du cycle de vie et au budget alloué aux ressources.

Que vous lanciez un prototype full stack assisté par l'IA ou que vous déployiez un service de backend de production, les environnements cloud modernes offrent des solutions automatisées et conteneurisées. Ce guide présente les concepts fondamentaux de l'architecture Web Node.js, explore les principales considérations liées au déploiement et explique, étape par étape, comment créer et déployer une application Node.js sur une infrastructure gérée à l'aide des quotas du niveau sans frais.

Qu'est-ce que l'environnement d'exécution Node.js ?

Node.js est un environnement d'exécution JavaScript Open Source multiplate-forme basé sur le moteur JavaScript Chrome V8. Il permet d'exécuter JavaScript côté serveur en dehors du navigateur Web. Les ingénieurs peuvent ainsi écrire des codebases full stack unifiés à l'aide d'un seul langage de programmation.

Contrairement aux serveurs Web multithread traditionnels qui génèrent un thread de système d'exploitation isolé pour chaque connexion simultanée, Node.js repose sur un modèle d'E/S non bloquant, monothread et basé sur les événements. Cette architecture rend Node.js léger et efficace pour gérer des milliers de connexions simultanées, comme les API RESTful, les services de messagerie en temps réel, les services de streaming et les outils d'orchestration d'agents IA.

Déploiement Node.js traditionnel et plates-formes de conteneurs sans serveur

Lorsque vous vous préparez à déployer un backend Node.js, le choix de l'environnement de calcul approprié a un impact direct sur la charge de maintenance, la vitesse de scaling et la rentabilité.

Fonctionnalité

Machines virtuelles (IaaS/VPS)

Hébergement PaaS/buildpack

Conteneurs sans serveur modernes

Gestion des infrastructures

Application manuelle de correctifs à l'OS, gestion des pare-feu et mises à jour de l'environnement d'exécution

Couche de plate-forme entièrement gérée avec des contraintes propres à l'environnement d'exécution du fournisseur

Infrastructure entièrement gérée ; aucune gestion de l'OS

Mécanisme de scaling

Autoscaling des VM basé sur des métriques (le démarrage des instances prend quelques minutes)

Autoscaling basé sur le nombre d'instances ou les limites des nœuds de calcul

Autoscaling instantané basé sur les requêtes, y compris le scaling à zéro instance

Format de packaging

Fichiers sources bruts, services systemd ou gestionnaires de processus PM2

Intégration de dépôts via Git push avec des buildpacks automatisés.

Images de conteneurs OCI/Docker standards

Profil de coût en cas d'inactivité

Facturation 24h/24, 7j/7, quel que soit le trafic HTTP entrant

Implique souvent une tarification de base minimale par instance.

Facturation uniquement à la seconde lors du traitement des requêtes actives

Portabilité

Portabilité élevée, mais risque élevé de dérive de l'environnement

Faible portabilité ; dépendance aux conventions de la plate-forme

Portabilité élevée ; exécute un conteneur identique dans n'importe quel environnement

Fonctionnalité

Machines virtuelles (IaaS/VPS)

Hébergement PaaS/buildpack

Conteneurs sans serveur modernes

Gestion des infrastructures

Application manuelle de correctifs à l'OS, gestion des pare-feu et mises à jour de l'environnement d'exécution

Couche de plate-forme entièrement gérée avec des contraintes propres à l'environnement d'exécution du fournisseur

Infrastructure entièrement gérée ; aucune gestion de l'OS

Mécanisme de scaling

Autoscaling des VM basé sur des métriques (le démarrage des instances prend quelques minutes)

Autoscaling basé sur le nombre d'instances ou les limites des nœuds de calcul

Autoscaling instantané basé sur les requêtes, y compris le scaling à zéro instance

Format de packaging

Fichiers sources bruts, services systemd ou gestionnaires de processus PM2

Intégration de dépôts via Git push avec des buildpacks automatisés.

Images de conteneurs OCI/Docker standards

Profil de coût en cas d'inactivité

Facturation 24h/24, 7j/7, quel que soit le trafic HTTP entrant

Implique souvent une tarification de base minimale par instance.

Facturation uniquement à la seconde lors du traitement des requêtes actives

Portabilité

Portabilité élevée, mais risque élevé de dérive de l'environnement

Faible portabilité ; dépendance aux conventions de la plate-forme

Portabilité élevée ; exécute un conteneur identique dans n'importe quel environnement

Éléments clés à prendre en compte lors de la création d'une application Node.js

Pour développer une application Node.js prête pour la production, vous devez implémenter des modèles architecturaux capables d'éliminer les goulots d'étranglement et de garantir une disponibilité maximale :

  • État des applications sans état : les plates-formes sans serveur modernes lancent et arrêtent les instances de conteneurs de manière dynamique en fonction du trafic entrant. Évitez d'enregistrer l'état des sessions utilisateur, les fichiers multimédias importés ou les files d'attente en arrière-plan dans la mémoire du conteneur local ou sur des disques locaux, car les fichiers écrits sur les disques de conteneurs temporaires disparaissent lors du redéploiement ou du scaling à la baisse. Utilisez des services gérés dédiés tels que Cloud Firestore, Cloud SQL pour PostgreSQL ou Cloud Storage pour stocker un état persistant.
  • Isolation des variables d'environnement et des secrets : coder en dur des clés API, des identifiants de base de données ou des clés secrètes dans le contrôle des sources crée des failles de sécurité critiques. Isolez toujours les configurations d'exécution dans des variables d'environnement (process.env) et injectez-les de manière sécurisée au niveau de l'environnement d'exécution du conteneur.
  • Association de ports et vérifications d'état : les environnements de conteneurs sans serveur acheminent le trafic HTTP en injectant un port cible par défaut, tel que la variable d'environnement PORT (généralement le port 8080). Votre serveur Node.js doit écouter de manière dynamique sur process.env.PORT || 8080 pour réussir les vérifications d'état et d'aptitude.
  • Arrêt progressif et interception des signaux : les applications Node.js doivent intercepter les signaux SIGTERM et SIGINT du système d'exploitation. Lorsqu'un autoscaler d'infrastructure lance un scaling à la baisse, la gestion de ces signaux garantit que le traitement des requêtes HTTP existantes se termine avant la fermeture des connexions à la base de données et l'arrêt du conteneur.

Créer et déployer une application Node.js

Vous pouvez créer et déployer une application Node.js à l'aide de deux workflows principaux : le prototypage rapide assisté par l'IA (aucune configuration locale requise) ou le déploiement standard basé sur des conteneurs (pour les codebases existants).

Option A : prototypage rapide, par exemple avec le mode Compilation d'AI Studio et le niveau Starter (provisionnement sans frais)

Pour le prototypage rapide et les applications d'IA, le mode Compilation de Google AI Studio permet aux développeurs de décrire des architectures Node.js full stack en langage naturel et de les déployer sur Cloud Run sans outils de ligne de commande locaux ni configurations de facturation obligatoires.

Étape 1 : Initialisez l'application en mode Compilation

  1. Accédez à Google AI Studio et passez en mode Compilation.
  2. Saisissez un prompt décrivant la logique métier et l'interface requises pour votre application (par exemple, "Crée un tableau de bord de suivi de l'inventaire avec un backend Node.js et une gestion persistante des tâches").
  3. L'agent intégré génère les fichiers de l'application, configure les routes de votre serveur, installe les dépendances npm pertinentes et lance un aperçu interactif.

Étape 2 : Configurez les données et l'authentification intégrées

  • Pour le stockage persistant : si votre prompt nécessite un espace de stockage de données, activez Cloud Firestore ou Cloud SQL pour PostgreSQL (édition pour les développeurs). AI Studio crée automatiquement votre schéma, vos modèles et vos fichiers de connexion client.
  • Pour l'identité des utilisateurs : activez Firebase Authentication pour activer les flux Google Sign-In préconfigurés, sans configurer manuellement de gestionnaires de redirection OAuth distincts.

Étape 3 : Publiez l'application sur Cloud Run géré

  1. Cliquez sur Publier > Commencer > Publier l'application dans l'interface supérieure.
  2. Sélectionnez la région de déploiement de votre choix.
  3. Indiquez une URL personnalisée <user-defined>.ai.studio pour votre application et publiez-la.
  4. La plate-forme empaquette votre conteneur, provisionne les ressources de calcul sous-jacentes et génère une URL de production HTTPS <user-defined>.ai.studio en quelques secondes.

Option B : déployer une application Node.js personnalisée, par exemple avec Docker et Cloud Run

Pour les codebases préexistants et les microservices personnalisés, empaquetez votre application Node.js dans un conteneur compatible avec OCI et déployez-la directement sur Cloud Run.

Étape 1 : Structurez le code du serveur Node.js

Créez un serveur HTTP minimal avec Express, Fastify ou les bibliothèques Node.js standards (index.js) :

  • JavaScript
Chargement en cours...

 Remarque : Cloud Run injecte automatiquement la variable d'environnement PORT au moment de l'exécution. La valeur de remplacement || 8080 dans le code ci-dessus sert principalement à faciliter les tests locaux sur votre machine avant le déploiement.

Étape 2 : Créez un Dockerfile sécurisé en plusieurs étapes

Empaquetez votre application à l'aide d'un build en plusieurs étapes afin d'obtenir une image de production minimale et sécurisée.

Bonne pratique : Créez un fichier .dockerignore dans votre répertoire racine et ajoutez-y node_modules et .env. Cela permet d'éviter que des fichiers utilisés pour le développement local ne soient accidentellement inclus dans votre image de conteneur, ce qui la garde propre et sécurisée.

Créez un fichier nommé Dockerfile dans votre répertoire racine :

  • Dockerfile
Chargement en cours...

Étape 3 : Effectuez le déploiement sur Cloud Run

Exécutez le déploiement à l'aide de Google Cloud CLI à partir de votre dossier racine local. Vous pouvez également créer une URL personnalisée au format <user-defined>.cloud.run pour votre application :

  • Bash
Chargement en cours...

Pour mapper un domaine personnalisé par la suite, utilisez le code suivant :

  • Bash
Chargement en cours...

Mécanismes de tarification des niveaux sans frais et Starter

Comprendre le fonctionnement des allocations sans frais vous permet de prototyper et de faire évoluer votre application Node.js de manière prévisible :

Type de niveau

Allocation de puissance de calcul et de ressources

Exigences/Limites

Google Cloud niveau Starter (prototypage)

• Cloud Run : jusqu'à deux applications Web actives

• Cloud Firestore : 1 Gio de stockage, 50 000 lectures/jour, 40 000 écritures/jour

• Cloud SQL : édition PostgreSQL pour les développeurs (scaling à zéro instance)

• Firebase Auth : Google Sign-In inclus

• Compte Google valide

• Aucune carte de crédit ni aucun compte de facturation requis

• Déploiement limité à une seule région

Niveau sans frais standard de Google Cloud (compte standard)

• Cloud Run : 2 millions de requêtes/mois, 180 000 vCPU-secondes/mois, 360 000 Gio-secondes/mois, 1 Go de sortie réseau/mois en Amérique du Nord

• Accès à un crédit de bienvenue de 300 $ pendant les 90 premiers jours



• Compte de facturation Cloud associé

• Accès complet aux API de la plate-forme dans toutes les régions

Type de niveau

Allocation de puissance de calcul et de ressources

Exigences/Limites

Google Cloud niveau Starter (prototypage)

• Cloud Run : jusqu'à deux applications Web actives

• Cloud Firestore : 1 Gio de stockage, 50 000 lectures/jour, 40 000 écritures/jour

• Cloud SQL : édition PostgreSQL pour les développeurs (scaling à zéro instance)

• Firebase Auth : Google Sign-In inclus

• Compte Google valide

• Aucune carte de crédit ni aucun compte de facturation requis

• Déploiement limité à une seule région

Niveau sans frais standard de Google Cloud (compte standard)

• Cloud Run : 2 millions de requêtes/mois, 180 000 vCPU-secondes/mois, 360 000 Gio-secondes/mois, 1 Go de sortie réseau/mois en Amérique du Nord

• Accès à un crédit de bienvenue de 300 $ pendant les 90 premiers jours



• Compte de facturation Cloud associé

• Accès complet aux API de la plate-forme dans toutes les régions

Relevez vos plus grands défis avec Google Cloud

Les nouveaux clients bénéficient de 300 $ de crédits à dépenser sur Google Cloud.
Contactez un spécialiste des ventes Google Cloud pour discuter plus en détail de votre problématique.

Bonnes pratiques pour exécuter Node.js dans des environnements sans serveur

  1. Optimisez les démarrages à froid en allégeant les dépendances : supprimez les packages de développement inutilisés (npm prune --production) et regroupez le code du serveur à l'aide d'outils modernes d'élimination de code mort dans les modules (comme esbuild ou tsup) afin de réduire la taille des images et d'accélérer l'initialisation des conteneurs.
  2. Configurez le nombre maximal d'instances : lorsque vous passez d'un bac à sable à un projet de production actif, définissez un seuil de simultanéité et --max-instances (par exemple, --max-instances 5) pour vous assurer que les pics de trafic inattendus ne dépassent pas les budgets d'exploitation cibles.
  3. Conservez des journaux structurés : envoyez les journaux vers stdout et stderr au format JSON structuré. Les systèmes de journalisation gérés analysent automatiquement les objets JSON, ce qui vous permet de filtrer les journaux par code d'état HTTP, niveau de gravité et latence d'exécution.
  4. Utilisez des vérifications d'état natives : implémentez des vérifications claires des points de terminaison HTTP (par exemple, /healthz) qui vérifient la connectivité à la base de données en aval avant d'indiquer aux proxys de routage entrants que l'instance est apte à recevoir du trafic.

Passez à l'étape suivante

Commencez à créer des applications sur Google Cloud avec 300 $ de crédits inclus et plus de 20 produits toujours sans frais.

  • Produits Google Cloud
  • Parcourez plus de 100 produits. Les nouveaux clients bénéficient de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail. Tous les clients peuvent utiliser plus de 25 produits gratuitement, dans les limites mensuelles spécifiées.
Google Cloud