Introduction
Azure App Service est une plateforme PaaS gérée par Microsoft pour héberger des applications web, API et sites statiques sans gérer l'infrastructure sous-jacente. En 2026, elle intègre nativement l'IA pour l'auto-scaling intelligent et les diagnostics avancés via Azure Monitor. Ce tutoriel intermediate vous guide pour déployer une API Node.js complète : de la création du service à la mise en production avec slots de déploiement et scaling horizontal.
Pourquoi c'est crucial ? App Service réduit le time-to-market de 70% comparé à des VMs manuelles, gère les certificats SSL auto, et scale automatiquement sous charge. Imaginez votre app qui passe de 10 à 10k utilisateurs sans intervention : c'est le quotidien avec App Service. Nous utilisons Azure CLI pour l'automatisation CI/CD, une app Node.js avec Express pour le concret, et couvrons les configs avancées. À la fin, vous aurez une stack production-ready, monitorée et scalable. (148 mots)
Prérequis
- Compte Azure actif (crédit gratuit via azure.microsoft.com/free)
- Azure CLI 2.65+ installé (docs.microsoft.com/cli/azure/install-azure-cli)
- Node.js 20+ et npm
- Git installé
- Connaissances de base en Node.js et Azure (niveau intermediate)
Connexion à Azure CLI
az login
az account set --subscription "Votre Subscription ID"
az extension add --name webapp --upgradeCette commande vous connecte à votre compte Azure et configure la subscription active. L'extension webapp ajoute des commandes spécifiques pour App Service. Vérifiez avec az --version ; piège : oubliez az login et les déploiements échouent silencieusement.
Création du groupe de ressources et plan App Service
Un groupe de ressources regroupe tous les assets Azure liés (comme un dossier projet). Le plan App Service définit les ressources (CPU, RAM, région) et le pricing tier (Free, Basic, Premium v3 pour scaling).
Créer RG et App Service Plan
az group create --name rg-appservice-tutorial --location "westeurope"
az appservice plan create --name plan-appservice-tutorial --resource-group rg-appservice-tutorial --sku P1V3 --is-linuxCrée un RG en Europe Ouest et un plan Premium v3 Linux (scale jusqu'à 30 instances). --is-linux pour Node.js optimal. Piège : Free tier limite à 60min/jour CPU ; upgradez en prod pour haute disponibilité.
Créer l'App Service
az webapp create --resource-group rg-appservice-tutorial --plan plan-appservice-tutorial --name monapp-nodejs-2026 --runtime "NODE|20-lts" --deployment-local-gitDéploie l'app vide avec runtime Node 20 LTS et active Git local pour push direct. Remplacez monapp-nodejs-2026 par un nom unique global. URL finale : https://monapp-nodejs-2026.azurewebsites.net. Piège : nom déjà pris = erreur ; ajoutez un timestamp.
Préparation de l'application Node.js
Créez un projet Node.js local avec Express pour une API REST simple. Nous incluons health checks et logging pour Azure diagnostics.
package.json complet
{
"name": "api-nodejs-appservice",
"version": "1.0.0",
"description": "API pour Azure App Service",
"main": "server.js",
"scripts": {
"start": "node server.js",
"dev": "nodemon server.js"
},
"dependencies": {
"express": "^4.19.2"
},
"engines": {
"node": "20.x"
}
}Déclare les scripts start (requis par App Service) et engines pour verrouiller Node 20. npm install après. Piège : sans start, l'app crash ; Azure appelle npm start au boot.
Serveur Express complet
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;
app.use(express.json());
app.get('/health', (req, res) => {
res.json({ status: 'OK', timestamp: new Date().toISOString() });
});
app.get('/api/users', (req, res) => {
res.json([{ id: 1, name: 'User1' }, { id: 2, name: 'User2' }]);
});
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
module.exports = app;API basique avec /health (pour Azure liveness probes) et /api/users. process.env.PORT obligatoire (Azure assigne dynamiquement). Piège : écouter 3000 fixe = timeout 230s et crash.
Initialiser Git et déployer
git init
git add .
git commit -m "Initial commit"
az webapp deployment source config-local-git --name monapp-nodejs-2026 --resource-group rg-appservice-tutorial
git remote add azure $(az webapp deployment source show --name monapp-nodejs-2026 --resource-group rg-appservice-tutorial --query url --output tsv)
git push azure mainInit Git, config deployment Git, push vers Azure (build auto npm install). App live en <1min. Piège : sans --query url , remote faux ; vérifiez logs avec az webapp log tail.
Configuration avancée : Variables d'environnement
En prod, stockez secrets dans App Settings (chiffrés, injectés comme env vars).
Ajouter env vars et config HTTPS
az webapp config appsettings set --resource-group rg-appservice-tutorial --name monapp-nodejs-2026 --settings WEBSITE_NODE_DEFAULT_VERSION="20-lts" API_KEY="supersecret"
az webapp update --resource-group rg-appservice-tutorial --name monapp-nodejs-2026 --https-only trueSet API_KEY accessible via process.env.API_KEY en code. HTTPS forcé (gratuit). Piège : redémarrage auto ; testez avec curl https://monapp-nodejs-2026.azurewebsites.net/health.
Scaling horizontal et slot de staging
az appservice plan update --name plan-appservice-tutorial --resource-group rg-appservice-tutorial --number-of-workers 3 --sku P2V3
az webapp deployment slot create --name monapp-nodejs-2026 --resource-group rg-appservice-tutorial --slot staging
az webapp deployment source config --name monapp-nodejs-2026 --resource-group rg-appservice-tutorial --slot staging --remote-url $(git remote get-url azure)
git push azure staging:main
az webapp deployment slot swap --name monapp-nodejs-2026 --resource-group rg-appservice-tutorial --slot stagingScale à 3 instances P2v3 (plus CPU). Crée slot staging, push, swap zéro-downtime. Piège : slots héritent du plan ; surveillez coûts avec az monitor metrics.
Bonnes pratiques
- Utilisez des slots pour deployments zéro-downtime et A/B testing.
- Activez Application Insights :
az webapp insight component createpour traces auto. - Scaling rules : Auto-scale sur CPU>70% via Azure Portal.
- CI/CD GitHub Actions : Intégrez
azure/webapps-deploypour prod. - Backup quotidien :
az webapp config backup create.
Erreurs courantes à éviter
- Port fixe : Toujours
process.env.PORT; sinon timeout Azure. - Mémoire leak : Monitor avec Kudu (https://monapp.scm.azurewebsites.net) ; recyclez workers.
- Cold starts : Premium plan pour always-ready instances.
- Logs perdus :
console.logva dans Log Stream ; utilisez Winston pour persistance.
Pour aller plus loin
- Docs officielles : Azure App Service
- Monitoring avancé : Application Insights
- Formations expertes : Découvrez nos formations Learni sur Azure DevOps et IaC avec Terraform.
- Exemple ARM : Déployez via templates JSON pour multi-env.