É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.
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
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
sudo ufw enable
sudo ufw status
sudo ufw allow ssh (Port 22)
sudo ufw allow http (Port 80)
sudo ufw allow https (Port 443)
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;
}
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.
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.