Skip to content
Learni
Voir tous les tutoriels
Cloud

Comment déployer une app Node.js sur Azure App Service en 2026

Read in English

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

Connexion à Azure CLI

terminal
az login
az account set --subscription "Votre Subscription ID"
az extension add --name webapp --upgrade

Cette 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

terminal
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-linux

Cré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

terminal
az webapp create --resource-group rg-appservice-tutorial --plan plan-appservice-tutorial --name monapp-nodejs-2026 --runtime "NODE|20-lts" --deployment-local-git

Dé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

package.json
{
  "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

server.js
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

terminal
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 main

Init 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

terminal
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 true

Set 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

terminal
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 staging

Scale à 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 create pour traces auto.
  • Scaling rules : Auto-scale sur CPU>70% via Azure Portal.
  • CI/CD GitHub Actions : Intégrez azure/webapps-deploy pour 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.log va dans Log Stream ; utilisez Winston pour persistance.

Pour aller plus loin