Skip to main content

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

 

  • `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.

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 !