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 DigitalOcean 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.digitalocean.com
  • ns2.digitalocean.com
  • ns3.digitalocean.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 Digital Ocean

Utiliser le lien ci-bas pour obtenir un crédit à l'abonnement https://m.do.co/c/5424d440c63a

3. Créer une "droplet" Ubuntu et s'y connecter via SSH

https://www.digitalocean.com/community/tutorials/how-to-use-visual-studio-code-for-remote-development-via-the-remote-ssh-plugin-fr

4. Installer Nodejs et npm

curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -

sudo apt install nodejs

npm i -g npm@latest

node --version

5. Cloner une application

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

git clone [projet].git

6. Installer les dépendances et tester

cd [project]
npm install
npm start
# arrêter l'application
ctrl+C

7. Installer le gestionnaire de processus PM2

sudo npm i pm2 -g

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


# Autres commandes PM2 populaires...
pm2 show app
pm2 status
pm2 restart app
pm2 stop app
pm2 logs (Show log stream)
pm2 flush (Clear logs)

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

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

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.

9. Ajouter le domaine dans Digital Ocean

Connectez-vous à Digital Ocean, allez à "networking" et ajoutez votre domaine. Ajoutez 2 "records" de type A qui pointent sur le domaine, @ et www Redémarrez le droplet

10. 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