Skip to content

Instantly share code, notes, and snippets.

@guilmarc
Last active September 12, 2023 18:11
Show Gist options
  • Save guilmarc/c36203366a0a7b41e76307e4da183d2f to your computer and use it in GitHub Desktop.
Save guilmarc/c36203366a0a7b41e76307e4da183d2f to your computer and use it in GitHub Desktop.
Configurer une application NodeJS en production avec Vultr / NGINX / LetsEncrypt

NodeJS en production (version NGINX)

Étapes pour déploiement d'une application Node.js chez Vultr avec PM2, serveur NGINX en tant que proxy inversé et sécurité SSL (HTTPS) à l'aide de LetsEncrypt

1. Enregistrer et configurer votre nom de domaine

Enregistrer un nom de domaine chez le revendeur préféré et changes les noms de domaines pour:

  • ns1.vultr.com
  • ns2.vultr.com

Cela peut prendre quelques temps (heures) avant que les noms de domaines se propagent. Quelques minutes si on est chanceux.

2. Créer un compte chez Vultr

Utiliser ce lien pour obtenir un crédit à l'abonnement (si applicable) https://www.vultr.com/register/

3. Créer un serveur Ubuntu incluant une clé SSH

Utiliser ce lien pour ouvrir la page de création de serveur https://my.vultr.com/deploy/

Création du serveur

  • Choose Server: Cloud Compute.
  • CPU & Storage Technology: Intel. Regular Performance.
  • Server Location: Toronto Canada
  • Server Image: Ubuntu (dernière version LTS).
  • Server Size: 25 GB SSD.
  • Add Auto Backups: False.
  • Additional Features: None.
  • SSH Keys: Lancer cette commande sur votre ordi dans un bash : ssh-keygen -t ed25519 -N '' -C "email@email.ca". Mémorisez l’emplacement proposée et acceptez en appuyant sur enter. Ouvrez le fichier id_ed25519.pub avec un éditeur de texte. Créer une nouvelle clé SSH sur Vultr. Copiez maintenant le contenu du fichier (la clé).
  • Server Hostname & Label: Selon votre nom de projet / nom d’entreprise

4. Accéder au serveur à partir de VSCode

Installez d'abord le plug-in nommé Remote - SSH Appuyez ensuite sur le section verte en bas à gauche de VSCode

  • Connect to Host...
  • Configure SSH Host
  • Sélectionnez le fichier de config pointant sur un répertoire dans votre HOME
  • Ajoutez-y les informations de configuration suivantes:

Sur MacOS

Host NOM_DU_SERVEUR
  HostName 216.122.184.3      <-- Adresse IP de votre serveur
  Port 22
  User root
  IdentityFile ~/.ssh/id_ed25519

Sur Windows

Host NOM_DU_SERVEUR
  HostName 216.122.184.3      <-- Adresse IP de votre serveur
  Port 22
  User root
  IdentityFile /users/[VOTRE_USER]/.ssh/id_ed25519
  • Sauvegardez le fichier de configuration et re-cliquez sur la section verte pour ouvrir la connexion.

5. Installer Nodejs et npm

sudo apt install build-essential

sudo apt update

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

source ~/.bashrc

nvm install --lts

npm i -g nodemon

6. Cloner une application

Créer un répertoire /var/www et clonez-y votre projet

git clone [projet].git

N.B. Vous aurez besoin de configurer une clé SSH à partir du serveur vers votre hébergeur de Git.

7. Installer les dépendances et tester

Ouvrez le port 3000 sur le serveur sudo ufw allow 3000

Copiez les fichier .env dans la racine du projet.

npm install
npm start

Assurez-vous d'avoir accès à l'application à l'adresse: IP.IP.IP.IP:3000

Arrêter l'application
ctrl+C

8. Installer le gestionnaire de processus PM2

sudo npm i pm2 -g

pm2 start app.js
**ou**
pm2 start /bin/www

# Pour s'assurer que l'application démarre avec le serveur
pm2 startup ubuntu
pm2 save

L'application est maintenant accessible en utilisant son port. Maintenant nous voulons bloquer ce port et laisser NGINX gérer les accès au port HTTP (80)

Tester l'accès à l'application avec [ip]:[port], exemple :

137.184.58.65:3000

8. Configurer le firewall ufw

sudo ufw enable
sudo ufw status
sudo ufw allow ssh (Port 22)
sudo ufw allow http (Port 80)
sudo ufw allow https (Port 443)

9. Installation et configuration de NGINX

sudo apt install nginx

Si vous être en SPA, allez à l'étape 9, continuer si vous êtes en mode SSR Modifier le fichier de configuration de sites de NGINX à l'emplacement : /etc/nginx/sites-available/default

Add the following to the location part of the server block

    server_name [domaine] www.[domaine];

    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;
    }

Vérifier les configurations de NGINX et redémarrer

sudo nginx -t
sudo service nginx restart

À ce stade vous devriez être en mesure d'accéder à votre application nodejs avec l'adresse ip seulement.

Tester l'accès à l'application avec l'adresse IP, exemple :

137.184.58.65

Si cela ne fonctione pas, vérifiez les configuration NGINX ou de firewall.

10. Ajouter le domaine dans Vultr

* Ajouter le domaine

11. Ajoutez un certificat SSL avec LetsEncrypt

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python3-certbot-nginx
sudo certbot --nginx -d [domaine] -d www.[domaine]
# Choix de redirection
2
# Au besoin, utilisez https://letsdebug.net/ pour déboguer l'encryptage

# Ce certificat sera valide pour 90 jours. Tester son renouvellement automatique avec :
certbot renew --dry-run

Maintenant visitez https://[domaine] et votre application devrait fonctionner.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment