Pourquoi Deployer Express sur Fly.io ?
Deployer Express sur Fly.io est une excellente solution pour les développeurs qui cherchent à rendre leur application plus performante, scalable et fiable. En effet, Fly.io propose un réseau de serveurs répartis autour du monde entier, permettant aux applications d'être accédées rapidement peu importe la localisation du client. Cela est particulièrement utile pour les applications ayant une forte demande d'users en simultané ou nécessitant une disponibilité élevée.
Un cas concret de l'utilisation de Fly.io serait un service de gestionnaire de tâches, comme Trello ou Asana. En déployant ce type d'application sur Fly.io, les utilisateurs pourraient accéder à leur application depuis n’importe quel endroit du monde avec une latence minimale.
Prerequis
- Connaissance approfondie de JavaScript et Node.js
- Familiarité avec Express.js
- Un compte Fly.io
- Node.js v14 ou supérieur installé sur votre machine
- npm (Node Package Manager) v6 ou supérieur installé sur votre machine
Concepts fondamentaux
1. Comprendre les concepts de base
Fly.io utilise un modèle d'infrastructure as code pour déployer et gérer des applications. Voici quelques concepts clés :
- Apps: Une application Fly.io est une collection de services qui travaillent ensemble.
- Services: Un service est une unité de déploiement indépendante, souvent correspondant à un processus ou une fonctionnalité spécifique de votre application.
- Regions: Les régions sont les emplacements géographiques où vos services seront déployés. Chaque région a ses propres serveurs physiques pour offrir la meilleure latence et la meilleure disponibilité.
2. Créer un projet Fly.io
Pour commencer, vous devez créer un nouveau projet sur Fly.io. Voici comment :
flyctl init
Cette commande va vous guider à travers le processus de création d'un nouveau projet. Vous serez invité à choisir un nom pour votre application et à sélectionner une région.
3. Configurer le fichier fly.toml
Fly.io utilise un fichier fly.toml pour configurer les paramètres de déploiement de l'application. Voici un exemple basique :
app = "mon-app"
kill_signal = "SIGINT"
kill_timeout = 5000
[env]
NODE_ENV = "production"
[experimental]
auto_rollback = true
[[services]]
internal_port = 3000
processes = ["web"]
[[services.concurrency]]
type = "memory"
memory = 128
[[services.http.routes]]
handlers = ["static", "service"]
4. Créer une application Express
Créez un nouveau fichier app.js et ajoutez le code suivant :
// app.js
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`App listening at http://localhost:${port}`);
});
5. Installer les dépendances
Assurez-vous d'avoir installé Express.js et de l'ajouter à vos dépendances :
npm init -y
npm install express
6. Exécuter votre application locallement
Vous pouvez maintenant exécuter votre application localement en utilisant la commande suivante :
node app.js
Ouvrez un navigateur et allez à http://localhost:3000. Vous devriez voir "Hello World!" affiché.
Mise en pratique : projet fil rouge
Dans cet exemple, nous allons créer une petite application de gestionnaire de tâches simple. Cette application permettra aux utilisateurs de créer, lire et supprimer des tâches.
1. Créer le fichier app.js
Créez un nouveau fichier app.js et ajoutez le code suivant :
// app.js
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const port = process.env.PORT || 3000;
const tasks = [];
app.use(bodyParser.json());
// Route pour créer une tâche
app.post('/tasks', (req, res) => {
const task = req.body;
tasks.push(task);
res.status(201).send(task);
});
// Route pour lire toutes les tâches
app.get('/tasks', (req, res) => {
res.send(tasks);
});
// Route pour supprimer une tâche
app.delete('/tasks/:id', (req, res) => {
const id = parseInt(req.params.id);
tasks.splice(id, 1);
res.status(204).send();
});
app.listen(port, () => {
console.log(`App listening at http://localhost:${port}`);
});
2. Installer les dépendances
Assurez-vous d'avoir installé Express.js et BodyParser :
npm install express body-parser
3. Exécuter votre application locallement
Exécutez votre application localement en utilisant la commande suivante :
node app.js
Ouvrez un navigateur et allez à http://localhost:3000/tasks. Vous devriez voir une liste vide de tâches. Vous pouvez tester les routes /tasks et /tasks/:id en utilisant des outils comme Postman ou curl.
Erreurs frequentes et debugging
1. Erreur : Cannot GET /
Si vous recevez l'erreur "Cannot GET /", cela signifie que votre route racine n'est pas configurée correctement.
// ❌ Mauvais
app.get('/', (req, res) => {
// Code incorrect
});
// ✅ Correct
app.get('/', (req, res) => {
res.send('Hello World!');
});
2. Erreur : ReferenceError: tasks is not defined
Si vous recevez l'erreur "ReferenceError: tasks is not defined", cela signifie que la variable tasks n'est pas définie dans le scope global.
// ❌ Mauvais
app.post('/tasks', (req, res) => {
const task = req.body;
// Code incorrect
});
// ✅ Correct
const tasks = [];
app.post('/tasks', (req, res) => {
const task = req.body;
tasks.push(task);
res.status(201).send(task);
});
3. Erreur : TypeError: Cannot read property 'length' of undefined
Si vous recevez l'erreur "TypeError: Cannot read property 'length' of undefined", cela signifie que la variable tasks n'est pas définie correctement.
// ❌ Mauvais
app.get('/tasks', (req, res) => {
// Code incorrect
});
// ✅ Correct
const tasks = [];
app.get('/tasks', (req, res) => {
res.send(tasks);
});
Pour aller plus loin
1. Utiliser Docker pour le déploiement
Fly.io prend en charge les applications déployées dans des conteneurs Docker. Cela permet de créer une image Docker pour votre application et la déployer sur Fly.io.
2. Utiliser un système de base de données
Pour une application plus complexe, vous devrez probablement utiliser une base de données pour stocker les données persistantes.
3. Gérer le déploiement avec GitHub Actions
Fly.io peut être intégré à des outils de gestion de déploiement comme GitHub Actions pour automatiser le processus de déploiement.
Défi pratique
Créez une application simple d'API de blog qui permet aux utilisateurs de créer, lire, mettre à jour et supprimer des articles. Utilisez Express.js et un système de base de données comme MongoDB pour stocker les données. Assurez-vous que votre application est déployée sur Fly.io.
Ce tutoriel a couvert les concepts fondamentaux de déploiement d'une application Express sur Fly.io, ainsi qu'une mise en pratique complète avec un mini-projet réaliste. Il a également abordé les erreurs courantes et leur résolution, et a suggéré des pistes pour approfondir votre connaissance.