---
title: Installer un serveur web Node.js sur Debian
source: https://synapx.fr/blog/serveur-web-nodejs/
date: 2026-06-26
category: Serveur Web
site: SynapxLab
---

# Installer un serveur web Node.js sur Debian

Pour exposer une application **Node.js** en production, on la place derrière un **proxy inverse** (Nginx) et on la maintient en vie avec un **gestionnaire de processus** (PM2 ou systemd).

```
+------------------+
|  Utilisateurs    |
+---------+--------+
          |
          v
+---------+-------------+
| Nginx (proxy inverse) |
+---------+-------------+
          |
          v
+----------------------+
|  Node.js (JavaScript)|
|    (géré par pm2)    |
+----------------------+
```

## 1. Installer Node.js

**Debian / Ubuntu :**

```bash
sudo apt update
sudo apt install -y nodejs npm
```

**RHEL / CentOS :**

```bash
sudo yum update
sudo yum install -y nodejs
```

Vérifier l'installation :

```bash
node -v
npm -v
```

## 2. Nginx en proxy inverse

Nginx reçoit les requêtes HTTP (port 80/443) et les redirige vers l'application Node.js qui écoute en local (port 3000).

```bash
sudo nano /etc/nginx/sites-available/monapp.com
```

```nginx
server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
```

```bash
sudo ln -s /etc/nginx/sites-available/monapp.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
```

## 3. Une application minimale

`/var/www/monapp/app.js` en Node.js pur :

```js
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
```

Ou avec **Express**, en ajoutant quelques en-têtes de sécurité :

```js
const express = require('express');
const app = express();

app.use((req, res, next) => {
    res.setHeader('Cache-Control', 'public');
    res.setHeader('Strict-Transport-Security', 'max-age=63072000');
    res.setHeader('X-Frame-Options', 'DENY');
    next();
});

// vos routes ici

app.listen(3000, () => {
    console.log('Serveur démarré sur le port 3000');
});
```

## 4. Maintenir l'app en vie

Lancer `node app.js` à la main n'est pas viable : dès que la session ferme ou que le serveur redémarre, l'app s'arrête. Deux méthodes robustes.

### Méthode 1 — PM2

```bash
sudo npm install -g pm2
cd /var/www/monapp
pm2 start app.js --name "my-node-app"
pm2 status
pm2 logs my-node-app
```

Démarrage automatique au boot :

```bash
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u votre_utilisateur --hp /home/monapp
pm2 save
```

### Méthode 2 — Service systemd

```bash
sudo nano /etc/systemd/system/monapp.service
```

```ini
[Unit]
Description=Mon Application Node.js
After=network.target

[Service]
ExecStart=/usr/bin/node /var/www/monapp/app.js
WorkingDirectory=/var/www/monapp
Restart=always
User=votre_utilisateur
Group=votre_utilisateur
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target
```

```bash
sudo systemctl daemon-reload
sudo systemctl start monapp
sudo systemctl enable monapp
sudo systemctl status monapp
```

---

> Avec ce montage **Nginx → Node.js → PM2/systemd**, votre application redémarre automatiquement en cas de crash ou de redémarrage, et reste accessible sur les ports 80/443 standard.
