Kaherecode

(1-5) From simple nodeJs app to the cloud. NodeJs Application

Salut à toutes et tous, dans ce tutoriel, je vais vous expliquer comment déployer une application NODEJS on prém(localement) et sur le cloud.

Si comme moi, vous êtes impatients ou bien vous préférez apprendre directement à partir du code, il vous suffit d'examiner mon repository Github à l'adresse https://github.com/mombe090/cloudnative-nodeapp.

Alors, le choix de node est motivé par le fait que c'est du js donc, l'audience sera forcément plus grande que si c'était du java, python ou autre langage. Sinon peu importe le langage programmation choisi, le concept de déploiement restera le même.

Je tiens a préciser que ce tutoriel ne vas pas traiter les sujets forcément en profondeur, nous y reviendrons avec des séries de vidéos sur une chaîne Devscom dédiée sur YouTube. Vu le nombre d' outils (docker, compose, swarm, kubernetes, helm, ansible, githubActions, GCP) que nous aborderons dans ce tutoriel, j'ai décidé de les split en une série de 5.

N° 1 NodeJs Application

Prérequis :

Pour pouvoir suivre ce tutoriel, voici la liste des outils à installer.

Code source du projet #nodeJS :

Dans un premier temps, on vas initialiser le projet en douceur avec votre gestionnaire de dépendance favori YARN/NPM.

Rendez-vous dans le dossier de votre choix

$ mkdir simple-node-app
$ cd simple-node-app
$ yarn init ou npm init

répondez aux questions comme le montre figure ci-dessous.

deplacer dans un dossier et puis tapez npm init ou yarn init

Voyons le fichier package.json généré par la cli:

{
  "name": "simple-node-app",
  "version": "1.0.0",
  "description": "This is an aweasome nodejs app ready to be cloud native",
  "main": "app.js",
  "repository": "https://github.com/mombe090/cloudnative-nodeapp.git",
  "author": "Mamadou Yaya MOMBEYA DIALLO",
  "license": "MIT"
}

A présent, rajoutons les dépendances nodejs nous permettant de créer une API REST qui renvoie juste un simple json. Pour les curieux, fastify est un server web pour nodejs https://github.com/fastify/fastify

Sur votre console tapez:

$ yarn add fastify
# ou avec npm
$ npm i fastify --save

Créons un dossier src puis plaçons notre app.js dedans.

$ mkdir src
$ touch src/app.js

Image ajout de fastify

Sur le fichier package.json ajouter la partie script qui nous permet de lancer l'application nodeJs:

"scripts": {
  "start": "node src/app.js"
}

Le package.json finale se présente comme suit:

{
  "name": "simple-node-app",
  "version": "1.0.0",
  "description": "This is an aweasome nodejs app ready to be cloud native",
  "main": "app.js",
  "scripts": {
    "start": "node src/app.js"
  },
  "repository": "https://github.com/mombe090/cloudnative-nodeapp.git",
  "author": "Mamadou Yaya MOMBEYA DIALLO",
  "license": "MIT",
  "private": null,
  "dependencies": {
    "fastify": "^3.7.0"
  }
}

Copier le code ci-dessous dans src/app.js

//Importer fastify
const fastify = require('fastify')({
    logger: true
});

// Import Os pour pouvoir recuper le hostname qui nous seras utile par la suite.
const os = require("os");

// Creation du endpoint rest qui renvoie l'objet json ci-dessous
fastify.get('/', async (request, reply) => {
    reply.type('application/json').code(200);
    return {
        'name': 'Simple NodeJs App',
        'deploy_type': 'Cloud Native',
        'deploy_on': os.hostname(),
        'Author': 'mombe090'
    }
});

//Demarrer le serveur fastify.
fastify.listen(3000, (err, address) => {
    if (err) throw err
    fastify.log.info(`Server a bien demarrer sur l'adresse suivante ${address}`)
});

En fin, notre application est prête, on peut utiliser notre éditeur pour l'exécuter (sur la console tapez: yarn start ou npm start )

$ yarn start
# ou avec npm
$ npm start

Image recap (pinterest grand format)

Testons notre application, envoyer juste un GET au http://localhost:3000 avec n'importe quel client http ou navigateur web, ci-dessous nous utilisons https://httpie.io/

http localhost:3000

HTTP/1.1 200 OK
Connection: keep-alive
Date: Sun, 01 Nov 2020 01:31:25 GMT
content-length: 101
content-type: application/json; charset=utf-8

{
    "Author": "mombe090",
    "deploy_on": "MOMBE-MAC",
    "deploy_type": "Cloud Native",
    "name": "Simple NodeJs App"
}

Super notre application application est prête pour la phase suivante, la conteneurisation.

2. Suivant Containerization avec Docker


Merci à

Mamadou Yaya DIALLO

Continue de lire