Mahefa Blog

Déploiement du site Web Express.js sur VPS avec Nginx, PM2 et Ubuntu 18.04

0. Préparation :

Tu auras besoin de:

Putty ou autre client SSH et VPS avec Ubuntu 18.04 installé.

Versions que j’ai utilisées :

Nginx (1.14.0), uWSGI (2.0.17), Django (2+), Ubuntu (18.04)

Créer un utilisateur:

Connectez-vous à votre VPS avec Putty et connectez-vous. Pour cette première connexion, utilisez le nom d’utilisateur « root » et le port 22. Vous devez connaître l’adresse IP et le mot de passe de votre fournisseur VPS.

Nous allons maintenant créer l’utilisateur « lukas » avec les droits de superutilisateur.# création d’un nouvel utilisateur
adduser lukas# fournissant les droits de superutilisateur
usermod -aG sudo lukas

Désormais, nous utiliserons uniquement notre utilisateur nouvellement créé.

Nous voulons que notre système soit à jour, alors exécutez ces deux commandes :sudo apt-get mise à jour
sudo apt-get mise à niveau

1. Configuration des projets Python, pip et Django

Ubuntu 18.04 devrait avoir Python 3.6 préinstallé…# vérifier si
python3.6 est installé –version
==> Python 3.6.5

…et nous avons aussi besoin de pip…sudo apt installer python3-pip# Vérifiez si l’installation a réussi
pip3 –version
==> pip 9.0.1 depuis /usr/lib/python3/dist-packages (python 3.6)

…pour que nous puissions installer virtualenv . Virtualenv crée un espace où les exécutables et les dépendances de notre projet peuvent vivre. Cela rendra notre nouveau projet isolé des autres projets et de l’installation globale de Python.# installation globale
sudo -H pip3 install virtualenv

Accédez à votre répertoire personnel et créez un dossier pour notre projet :

# ~ est un raccourci pour /home/ lukas /
cd ~ # création du projet de test
mkdir du répertoire # ouverture du répertoire du projet de test
cd

Créez et activez virtualenv.# notre virtualenv aura le nom “venv”
virtualenv venv# activation de notre nouvelle
source virtualenv venv /bin/activate

Installez Django et créez un projet de base.(venv) pip install django
(venv) django-admin startproject testproject
(venv) cd testproject
(venv) python manage.py migrate
(venv) python manage.py runserver 0.0.0.0:8000
==> Démarrage du serveur de développement sur http:/ /0.0.0.0:8000/

Vous devriez maintenant pouvoir accéder à YourVPSIpAddress :8000 et vous devriez voir l’écran de démarrage de Django. Si vous voyez une erreur à la place, accédez à settings.py dans votre projet Django et ajoutez votre adresse IP à l’option des hôtes autorisés.

img02 — bon travail, si vous voyez ça.

Si vous rencontrez des difficultés pour afficher complètement la page, vérifiez votre pare-feu :statut sudo ufw# s’il est activé, vous pouvez soit le désactiver
sudo ufw Disable
# soit autoriser le port 8000
Sudo ufw Allow 8000

2. uWSGI

Désormais, si vous fermez Putty, votre site Web Django cessera soudainement de fonctionner (car il était lié à notre session Putty). Parce que nous voulons qu’il puisse fonctionner, nous utiliserons le serveur d’applications – uWSGI .

Une très bonne alternative peut être Gunicorn .

Installez uWSGI (j’aime l’installer globalement)# cela désactivera votre virtualenv
(venv) désactiver

sudo -H pip3 install uwsgi# vérifier si installé
uwsgi –version
==> 2.0.17

Nous pouvons maintenant exécuter notre site Web avec uwsgi, mais nous devons d’abord spécifier quelques arguments :

Nous pouvons démarrer le serveur comme ceci :sudo uwsgi –http 0.0.0.0:8000 –home /home/ lukas / testproject /venv –chdir /home/lukas/ testproject / testproject –wsgi-file /home/ lukas / testproject / testproject / testproject /wsgi. py# Vérifiez si le site Web est actif sur < YourVPSIpAddress >:8000

Nous pouvons simplifier cela en créant un fichier ini :# L’emplacement dépend de vous, je l’aime ainsi
cd ~# créer un dossier uwsgi
mkdir uwsgi
cd uwsgi# créer des sites de dossiers
sites mkdir
sites cd# créer le fichier ini
nano testproject.ini

Intérieur du fichier testproject.ini :[uwsgi]
home = /home/ lukas / testproject /venv
chdir = /home/lukas/ testproject / testproject
wsgi-file = /home/ lukas / testproject / testproject / testproject /wsgi.pyhttp = 0.0.0.0:8000

Testez si votre fichier ini fonctionne en démarrant le site Web avec celui-ci.sudo uwsgi testproject.ini# Vérifiez si le site Web est actif sur < YourVPSIpAddress >:8000

Étant donné que toutes les parties de notre site Web seront sur une seule machine, nous pouvons utiliser des sockets UNIX au lieu de http. Modifiez le fichier testproject.ini comme ceci :[uwsgi]
home = /home/ lukas / testproject /venv
chdir = /home/lukas/ testproject / testproject
wsgi-file = /home/ lukas / testproject / testproject / testproject /wsgi.pysocket = /home/ lukas /uwsgi/testproject.sock
vide = true
chown-socket = lukas : www-data
chmod-socket = 660

Nous voudrons démarrer uWSGI automatiquement au démarrage. Nous pouvons utiliser systemd ou upstart . J’utiliserai systemd.cd /etc/systemd/system/
sudo nano uwsgi.service

Et créez le fichier uwsgi.service :[Unité]
Description= Service uWSGI Empereur[Service]
ExecStartPre=/bin/bash -c ‘mkdir -p /run/uwsgi; chown lukas :www-data /run/uwsgi’
ExecStart=/usr/local/bin/uwsgi –emperor /home/lukas/uwsgi/sites
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all[Installer]
WantedBy = multi-user.target

3. Nginx

Installez Nginx :sudo apt-get install nginx# vérifier si installé
sudo nginx -v
==> version de nginx : nginx/1.14.0 (Ubuntu)

Nous devons créer un fichier de configuration pour notre site Web :cd /etc/nginx/sites-disponibleprojet de test sudo nano

Intérieur du fichier de projet de test :serveur {
écouter 8000 ;
nom_serveur < VotreAdresseVPSIp > ; emplacement / {
include uwsgi_params;
uwsgi_pass unix:/home/ lukas /uwsgi/ testproject .sock;
}
}

Nous devons activer ces paramètres en créant un lien symbolique (lien symbolique) pour notre fichier testproject dans le répertoire sites-enabled :sudo ln -s /etc/nginx/sites-available/testproject /etc/nginx/sites-enabled

Vérifiez la syntaxe, activez Nginx et uWSGI pour démarrer au démarrage du système et redémarrez VPS :# vérifier si la syntaxe est correcte
sudo nginx -t# permettant à nginx et uwsgi de démarrer au démarrage
sudo systemctl activer nginx
sudo systemctl activer uwsgi# activer nginx dans le pare-feu
sudo ufw autoriser ‘Nginx Full’# redémarrage du VPS
sudo reboot# Vérifiez si le site Web est actif sur < YourVPSIpAddress >:8000

Votre site Web est désormais opérationnel via Nginx et uWSGI.

4. HTTPS

Cette partie du didacticiel suppose que vous possédez un domaine (dans cet article, j’utiliserai testprojectdomain.com comme exemple) et que vous avez défini des enregistrements DNS pour qu’ils pointent vers votre VPS (c’est-à-dire vers YourVPSIpAddress ).

Fichier de projet interne ou de test :serveur {
écouter 80 ;
nom_serveur testprojectdomain.com www.testprojectdomain.com ; emplacement / {
include uwsgi_params;
uwsgi_pass unix:/home/ lukas /uwsgi/ testproject .sock;
}
}

Si nous allons sur http://testprojectdomain.com/, nous devrions pouvoir voir notre site. Cependant, si nous allons sur https://testprojectdomain.com/ , nous ne verrons rien.

Pour activer HTTPS, nous devons obtenir un certificat auprès d’une autorité de certification (CA). Nous utiliserons Let’s Encrypt et Certbot .# ajout d’un référentiel avec certbot
sudo add-apt-repository ppa:certbot/certbotsudo apt mise à jour# installation de certbot
sudo apt-get install python-certbot-nginx# exécution de certbot
sudo certbot –nginx -d testprojectdomain.com -d www. testprojectdomain.com

Certbot nous demandera si nous souhaitons rediriger tout le trafic HTTP vers HTTPS. Vous pouvez soit laisser certbot effectuer les réglages, soit le faire vous-même en modifiant manuellement le fichier de projet de test .

Exemple, à quoi ressemblait approximativement ma configuration après avoir exécuté Certbot (veuillez noter que j’ai remplacé certaines parties de code par « … ») :serveur {
nom_serveur testprojectdomain.com www.testprojectdomain.com ; emplacement / {
include uwsgi_params;
uwsgi_pass unix:/home/lukas/uwsgi/testproject.sock;
} écoutez 443 SSL ; # géré par Certbot
ssl_certificate … ; # géré par Certbot
ssl_certificate_key … ; # géré par Certbot
inclut … ; # géré par Certbot
ssl_dhparam …; # géré par Certbot
}serveur {
if ($host = testprojectdomain.com ) {
return 301 https://$host$request_uri;
} # géré par Certbot if ($host = www.testprojectdomain.com ) {
return 301 https://$host$request_uri;
} # géré par Certbot écoutez 80 ; nom_serveur testprojectdomain.com www.testprojectdomain.com ;
retourner 404 ; # géré par Certbot
}

Certbot configurera cronjob pour renouveler vos certificats. Vous pouvez tester cela en tapant :sudo certbot renouveler –dry-run

C’est tout pour le moment! Si vous avez une idée sur la manière d’améliorer cet article/tutoriel, faites-le-moi savoir dans les commentaires.

Exit mobile version