$ sudo apt update && sudo apt install npm $ npm install socket.io socket.io-client express --save. // Attention, il ne faut pas être dans le dossier / # Express --> is a minimal and flexible Node.js web application framework that provides a robust set of features for web and mobile applications. # Socket.IO --> enables real-time bidirectional event-based communication between a client and a server. # --save --> ajout des dépendances dans le fichier '~/package.json'. Note: Plus requis depuis npm 5
{
"dependencies": {
"express": "^4.18.2",
"socket.io": "^4.6.0",
"socket.io-client": "^4.6.0"
},
"scripts": {
"start": "node serveur.js"
}
}
// Fichier: serveur.js
// Auteur: Alain Boudreault
// Date: 2023.02.07
// ----------------------------------------------------------------------------
// Description: Petit serveur web en node.js qui sera utilisé pour construire
// une image Docker perso.
// ----------------------------------------------------------------------------
var http = require('http'); // Importation d'un module des plus important! ;-)
let PORT = 8080;
let AUTEUR = "Alain Boudreault";
var server = http.createServer(function (req, res) { //Création d'un serveur Web
if (req.url == '/') { //Vérification de l'URL
// Renseigner le 'header'
res.writeHead(200, { 'Content-Type': 'text/html' });
// Renseigner le contenu de la réponse
res.write('<html><head><meta charset=\"UTF-8\"></head><body><p>Cette page est complètement dénuée d\'information pertinente ...</p>');
}
else if (req.url == "/etudiant") {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.write('<html><head><meta charset=\'UTF-8\'></head><body><p>Voici les réponses à l\'examen: ...</p></body></html>');
}
else if (req.url == "/api") {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.write(JSON.stringify({ version_api: "1.01", citation: "Ici la voix des mistérons"}));
// res.write('{"version_api":"1.0"}');
}
else {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.write('<html><head><meta charset=\"UTF-8\"></head><body><hr/><center><h1 style="color:red">NON, pas une erreur 404, tu fais dur!!!</h1></center><hr/>');
res.write('<h2 style="color:blue">Requête = ' + req.url + '</h2>');
}
res.end(); // Fermer la requête
});
server.listen(PORT); //Écoutons ce que les clients ont à demander ...
console.log('Exemple par ' + AUTEUR);
console.log('----------------------------------');
console.log('Mon petit serveur web Node.js vous écoute sur le port ' + PORT + ' ... cé pas ti fin ca!');
$ npm start & # Tester l'application: $ curl localhost:8080 $ curl localhost:8080/api ...
# À partir de l'image de base: FROM node:alpine #Installer les dépendances npm # NOTE: Il ne faut pas être la racine sinon l'opération va échouer! WORKDIR /usr/app COPY ./ /usr/app RUN npm install # Exposer le port IP du serveur Web.js EXPOSE 8080 # Renseigner la commande de départ CMD [ "npm","start" ]
$ docker build -t notre_serveur_web .
$ docker run -d --rm -it --name yo -p 80:8080 notre_serveur_web


// Fichier: serveur02.js
// Auteur: Alain Boudreault
// Date: 2023.02.09
// ----------------------------------------------------------------------------
// Description: Petit serveur web en node.js qui sera utilisé pour construire
// une image Docker perso.
// Note: Utilisation du module Express.js
// ----------------------------------------------------------------------------
var express = require('express');
var app = express();
let PORT = 8080;
let AUTEUR = "Alain Boudreault";
app.get('/', function (req, res) {
res.send(`
<html><body>Ceci est un requête de type: GET<hr/>
<h1>Bonjour 420-4D4</h1></body></html>
`);
});
app.get('/api', function (req, res) {
res.send("<html><body>Requête sur l'API maison<hr/>" +
JSON.stringify({ version_api: "1.01", citation: "Ici la voix des mistérons"}) +
"</body></html>"
);
});
app.post('/submit-data', function (req, res) {
res.send('Ceci est un requête de type: POST');
});
app.put('/update-data', function (req, res) {
res.send('Ceci est un requête de type: PUT');
});
app.delete('/delete-data', function (req, res) {
res.send('Ceci est un requête de type: DELETE');
});
// Traiter une route non définie:
app.use((req, res, next) => {
res.status(404).send(`<html>
<head><meta charset=\"UTF-8\"></head>
<body><hr/><center>
<h1 style="color:red">NON, pas une erreur 404, tu fais dur!!!</h1>
</center><hr/>` +
'<h2 style="color:blue">Requête = ' + req.url + '</h2></body></html>'
);
});
// Afficher un message sur la console
// Note: Via Docker, il est possible d'afficher les messages de la console avec l'option logs:
// $ docker logs id_CONTENEUR
var server = app.listen(PORT, function () {
console.log('Exemple par ' + AUTEUR);
console.log('----------------------------------');
console.log('Mon petit serveur web Node.js vous écoute sur le port ' + PORT + ' ... cé pas ti fin ca!');
});
# Specify a base image
FROM node:alpine
#Définir un argument à utiliser avec docker build --build-arg numero_port=
#Par exemple,
# docker build -f Dockerfile.srv03 -t web_express --build-arg numero_port=99 .
ARG numero_port
#Définir une variable d'environnement qui sera disponible dans le conteneur
#Pour la lire en node.js: const PORT = parseInt(process.env.PORT) || 8080;
ENV PORT=$numero_port
# Ou: ENV PORT=${numero_port}
WORKDIR /usr/app
COPY ./ /usr/app
RUN npm install
EXPOSE $numero_port
CMD [ "npm","start" ]
// Fichier: serveur02.js
// Auteur: Alain Boudreault
// Date: 2023.02.09
// ----------------------------------------------------------------------------
// Description: Utilisation d'une variable d'environnement pour le port TCP
// ----------------------------------------------------------------------------
var express = require('express');
var app = express();
const PORT = parseInt(process.env.PORT) || 8080;
const AUTEUR = "Alain Boudreault";
app.get('/', function (req, res) {
res.send("</body></html><h1>Le serveur écoute sur le port: " + PORT + "</h1></body></html>");
});
// Afficher un message sur la console
// Note: Via Docker, il est possible d'afficher les messages de la console avec l'option logs:
// $ docker logs id_CONTENEUR
var server = app.listen(PORT, function () {
console.log('Exemple par ' + AUTEUR);
console.log('----------------------------------');
console.log('Mon petit serveur web Node.js vous écoute sur le port ' + PORT + ' ... cé pas ti fin ca!');
console.log("parseInt(process.env.PORT) = " + parseInt(process.env.PORT));
});
{
"dependencies": {
"express": "^4.18.2",
"socket.io": "^4.6.0",
"socket.io-client": "^4.6.0"
},
"scripts": {
"start": "node serveur03.js"
}
}
Référence pour la syntaxe Dockerfile