Comment déployer une application Express.js ?

How to Deploy a ExpressJS Application_
How to Deploy a ExpressJS Application_

Le choix de la bonne option de déploiement est essentiel pour s’assurer que votre application peut facilement évoluer au fur et à mesure de sa croissance. Cet article explore les différentes options de déploiement disponibles pour les applications Express.js. Plus précisément, il se concentre sur la manière de déployer des applications Express.js dans un conteneur Back4app.

Qu’est-ce qu’Express.js ?

Express est un framework léger et ouvert, construit au-dessus de Node.js, qui simplifie le processus de construction d’API web et mobiles complexes.

Il offre un système de routage simple qui vous permet de définir facilement des points d’extrémité pour les itinéraires API et de les associer à des fonctions de traitement.

Il dispose également d’un logiciel intermédiaire qui vous permet d’ajouter des fonctionnalités telles que la journalisation, l’authentification et la gestion des erreurs dans le cycle demande-réponse.

Avantages de l’utilisation d’Express.js

Voici quelques-uns des avantages de l’utilisation d’Express :

  • Minimaliste et simple à utiliser : Express.js fait abstraction de la complexité de certaines fonctionnalités de Node.js, comme le routage. Il fournit un moyen simple de gérer les demandes et les réponses de l’API.
  • Hautement extensible : Express.js dispose d’une large communauté qui se traduit par un écosystème étendu de paquets NPM et d’extensions que vous pouvez facilement intégrer dans vos applications.
  • Très performant : grâce à sa conception minimale et à l’exploitation de l’architecture non bloquante et événementielle de Node, Express est très performant.
  • Un soutien solide de la part de la communauté : Express.js existe depuis 2010. Depuis, de nombreux développeurs l’ont adopté. Il y a donc une grande communauté qui se construit autour d’Express et qui peut vous aider si vous êtes bloqué. De plus, il existe de nombreux articles, tutoriels et documents bien rédigés qui expliquent le fonctionnement d’Express.

Inconvénients d’Express.js

Voici quelques-uns des inconvénients d’Express.js :

  • Sans opinion : Comparé à des frameworks comme Nest.js, Express.js a peu d’opinions. Ce manque d’opinion signifie que vous devez prendre des décisions sur la structure et l’organisation du projet, ce qui peut être fastidieux, en particulier lorsque vous avez plusieurs façons de faire les choses.
  • Manque de fonctionnalités intégrées : Express.js n’est pas préconfiguré et pour la plupart des fonctionnalités avancées comme la journalisation, vous devez installer des dépendances supplémentaires.

Options de déploiement d’Express.js

Infrastructure en tant que service (IaaS)

L’infrastructure en tant que service est un service d’informatique en nuage qui offre des ressources informatiques, de réseau et de stockage sur Internet à la demande.

Avec l’IaaS, vous êtes responsable de l’approvisionnement et de la configuration des ressources pour votre application, tandis que le fournisseur IaaS s’occupe de l’infrastructure physique sous-jacente. Par exemple, si vous souhaitez déployer une application Express, vous pouvez créer et configurer une machine virtuelle sur le fournisseur IaaS de votre choix.

Sur la VM, vous devez installer les dépendances nécessaires telles que Node et npm, puis ajouter le code Express à la VM. Vous pouvez ensuite démarrer votre application Express sur la VM et elle sera accessible sur internet.

L’un des principaux avantages de l’IaaS est le niveau de contrôle qu’il offre. Vous pouvez personnaliser l’unité centrale, la mémoire et les ressources de stockage de la VM en fonction des besoins de votre application

Cependant, il est important de prendre en compte les inconvénients de cette approche.

La gestion de l’infrastructure et des ressources au fur et à mesure que vos applications évoluent et que la demande change peut s’avérer complexe et chronophage.

Parmi les fournisseurs IaaS les plus populaires, on peut citer

  • Microsoft Azure
  • Amazon Web Services (AWS)
  • Google Cloud Platform (GCP)

Conteneur en tant que service (CaaS)

Container as a Service (CaaS) est un module de service en nuage qui fait abstraction de l’infrastructure sous-jacente, ce qui vous permet de déployer et d’exécuter rapidement des applications conteneurisées.

Pour déployer l’application Express auprès d’un fournisseur CaaS, vous compilez le code, les dépendances et le moteur d’exécution nécessaires à l’exécution de l’application dans un conteneur à l’aide d’un outil de conteneurisation tel que Docker. Une fois le conteneur créé, vous le déployez. Le fournisseur de CaaS fournit et gère l’infrastructure nécessaire à l’exécution du conteneur pour vous.

Le principal avantage de l’utilisation de CaaS est que le haut niveau d’abstraction simplifie le déploiement puisque vous n’avez pas à vous soucier de la configuration de l’infrastructure de bas niveau. Vous pouvez vous concentrer sur la construction de la logique de l’application. En outre, la conteneurisation garantit que votre application fonctionne de manière cohérente dans plusieurs environnements.

Parmi les fournisseurs de CaaS les plus populaires, on peut citer

  • Back4app Containers
  • Amazon Elastic Container Service (ECS)
  • Google Kubernetes Engine (GKE)

Comment déployer une application Express dans un conteneur Back4app ?

Conditions préalables

Pour suivre ce tutoriel, assurez-vous d’avoir les éléments suivants :

  • Node.js est installé sur votre machine.
  • Un compte GitHub.
  • Docker est installé sur votre machine. Si ce n’est pas le cas, visitez le site de Docker et installez Docker desktop.
  • Connaissance pratique d’Express.js.

Aperçu des conteneurs Back4app

Back4app containers est une plateforme qui automatise le déploiement en gérant pour vous l’infrastructure côté serveur.

Voici quelques-unes des caractéristiques des conteneurs Back4app :

  • Intégration GitHub : Vous pouvez connecter vos dépôts GitHub à Back4app, ce qui permet des déploiements automatiques de votre application lorsque la base de code change.
  • Déploiement Docker : Vous pouvez utiliser Docker, un outil de conteneurisation populaire, pour emballer le code de votre application dans un conteneur. Cela garantit que votre application fonctionne de manière prévisible dans tous les environnements.
  • Déploiements automatiques : Une fois que vous avez connecté le dépôt GitHub à Back4app, chaque poussée de code vers la branche par défaut déclenchera le déploiement.
  • Suivi des déploiements en temps réel : Vous pouvez visualiser l’état et la progression de vos déploiements.
  • Surveillance des applications en temps réel
  • Mises à jour sans interruption de service

Introduction du projet

Dans ce guide, nous allons parcourir le processus de déploiement d’une application Express sur Back4app. Nous allons d’abord créer une API REST Express simple avec un seul point d’extrémité, la dockeriser en utilisant Docker puis la pousser sur GitHub. Nous allons ensuite la déployer dans un conteneur Back4app.

Créer une API Express simple

Suivez les étapes ci-dessous pour créer une demande Express :

  1. Exécutez la commande suivante dans votre terminal pour initialiser un nouveau projet Node.js.
npm init

Cette commande vous demandera d’entrer les détails de votre application comme le nom du paquet, la version, la description, le point d’entrée, l’auteur et la licence. Une fois que vous aurez répondu, un fichier package.json sera créé avec ces configurations.

Pour utiliser les configurations par défaut, utilisez l’option -y comme indiqué ci-dessous :

npm init -y
  • Installez Express en tant que dépendance en exécutant cette commande.
npm install express
  • À la racine du dossier de votre projet, créez un fichier index.js. Si vous avez spécifié un autre nom pour votre fichier d’entrée, utilisez-le.
  • Ouvrez le fichier index.js et créez une instance de l’application Express.
const express = require('express');
const app = express();
  • Ajouter un gestionnaire de route pour traiter les requêtes GET vers le point d’arrivée “/”.
app.get("/", (req, res) => {
  res.json({
    message: "Success",
  });
});

Ce point d’accès envoie un message JSON en guise de réponse.

  • Définir le numéro de port et écouter les demandes entrantes sur le port spécifié.
const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`App listening at <http://localhost>:${port}`);
});

Notez que process.env.PORT fait référence à une variable d’environnement nommée PORT. Si cette valeur n’est pas définie dans le fichier .env, l’application utilisera la valeur 3000.

  • Exécutez la commande suivante pour démarrer le serveur Express.
node index.js

Si vous visitez http://localhost:3000/api sur votre navigateur, vous devriez recevoir la réponse suivante.

{
  "message": "Success!"
}

Il s’agit d’un exemple très basique d’API Express. Une application réelle serait plus complexe, avec davantage de points d’extrémité, de données externes, d’intergiciels, etc.

Pour les besoins de cet article, cela suffit à démontrer comment vous pouvez déployer une application Express dockerisée.

Dockeriser l’application Express

Dockeriser une application Express.js consiste à créer un conteneur Docker pour faciliter l’exécution de l’application dans différents environnements.

Qu’est-ce que Docker ?

Docker est un outil open-source qui vous permet d’empaqueter votre application, son moteur d’exécution, ses bibliothèques et ses dépendances dans un environnement de conteneur isolé et portable.

En encapsulant l’application dans ce conteneur, Docker fournit un environnement cohérent pour l’exécution de l’application, quel que soit le système hôte sous-jacent.

Cela élimine le problème du “ça marche sur ma machine”. Vous pouvez travailler sur votre application Express dans votre environnement local, la conteneuriser et la déployer dans plusieurs environnements sans vous soucier des problèmes de compatibilité.

Installer Docker

Docker peut fonctionner sur plusieurs plateformes, notamment macOS, Windows et Linux. Vous pouvez télécharger et installer Docker pour votre système d’exploitation à partir du site officiel.

Comment Dockeriser une application Express.js

Une fois que vous avez installé Docker, vous devez dockeriser votre application, c’est-à-dire l’empaqueter dans un conteneur Docker.

Suivez les étapes ci-dessous :

  • À la racine de votre projet, créez un fichier nommé Dockerfile. Ce fichier contient les instructions pour construire l’image Docker pour l’application Express.
  • Habituellement, lors de la création du fichier Docker, la première chose à faire est de spécifier une image de base. Une image de base est une image préconstruite qui sert de point de départ à l’image de votre application et contient généralement des instructions minimales pour l’exécution de l’application.
  • Dans le fichier Docker, vous pouvez ensuite fournir des instructions et des configurations qui s’exécuteront au-dessus de cette image. Vous pouvez créer votre propre image de base personnalisée, mais Docker propose des images officielles qui suffisent dans la plupart des cas.
  • Dans ce guide, nous utiliserons l’image de base de node, en particulier la variante alpine qui est de petite taille. Spécifions cette image de base dans le fichier Docker en ajoutant ce qui suit.
FROM node:20-alpine

Ici, node:20-alpine est préinstallé avec la version 20 de Node.js.

  • Ajoutez la ligne suivante pour définir le répertoire de travail à l’intérieur du conteneur.
WORKDIR /usr/src/app
  • Copiez package.json et package-lock.json dans le répertoire de travail. Ils listent toutes les dépendances que Docker doit installer.
# A wildcard ensures package.json AND package-lock.json are copied
COPY package*.json ./
  • Ajouter la commande d’installation des dépendances.
RUN npm install
  • Copiez le reste du code dans le répertoire de travail du conteneur.
COPY . .
  • Indiquez le numéro de port sur lequel l’application Express est à l’écoute. Dans ce cas, il s’agit du port 3000.
expose 3000
  • Ajouter la commande de démarrage de l’application.
CMD["node", "index.js"]

Au total, votre fichier DockerFile devrait ressembler à ceci :

FROM node:20-alpine

WORKDIR /usr/src/app

COPY package*.json  ./

RUN npm install

COPY . .

EXPOSE 3000

CMD [ "node", "index.js" ]

Ajouter un fichier .dockerignore

Un fichier .dockerignore spécifie les fichiers que Docker doit ignorer. Il vous aide à réduire la taille de l’image Docker en vous permettant d’ignorer les fichiers inutiles. Il permet également de masquer les fichiers sensibles de l’image.

Pour l’ajouter à votre projet, créez un fichier à la base de votre projet et nommez-le.dockerignore. Ajoutez-y le contenu suivant.

.git
.gitignore
.env
README.md
Dockerfile
node_modules/
.github
.vscode
npm-debug.log
npm-debug.log.*

Le fichier ci-dessus empêche les fichiers git, les modules node, les logs et les variables env d’être copiés dans l’image Docker.

Construire l’image Docker localement

Dans le répertoire de votre projet, exécutez la commande suivante pour construire l’image Docker.

docker build -t docker-express-api .

Le drapeau -t signifie tag et vous permet de donner un nom significatif à l’image Docker. Le point (.) à la fin indique à Docker de rechercher le fichier Docker dans le répertoire courant et d’exécuter les instructions qu’il contient.

Exécuter l’image Docker localement

Une fois l’image Docker créée, utilisez-la pour exécuter l’application Express à l’aide de la commande suivante :

docker run -p 3000:3000 docker-express-api

Ici -p 3000:3000 fait correspondre le port 3000 de l’hôte local au port 3000 du conteneur. Vous devriez pouvoir accéder à l’application en visitant http://localhost:3000 dans le navigateur.

Pour afficher l’instance Docker en cours d’exécution, utilisez la commande suivante :

docker ps

Pour arrêter l’instance, exécutez :

docker stop docker-express-api

Déploiement d’une application Express Dockerisée dans un conteneur Back4app

Maintenant que nous nous sommes assurés que l’image Docker fonctionne localement, nous devons la déployer sur Back4app.

Pousser l’application Express vers GitHub

Backapp déploie votre application depuis GitHub. Vous devez donc pousser le dépôt de l’application sur GitHub en suivant les étapes ci-dessous :

  • Rendez-vous sur le site GitHub et connectez-vous à votre compte.
  • Après vous être connecté, localisez l’icône “+” dans le coin supérieur droit de la page et cliquez dessus. Dans le menu déroulant, sélectionnez “Nouveau dépôt”.
  • Sur la page “Create a new repository”, donnez un nom à votre dépôt. Pour ce guide, nous utiliserons “express-api”. Cliquez sur le bouton “Create repository name”. Souvenez-vous de l’URL du dépôt sur la page suivante car vous en aurez besoin pour pousser le dépôt local vers GitHub.

Sur votre machine locale, naviguez jusqu’au dossier de votre projet et exécutez la commande suivante pour pousser l’application vers le dépôt distant sur GitHub.

git remote add origin <https://github.com/remigathoni/express-api.git>
git branch -M main
git push -u origin main

Vous devriez être en mesure de voir les fichiers de votre application dans le dépôt GitHub.

Déployer l’application Express

Suivez les étapes ci-dessous pour déployer l’application sur Back4app :

  • Rendez-vous sur le site de Back4app et ouvrez un compte. Si vous avez déjà un compte, connectez-vous. Back4app vous redirigera vers le tableau de bord après authentification.
  • Sur le tableau de bord, cliquez sur le bouton Build a new app. Deux options s’offrent à vous : Backend as a Service et Container as a Service. BaaS s’occupe du backend en votre nom tandis que CaaS vous permet de déployer votre application dans un environnement conteneurisé. Étant donné que nous voulons seulement déployer l’application, cliquez sur Conteneurs en tant que service.
Créer un nouveau conteneur en tant qu'application de service
  • A l’invite, accordez à Back4app l’accès à votre compte GitHub et sélectionnez le dépôt Express.
Sélectionner l'application Express dockerisée
  • Donnez un nom à votre application déployée. Dans ce guide, nous utilisons “Deployed Express API”. Vous pouvez également définir des options de déploiement supplémentaires telles que la branche par défaut, le répertoire racine, l’état de déploiement automatique (oui ou non) et les variables d’environnement.
Déployer l'application Express.js sur
  • Cliquez sur le bouton Créer une application pour finaliser le processus de déploiement.

Vous avez maintenant déployé votre application Express sur Back4app gratuitement.

Comment optimiser l’image Docker

Il est essentiel d’optimiser la taille de votre image Docker pour les raisons suivantes :

  • Amélioration des performances : Une petite image ne comprend pas de couches inutiles qui doivent être exécutées. Les temps de démarrage sont donc plus rapides.
  • Déploiement plus rapide : Les images plus petites se déploient plus rapidement.
  • Consommation de ressources réduite : Les images plus petites consomment moins d’espace disque et de mémoire lors de leur exécution.
  • Sécurité renforcée : En excluant les bibliothèques et dépendances inutiles, les images plus petites réduisent la surface d’attaque de l’application.

Pour optimiser l’image Docker Express.js, nous pouvons utiliser une construction en plusieurs étapes.

Les constructions en plusieurs étapes vous permettent de séparer l’environnement de construction de l’environnement d’exécution. Vous pouvez construire l’application dans la phase de construction, puis copier uniquement les fichiers nécessaires dans la phase de production finale.

Pour revenir à l’application Express, nous pouvons définir deux étapes – l’étape de construction où nous installerons les dépendances et la page de production où nous créerons l’image d’exécution.

Création de la phase de construction

Suivez les instructions ci-dessous pour définir la phase de construction :

  • Supprimer tout le contenu du fichier Docker et définir l’étape de construction à partir de l’image de base.
FROM node:20-alpine AS build

Une étape est nommée en ajoutant AS nom de l'étape à l’instruction FROM. Notez également que les images des bases alpines sont beaucoup plus petites que les images des nœuds :.

  • Définir le répertoire de travail.
WORKDIR /usr/src/app
  • Copiez les fichiers package.json et package-lock.json dans le conteneur.
COPY package*.json ./
  • Installer les dépendances de développement.
RUN npm install --only=development
  • Copier le code de l’application dans l’étape de construction.
COPY . .
  • Exécuter l’application.
CMD ["node", "index.js"]

La commande que vous exécutez ici dépend de votre projet. Par exemple, si vous avez utilisé TypeScript pour créer votre application, vous devrez peut-être la transpiler.

Création de la phase de production

Dans la deuxième étape, vous ne copierez que les fichiers de l’application construite à partir de l’étape de construction. Suivez les étapes ci-dessous :

  • Ajoutez l’image de base Node.js et nommez-la production.
# Production Stage
FROM node:20-alpine AS production
  • Définir le répertoire de travail.
WORKDIR /usr/src/app
  • Copiez les fichiers nécessaires depuis la “Build Stage” en spécifiant --from=build dans l’instruction COPY. Comme il n’y a pas de commande de construction, nous copions tout directement.
COPY --from=build /usr/src/app .
  • Exposez le port sur lequel votre application Express écoute.
EXPOSE 3000
  • Lancez l’application Express.
CMD ["node", "index.js"]

Après avoir créé le fichier Docker, poussez vos changements sur GitHub et Back4app redéploiera automatiquement votre application.

Si vous souhaitez voir le code de cet article, consultez le dépôt GitHub de l’application.

Conclusion

Express.js est un framework Node.js léger et autonome. Il aide les développeurs à créer des API minimales et rapides pour les applications web et mobiles.

Lorsqu’il s’agit de déployer des applications Express, plusieurs options s’offrent à vous, notamment les plateformes Infrastructure as a Service (IaaS) et Container as a Service (CaaS).

Les plateformes IaaS conviennent mieux lorsque l’on souhaite exercer un contrôle maximal sur l’infrastructure serveur sous-jacente, tandis que CaaS est un bon choix lorsque l’on souhaite passer rapidement du développement à la production sans avoir à gérer manuellement l’infrastructure.

L’un des meilleurs fournisseurs de CaaS est Back4app containers. Back4app gère et surveille le déploiement de l’application en votre nom, ce qui vous permet de vous concentrer sur la création des fonctionnalités de l’application.

Dans ce guide, vous avez appris à dockeriser une application Express.js et à la déployer dans un conteneur Back4app. Pour en savoir plus, consultez la documentation sur les conteneurs Back4app.

FAQ

Qu’est-ce que Express.js ?

Express est un framework léger et non opiniâtre basé sur Node.js qui simplifie le processus de création d’APIs web et mobiles complexes.

Quelles sont les options de déploiement pour les applications Express.js ?

– IaaS (AWS, GCP, Azure)
– CaaS (Back4app Containers, AWS ECS, Google Kubernetes Engine (GKE))

Comment déployer une application Express.js dans un conteneur Back4app ?

Créez une application Express.js.
Dockerisez l’application Express.js.
Poussez l’application dockerisée sur GitHub.
Créez un compte Back4app.
Créez un conteneur Back4app.
Donnez à Back4app l’accès à votre GitHub.
Sélectionnez le dépôt Express.js et déployez votre application.


Leave a reply

Your email address will not be published.