Déploiement d'une application JavaScript sur VPS : guide avancé étape par étape

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : du serveur local à une solution prête pour la production

\n

Vous avez créé une puissante application JavaScript avec Node.js, vous l'avez testée localement, et il est maintenant temps de la montrer au monde. Se contenter de télécharger les fichiers sur un VPS et d'exécuter node app.js est la voie du débutant. Au niveau avancé, le déploiement inclut la configuration d'un serveur proxy inverse, d'un gestionnaire de processus, le renouvellement automatique des certificats SSL, un système d'intégration et de livraison continues (CI/CD), ainsi qu'un monitoring et une journalisation appropriés.

\n

Dans cet article, nous allons détailler le processus étape par étape du déploiement d'une application Node.js sur un VPS (Ubuntu 22.04) à un niveau avancé. Nous configurerons Nginx comme reverse proxy, PM2 pour la gestion des processus, Let's Encrypt pour le HTTPS, GitHub Actions pour le déploiement automatique lors d'un push vers le dépôt, et nous ajouterons un monitoring de base.

\n\n

Prérequis

\n
    \n
  • Serveur VPS (Ubuntu 22.04) avec accès SSH.
  • \n
  • Domaine lié à l'IP de votre serveur (par exemple, myapp.example.com).
  • \n
  • Node.js (v18+) et npm installés sur le serveur.
  • \n
  • Git installé sur le serveur.
  • \n
  • Dépôt de votre application sur GitHub.
  • \n
\n\n

1. Configuration du serveur et du gestionnaire de processus PM2

\n

Commençons par la préparation de base de l'environnement. Après vous être connecté au serveur via SSH, mettons à jour les paquets et installons les utilitaires nécessaires :

\n
sudo apt update && sudo apt upgrade -y\nsudo apt install nginx git curl -y
\n

Assurons-nous que Node.js est installé. Sinon, installons-le via NodeSource :

\n
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -\nsudo apt install -y nodejs\nnode -v\nnpm -v
\n

Maintenant, installons globalement PM2 — un gestionnaire de processus avancé pour Node.js qui redémarre automatiquement l'application en cas de panne, gère les journaux et le clustering :

\n
sudo npm install -g pm2
\n

Clonons le dépôt de votre application et installons les dépendances :

\n
git clone https://github.com/votre-utilisateur/votre-depot.git /var/www/myapp\ncd /var/www/myapp\nnpm install --production
\n

Créons un fichier d'écosystème PM2 (ecosystem.config.js) pour un réglage fin :

\n
// ecosystem.config.js\nmodule.exports = {\n  apps: [{\n    name: 'myapp',\n    script: 'app.js', // ou server.js\n    instances: 'max', // utiliser tous les cœurs du CPU\n    exec_mode: 'cluster',\n    env: {\n      NODE_ENV: 'production',\n      PORT: 3000\n    },\n    error_file: '/var/log/node-app/err.log',\n    out_file: '/var/log/node-app/out.log',\n    log_date_format: 'YYYY-MM-DD HH:mm Z'\n  }]\n};
\n

Créons un répertoire pour les journaux et lançons l'application via PM2 :

\n
sudo mkdir -p /var/log/node-app\nsudo chown -R $USER:$USER /var/log/node-app\npm2 start ecosystem.config.js\npm2 save\npm2 startup systemd
\n

La commande pm2 startup créera un service systemd qui démarrera PM2 au démarrage du système. Votre application fonctionne maintenant sur le port 3000, mais y accéder directement n'est pas sécurisé. Passons à la configuration de Nginx.

\n\n

2. Configuration de Nginx comme reverse proxy et SSL via Let's Encrypt

\n

Nginx acceptera les requêtes entrantes sur les ports 80 (HTTP) et 443 (HTTPS), les transférera à votre processus Node.js fonctionnant sur le port 3000, et servira également les fichiers statiques directement — ce qui réduit la charge sur Node.js.

\n

Créons un fichier de configuration pour notre domaine :

\n
sudo nano /etc/nginx/sites-available/myapp
\n

Insérez la configuration suivante (remplacez myapp.example.com par votre domaine) :

\n
server {\n    listen 80;\n    server_name myapp.example.com;\n    return 301 https://$server_name$request_uri; # redirection vers HTTPS\n}\n\nserver {\n    listen 443 ssl http2;\n    server_name myapp.example.com;\n\n    # SSL ser                

Blogs

Book Recommendations