DEV Community

Cover image for Déployer une application NodeJs sur App Engine
Alexandre Chambu for KADEA ACADEMY

Posted on

Déployer une application NodeJs sur App Engine

App Engine est l'un des produits que proposent Google dans la Google Cloud Platform. Il est placé dans la catégorie des services Serverless, du fait qu'il permet de déployer son application sans se soucier de tonne de configurations que l'on fait généralement pour déployer une application.

Je vous recommande de lire cet article avant de continuer, c'est une brève explication de Google Cloud Platform.

.

Il est important d’ajouter un compte de facturation pour pouvoir utiliser ce produit. Pour le faire, accédez au service Facturation, et suivez les instructions.
Service Facturation

Activer l’API App Engine et Créer une application

Ouvrez Google Cloud Platform Console, dans le panneau latéral entrez dans App Engine. Cliquez ensuite sur Activer l’API

Activer App Engine

Vous pourrez ensuite créer une nouvelle application App Engine dans la GCP Console.

Choisissez le langage à utiliser (Node.js pour JavaScript). L’environnement Standard est moins coûteux, votre application sera mise en veille (0 instance démarrée) en cas de non utilisation. L’environnement Flexible permet de booster les ressources pour les adapter au mieux à l’application, l’application n’est jamais mise en veille (au moins 1 instance en cours, même après plusieurs mois d’inactivité).

Langage utilisé

Notez qu'à ce niveau il n'y a pas de bouton Enregistrer. L'enregistrement se fera automatiquement lors du déploiement.
Par contre l'on nous propose d'installer le SDK gcloud, c'est la prochaine étape.

Installer SDK gcloud

Le SDK gcloud est une application en ligne de commande qui nous permet d'interagir avec Google Cloud Platform sans passer par la GCP Console (Interface Web). Elle est nécessaire pour déployer votre application Node.js avec App Engine.

Selon votre système, suivez la procédure indiquée ici (Install gcloud CLI).

Sur Ubuntu (version LTS) exécutez ces commandes:

sudo apt-get update

sudo apt-get install apt-transport-https ca-certificates gnupg curl sudo

echo "deb https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

sudo apt-get update && sudo apt-get install google-cloud-cli

Enter fullscreen mode Exit fullscreen mode

Ces commandes installent gcloud et les outils nécessaires à son fonctionnement.
Install gcloud

Configurer son déploiement

Pour déployer son application il faut indiquer à gcloud certains détails, notamment le compte Google à utiliser, le projet GCP relié à notre application, ….

Pour notre cas commençons par connecter le compte à gcloud

Connecter son compte à gcloud se fait aussi simplement qu'en une ligne de commande. Dans votre ligne de commande, executez

gcloud auth login
Enter fullscreen mode Exit fullscreen mode

Cette commande ouvre votre navigateur web, il suffit alors de choisir le compte que vous souhaitez connecter et d'accepter les autorisations demandées.

Ensuite connecter un projet GCP à gcloud.

L'étape suivante est d'indiquer à gcloud le projet Google Cloud que l'on va utiliser. Pour cela, executer la commande

gcloud config set projet PROJECT_ID
Enter fullscreen mode Exit fullscreen mode

Remplacer PROJECT_ID par l’identifiant de votre projet. Il peut être trouver dans la GCP Console. Sur l'image le projet Learning Cloud a comme PROJECT_ID learning-cloud-386212

Obtenir PROJECT_ID

Écrire le fichier app.yaml

Si vous n’avez pas encore d'application, vous pouvez cloner celle-ci sur github: https://github.com/lexnotor/gcloud-dev.git

Project Structure
App engine fournit le port sur lequel votre application peut être démarré, on y accède à partir de process.env.PORT.

App Engine aura besoin de quelques informations (le langage utilisé, …) pour démarrer votre application en ligne. Ces informations sont spécifiées dans un fichier app.yaml et ce fichier est placé à la racine du projet. Ajoutez-le à la racine de votre application.

Voici un exemple du contenue de ce fichier

runtime: nodejs18

# le nom du service, par defaut le nom est default
service: test-deploy

# nombre d'instance maximum
automatic_scaling:
    max_instances: 1

# indique à app engine de diriger tous les paths (URL) vers l'application
handlers:
    - url: /.*
      secure: always
      redirect_http_response_code: 301
      script: auto

# commande pour demarrer son application
entrypoint: "npm run start:prod"
Enter fullscreen mode Exit fullscreen mode

Dans cet exemple:

  • runtime: indique que l’on utilise la version 18 de Nodejs.
  • service: indique le nom que l’on souhaite donner à notre service
  • automatic_scaling: un objet qui indique les paramètres de scalabilité
    • max_instances: cette clé indique le nombre maximum d’instance qui seront créées, pour notre petite application une instance suffit.
  • handlers: un tableau d’objets qui indiquent comment app engine gère les requêtes
    • url: les paths d’url que la configuration gère. /.* = tous les paths
    • secure: configure l’utilisation de https et http. always = redirige toutes les requêtes vers https
    • redirect_http_response_code: le code de statut de la redirection
    • script: si auto alors les requêtes sont adressées à l’application
  • entrypoint: la commande que App engine exécutera pour lancer l’application. Notez que app engine exécute lui même npm build avant cette commande. Pour notre cas, c’est une application NestJs que nous allons déployer.

Déployer

La dernière étape est d'envoyer notre projet sur Google Cloud, encore là gcloud nous facilite grandement la tâche en une commande.

gcloud app deploy
Enter fullscreen mode Exit fullscreen mode

Cette commande envoi l'ensemble de vos code dans le cloud, et déploie l'application.

Pour voir le lien du déploiement, rendez-vous sur la GCP Console, dans le service App Engine.

Félicitations vous venez de déployer une application NodeJs sur Google Cloud Platform via App Engine. Notez qu'il ne s'agit pas de la seule façon de le faire.


Alexandre Chambu

Top comments (0)