Avant-propos
Il a fallu beaucoup de temps et d'efforts pour rédiger cet article. Je suis tombé sur beaucoup d'instructions, à la fois en anglais et en russe, mais d'après ce que j'ai compris, elles étaient toutes des clones de l'article original sur l'océan numérique. Vous demandez pourquoi je le pense, mais tout cela parce que toutes les erreurs et inexactitudes sont transférées d'une ressource à une autre sans aucun changement.
Formation
Nous avons un VPS régulier avec l'OS Ubuntu, et nous avons déjà écrit notre site sur Django dans PyCharm ou dans un bloc-notes, et il ne reste plus qu'à le publier, lier un domaine, installer un certificat et c'est parti.
La première étape consiste à mettre à jour la liste des référentiels et à installer immédiatement le package nginx:
apt-get update apt-get install nginx
J'ai décidé de stocker les fichiers du site dans le répertoire / var / www /. Dans ce cas, nous passons au répertoire cd / var / www / et créons un nouveau répertoire mkdir geekhero et obtenons le chemin suivant: / var / www / geekhero /
Allez dans le nouveau répertoire geekhero: cd geekhero et créez un environnement virtuel: python3 -m venv geekhero_env
Nous activons l' environnement virtuel: source geekhero_env / bin / activate et installons Django dedans: pip install Django et installe immédiatement pip install gunicorn
: django-admin startproject ghproj
; : python manage.py makemigrations
, python manage.py migrate
.
: python manage.py createsuperuser
.
applications, , .
Settings.py , :
import os
– , :
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
Gunicorn
/etc/systemd/system/ : gunicorn.service gunicon.socket:
gunicorn.service:
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=root
WorkingDirectory=/var/www/geekhero # manage.py
ExecStart=/var/www/geekhero/geekhero_env/bin/gunicorn --workers 5 --bind unix:/run/gunicorn.sock ghproj.wsgi:application
# gunicorn
[Install]
WantedBy=multi-user.target
gunicorn.socket:
[Unit] Description=gunicorn socket [Socket] ListenStream=/run/gunicorn.sock [Install] WantedBy=sockets.target
gunicorn.service :
systemd-analyze verify gunicorn.service
NGINX
: /etc/nginx/sites-available/ geekhero ( ) :
server {
listen 80;
server_name example.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /var/www/geekhero; # static
}
location /media/ {
root /var/www/geekhero; # media
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
, /etc/nginx/site-enabled/ :
sudo ln -s /etc/nginx/sites-available/geekhero /etc/nginx/sites-enabled/
, sites-enabled : sudo systemctl restart nginx
nginx :
sudo nginx -t
sudo nginx -t
gunicorn socket:
sudo systemctl enable gunicorn
sudo systemctl start gunicorn
:
sudo systemctl disable gunicorn
sudo systemctl stop gunicorn
, , - HTML python , , , , , python manage.py makemigrations <app> migrate <app> .
/ Gunicorn:
service gunicorn start / service gunicorn stop
:
sudo systemctl status gunicorn sudo journalctl -u gunicorn.socket ( : 05 16:40:19 byfe systemd[1]: Listening on gunicorn socket. )
, :
file /run/gunicorn.sock
: /run/gunicorn.sock: socket
- gunicorn.service .socket, :
systemctl daemon-reload
, nginx:
sudo service nginx start
SSL
certbot Let's Encrypt: sudo apt-get install certbot python-certbot-nginx
certbot: sudo certbot certonly --nginx
- nginx: sudo certbot install --nginx
Il ne reste plus qu'à redémarrer le service nginx: sudo systemctl restart nginx
Résultat
Dans le cadre de cet article, nous avons expliqué comment mettre notre site en production en installant Django, Gunicorn, nginx et même le certbot de Let's Encrypt.