googleapp-enginenode

Déployer vos applications Node sur Google App Engine

Comment déployer vos applications Node sur la plateforme Google App Engine.

Dans cet article, je vais vous expliquer comment déployer une application back node.js sur une instance Google App Engine.

1 - Build votre application

Si vous développez en JavaScript directement, vous pouvez passer directement à l’étape 2.

Si vous utilisez un langage de typage tel que du typescript, vous devez indiquer au système de déploiement automatique d’app engine ce qu’il doit faire avant de commencer le déploiement.

Pour se faire, c’est simple, il faut ajouter dans le package.json un script gcp-build contenant la commande de build de votre script :

{
    ...
    "scripts": {
        "gcp-build": "tsc -p ./tsconfig.build.json" // <<-- ICI
    }
}

2 - Lancement de l’application

Maintenant que vous avez du code JavaScript à exécuter, il faut indiquer à app engine la commande qu’il doit faire pour exécuter votre code.

Il vous suffit d’ajouter dans le package.json un script start contenant la commande d’exécution de votre app :

{
    ...
    "scripts": {
        "start": "node dist/index.js" // <<-- ICI
    }
}

3 - Installation des dépendances

En ce qui concerne l’installation des dépendances, il vous suffit de procéder de manière normale et de mettre dans le package.json toutes les librairies qui sont nécessaires en production dans dependencies.

{
    ...
    "dependencies": {
        "express": "^4.17.1", // <<-- ICI
        ...
    }
}

Pensez bien à retirer les dépendances qui ne sont pas nécessaires en production afin d’alléger le déploiement.

Vous pouvez aussi bien utiliser npm comme yarn pour l’installation de vos dépendances, car app engine va automatiquement le détecter en fonction du package.lock ou du yarn.lock

4 - Préparation du déploiement

Maintenant que tout est prêt pour le déploiement dans Google, nous allons dans un premier temps déployer en local avec le client gcloud.

Mais afin de garder bonne maitrise du déploiement en continu, il sera préférable de le faire dans une CI afin de pouvoir effectuer des tests en amont (nous préparons un article pour expliquer comment faire).

4.1 - Création du fichier de configuration app.yaml app engine

La chose la plus importante est de créer un fichier de configuration (app.yaml) principal de votre application à la racine du code à déployer.

Voici à quoi il ressemble :

runtime: nodejs16
service: default
instance_class: F1

automatic_scaling:
  target_cpu_utilization: 0.8
  target_throughput_utilization: 0.8
  max_concurrent_requests: 80

includes:
  - env_variables.yaml

handlers:
  - url: /.*
    secure: always
    redirect_http_response_code: 301
    script: auto
  • runtime: nodejs16 indique quelle version de node vous souhaitez utiliser en production, ici il s’agit de la version 16
  • service: default Indique le nom du service. Un service correspond à une instance que vous souhaitez déployer, par exemple : backend, frontend, admin… Il est important de savoir que vous devez nommer au moins un de vos services défaut.
  • instance_class: F1 Il s’agit du type d’instance que vous souhaitez sélectionner. Il en existe plusieurs et ils définissent la puissance de la machine que vous souhaitez utiliser. Nous préparons un article qui explique comment choisir l’instance avec les optimisations de couts.
  • automatic_scaling Cela définit comment doit agir votre scaling automatique, à partir de quel moment, une nouvelle instance est générée afin de mieux gérer le trafic. Pareil, un article est en cours de création sur le sujet.

    includes:
    - env_variables.yaml

    Cela permet d’inclure un ou plusieurs fichiers externes comme les variables d’environnement afin de les cacher.

  • handlers contiens les différentes règles du routeur et ici la seule règle qu’on a c’est le fait de rediriger toutes les routes HTTP vers du HTTPS.

4.2 - Gestion des variables d’environnement

Pour les variables d’environnement, vous pouvez créer un fichier env_variables.yaml qui doit ressembler à celui-là :

env_variables:
  DB_USERNAME: 'postgres'
  DB_PASSWORD: 'password'
  DB_DATABASE: 'postgres'

Il doit commencer par env_variables et ensuite vous pouvez mettre les clés valeurs de vos variables d’environnement

N’oubliez pas de mettre le code suivant dans votre fichier app.yaml :

includes:
  - env_variables.yaml

4.3 - Création du projet dans app engine

Suivez les instructions de la documentation suivante : https://cloud.google.com/appengine/docs/standard/nodejs/console#console

4.4 - Installez le client gcloud en local

Suivez les instructions de la documentation suivante : https://cloud.google.com/sdk/docs/install

4.4 - Configuration du .gcloudignore

Ensuite avant de déployer, vous devez créer un fichier .gcloudignore à la racine du projet qui contient les fichiers que vous ne souhaitez pas déployer un peu comme dans le gitignore

.gcloudignore
.git
.gitignore
.env

# Node.js dependencies:
node_modules/
tests/
dist/

4.5 - Déploiement

Afin de déployer votre projet vous devez dans un premier temps, activer l’API APP ENGINE ici : https://console.cloud.google.com/apis/library/appengine.googleapis.com

Ensuite, lancez la commande : gcloud app deploy

Voilà vous n’avez plus qu’a suivre les instructions de déploiement pour déployer l’application.

Conclusion

Voilà, vous savez comment déployer votre application node sur Google App Engine !