Lancer un site Django sur nginx + Gunicorn + SSL

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







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.








All Articles