Ausführen einer Django-Site unter Nginx + Gunicorn + SSL

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-enabledsudo 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.








All Articles