Vorwort
Das Schreiben dieses Artikels hat viel Zeit und Mühe gekostet. Ich bin auf viele Anweisungen gestoßen, sowohl auf Englisch als auch auf Russisch, aber wie ich verstanden habe, waren sie alle Klone des Originalartikels über Digital Ocean. Sie fragen, warum ich das denke, aber alles, weil alle Fehler und Ungenauigkeiten unverändert von einer Ressource auf eine andere übertragen werden.
Ausbildung
Wir haben ein reguläres VPS mit dem Ubuntu-Betriebssystem und wir haben unsere Site bereits auf Django in PyCharm oder in einem Notizblock geschrieben. Alles, was bleibt, ist, es zu veröffentlichen, eine Domain zu binden, ein Zertifikat zu installieren und loszulegen.
Der erste Schritt besteht darin, die Liste der Repositorys zu aktualisieren und das nginx-Paket sofort zu installieren:
apt-get update apt-get install nginx
Ich habe beschlossen, die Site-Dateien im Verzeichnis / var / www / zu speichern. In diesem Fall wechseln wir in das Verzeichnis cd / var / www / und erstellen ein neues Verzeichnis mkdir geekhero und erhalten den folgenden Pfad: / var / www / geekhero /
Wechseln Sie in das neue geekhero-Verzeichnis: cd geekhero und erstellen Sie eine virtuelle Umgebung: python3 -m venv geekhero_env
Wir aktivieren die virtuelle Umgebung: Quelle geekhero_env / bin / enable und installiere Django darin: pip install Django und installiere sofort 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
Es bleibt nur der Neustart des Nginx-Dienstes: sudo systemctl restart nginx
Ergebnis
Als Teil dieses Artikels haben wir beschrieben, wie Sie unsere Site durch die Installation von Django, Gunicorn, Nginx und sogar Let's Encrypt's Certbot in Produktion bringen können.