Développement API - Pierre Blarre
Ces dernières années, les plateformes de déploiement se sont multipliées.
Il existe aujourd’hui de nombreux services qui permettent de déployer des applications Node.js, PHP, statiques, etc. en production, et gratuitement pour les petits projets.
Parmis les plus populaires, on peut citer :
- Vercel
- Netlify
- Heroku
- AWS (Amazon Web Services)
- Google Cloud
- Azure (Microsoft)
- Github Pages (pour les sites statiques)
Déploiement sur Vercel
Personnellement, j’utilise Vercel pour déployer mes applications Node.js car je le trouve assez simple et il est gratuit pour les petits projets.
Pour déployer une application sur Vercel, il vous faudra :
- Créer un compte sur Vercel
- Installer Vercel CLI
- Se connecter à Vercel depuis le terminal avec
vercel login
- Modifier le projet pour qu’il soit compatible avec Vercel
- Configurer le projet pour Vercel
- Tester le serveur local avec
vercel dev
- Déployer l’application avec
vercel
Modification du projet pour Vercel
Pour déployer une application sur Vercel, il faut modifier légèrement le projet pour qu’il soit compatible.
Vercel oblige le projet à contenir un dossier api
à la racine du projet, qui contiendra le serveur Node.js.
Pour cela, nous allons :
- Créer un dossier
api
à la racine du projet - Renommer le fichier
app.js
enindex.js
et le copier dans le dossierapi
- Modifier les chemins dans le fichier
index.js
pour qu’ils correspondent au nouveau chemin, notamment pour charger les fichiers de routes et de vues :
1var createError = require('http-errors');2var express = require('express');3var path = require('path');4var cookieParser = require('cookie-parser');5var logger = require('morgan');6
7var indexRouter = require('../routes/index');8var usersRouter = require('../routes/users');9var scoresRouter = require('../routes/scores');10
11var app = express();12
13// view engine setup14app.set('views', path.join(__dirname, '../views'));15app.set('view engine', 'pug');16
17app.use(logger('dev'));18app.use(express.json());19app.use(express.urlencoded({ extended: false }));20app.use(cookieParser());21app.use(express.static(path.join(__dirname, '../public')));22
23app.use('/', indexRouter);24app.use('/users', usersRouter);25app.use('/scores', scoresRouter);26
17 collapsed lines
27// catch 404 and forward to error handler28app.use(function(req, res, next) {29 next(createError(404));30});31
32// error handler33app.use(function(err, req, res, next) {34 // set locals, only providing error in development35 res.locals.message = err.message;36 res.locals.error = req.app.get('env') === 'development' ? err : {};37
38 // render the error page39 res.status(err.status || 500);40 res.render('error');41});42
43module.exports = app;
- Modifier le fichier
bin/www
pour qu’il charge le fichierapi/index.js
:
1#!/usr/bin/env node2
3/**4 * Module dependencies.5 */6
7var app = require('../api/index');8var debug = require('debug')('03-express:server');9var http = require('http');81 collapsed lines
10
11/**12 * Get port from environment and store in Express.13 */14
15var port = normalizePort(process.env.PORT || '3000');16app.set('port', port);17
18/**19 * Create HTTP server.20 */21
22var server = http.createServer(app);23
24/**25 * Listen on provided port, on all network interfaces.26 */27
28server.listen(port);29server.on('error', onError);30server.on('listening', onListening);31
32/**33 * Normalize a port into a number, string, or false.34 */35
36function normalizePort(val) {37 var port = parseInt(val, 10);38
39 if (isNaN(port)) {40 // named pipe41 return val;42 }43
44 if (port >= 0) {45 // port number46 return port;47 }48
49 return false;50}51
52/**53 * Event listener for HTTP server "error" event.54 */55
56function onError(error) {57 if (error.syscall !== 'listen') {58 throw error;59 }60
61 var bind = typeof port === 'string'62 ? 'Pipe ' + port63 : 'Port ' + port;64
65 // handle specific listen errors with friendly messages66 switch (error.code) {67 case 'EACCES':68 console.error(bind + ' requires elevated privileges');69 process.exit(1);70 break;71 case 'EADDRINUSE':72 console.error(bind + ' is already in use');73 process.exit(1);74 break;75 default:76 throw error;77 }78}79
80/**81 * Event listener for HTTP server "listening" event.82 */83
84function onListening() {85 var addr = server.address();86 var bind = typeof addr === 'string'87 ? 'pipe ' + addr88 : 'port ' + addr.port;89 debug('Listening on ' + bind);90}
Configuration de Vercel
Vercel utilise un fichier de configuration vercel.json
pour configurer le projet.
- Créez un fichier
vercel.json
à la racine de votre projet - Ajoutez le code suivant :
1{2 "version": 2,3 "buildCommand": "",4 "rewrites": [{ "source": "(.*)", "destination": "/api" }]5}
Cette configuration permet de rediriger toutes les requêtes http vers le dossier api
.
Tester le serveur local
Il est possible de répliquer l’environnement de production sur votre machine en utilisant Vercel CLI
pour tester le serveur local avant de le déployer en production.
Pour cela, installons globalement Vercel CLI
avec la commande suivante :
npm i -g vercel
Il faudra ensuite se connecter et s’identifier à votre compte Vercel en utilisant la commande :
vercel login
Enfin, pour lancer le serveur local, utilisez la commande :
vercel dev
Déploiement sur Vercel
Il existe plusieurs façons de déployer une application sur Vercel :
- En utilisant
Vercel CLI
- En connectant votre compte Github à Vercel
- En utilisant l’interface web de Vercel
Puisque nous avons déjà installé Vercel CLI
, nous allons utiliser cette méthode.
Pour déployer votre application sur Vercel, utilisez la commande suivante :
vercel
Cette commande va transférer votre application sur Vercel et vous donnera un lien pour accéder à votre application en ligne !
Exercice
- Explorez le tableau de bord de Vercel pour voir les informations de votre application.
- Testez votre application en ligne avec Postman et votre navigateur.
Conclusion
Félicitations ! Vous avez déployé votre application en production !
Si vous avez des questions ou des problèmes, n’hésitez pas à consulter la documentation de Vercel.
Comme on a pu le voir, Vercel est plutôt simple à utiliser et permet de déployer des applications Node.js rapidement.
Cela dit, les autres plateformes de déploiement sont également très bien et peuvent être plus adaptées à vos besoins.
Vous pouvez prendre un moment pour explorer ces plateformes et lire la documentation de mise en production pour votre application.
Dans les sections suivantes, nous allons faire évoluer notre application.