Sommaire / Guides / Node.js

Déployer une application Node.js dans 15 minutes

Pas de Docker, pas de PaaS, pas de magie. Node.js plus systemd et Nginx est une pile qui survit aux reboots, aux accidents et au trafic — et vous pouvez tout lire.

1. Installer Node.js

apt update && apt install -y curl
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejs
node --version

2. Créer un utilisateur d'application

N'exécutez jamais une application web comme root. Un utilisateur séparé limite les dommages si l'application est compromise.

adduser --system --group --home /opt/myapp app
mkdir -p /opt/myapp
chown app:app /opt/myapp

3. Télécharger l'application

Depuis votre ordinateur portable, avec rsync sur SSH — aucun serveur Git requis:

rsync -avz --exclude node_modules ./app/ root@YOUR_SERVER_IP:/opt/myapp/

Sur le serveur, installer les dépendances et tester une fois au premier plan :

cd /opt/myapp
sudo -u app npm ci --omit=dev
sudo -u app PORT=3000 node server.js

L'application doit écouter 127.0.0.1:3000 — pas sur l'interface publique. Nginx affrontera Internet.

4. systemd le maintient en vie

cat > /etc/systemd/system/myapp.service <<'EOF'
[Unit]
Description=My Node.js app
After=network-online.target
[Service]
User=app
WorkingDirectory=/opt/myapp
Environment=NODE_ENV=production
Environment=PORT=3000
ExecStart=/usr/bin/node server.js
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now myapp
systemctl status myapp

Crash ? Il redémarre dans trois secondes. Redémarrer ? Ça commence automatiquement. Déployer une nouvelle version ? rsync, alors systemctl restart myapp.

5. Nginx devant

apt install -y nginx
cat > /etc/nginx/sites-available/myapp <<'EOF'
server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
EOF
ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/myapp
nginx -t && systemctl reload nginx

Ensuite, pointez l'enregistrement A de votre domaine sur le serveur et ajoutez HTTPS — la passerelle complète est dans le Guide Nginx et HTTPS.

6. Vérifiez les journaux

journalctl -u myapp -f --no-pager
tail -f /var/log/nginx/error.log

Console sortie de votre application atterrit dans journald automatiquement — aucun fichier journal à configurer.

Réponses rapides

Ai-je besoin de PM2 ?

Pas vraiment. systemd fait tout ce que PM2 fait pour un seul serveur — démarrage automatique, démarrage, logs — sans dépendance supplémentaire. PM2 a un sens principalement si vous exécutez plusieurs processus Node avec regroupement.

Combien de RAM nécessite une application Node ?

Une application Express typique ralentit entre 80 et 150 Mo. Un serveur de 2 Go l'exécute confortablement à côté de Nginx et PostgreSQLTM; construire des étapes comme webpack sont la partie mémoire-faible, donc construire en CI ou sur votre ordinateur portable.

Comment déployer une nouvelle version sans temps d'arrêt ?

rsync le nouveau code, puis redémarrer — l'écart est sous une seconde, parce que systemd redémarre le processus immédiatement. Pour le temps zéro arrêt, vous exécuteriez deux ports et commuter Nginx en amont, mais la plupart des projets n'en ont jamais besoin.

Cette pile s'adapte confortablement dans Buran-1 à €6.5/mois.

Autres