É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
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.
Utiliser ce lien pour obtenir un crédit à l'abonnement (si applicable) https://www.vultr.com/register/
Utiliser ce lien pour ouvrir la page de création de serveur https://my.vultr.com/deploy/
- 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 protected]"
. Mémorisez l’emplacement proposée et acceptez en appuyant sur enter. Ouvrez le fichierid_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
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:
Host NOM_DU_SERVEUR HostName 216.122.184.3 <-- Adresse IP de votre serveur Port 22 User root IdentityFile ~/.ssh/id_ed25519
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.
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
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.
Copiez les fichier .env dans la racine du projet.
cd [project]
npm install
npm start```
Assurez-vous d'avoir accès à l'application à l'adresse: IP.IP.IP.IP:3000
ctrl+C
## 7. Installer le gestionnaire de processus PM2
sudo npm i pm2 -g
pm2 start app.js ou pm2 start /bin/www
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
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]
2
Au besoin, utilisez https://letsdebug.net/ pour déboguer l'encryptage
certbot renew --dry-run
Maintenant visitez https://[domaine] et votre application devrait fonctionner.