Menjalankan situs Django di nginx + Gunicorn + SSL

Kata pengantar

Butuh banyak waktu dan tenaga untuk menulis artikel ini. Saya menemukan banyak instruksi, baik dalam bahasa Inggris maupun dalam bahasa Rusia, tetapi seperti yang saya pahami, semua itu adalah tiruan dari artikel asli di Digital Ocean. Anda bertanya mengapa saya berpikir demikian, tetapi semua karena semua kesalahan dan ketidakakuratan ditransfer dari satu sumber ke sumber lain tanpa perubahan apa pun.





Latihan

Kami memiliki VPS biasa dengan OS Ubuntu, dan kami telah menulis situs kami di Django di PyCharm atau di notepad, dan yang tersisa hanyalah menerbitkannya, mengikat domain, menginstal sertifikat dan pergi.





Langkah pertama adalah memperbarui daftar repositori dan segera menginstal paket nginx:





apt-get update
apt-get install nginx
      
      



Saya memutuskan untuk menyimpan file situs di direktori / var / www /. Dalam hal ini, kita pindah ke   direktori cd / var / www / dan membuat direktori geekhero mkdir baru   dan dapatkan jalur berikut: / var / www / geekhero /





Buka direktori geekhero baru:  cd geekhero  dan buat lingkungan virtual:  python3 -m venv geekhero_env





Kita aktifkan lingkungan virtual:  sumber geekhero_env / bin / aktifkan  dan instal Django di dalamnya: pip instal Django dan segera instal pip instal 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







Tetap hanya untuk memulai ulang layanan nginx: sudo systemctl restart nginx







Hasil

Sebagai bagian dari artikel ini, kami telah membahas bagaimana membawa situs kami ke produksi dengan menginstal Django, Gunicorn, nginx, dan bahkan certbot Let's Encrypt.








All Articles