Nginx Gunicorn (Django) - nagaevkirill/WIKI GitHub Wiki

установить в проект Django gunicorn

pip install gunicorn

gunicorn backend.wsgi:application --bind 0.0.0.0:8000

Установка Nginx:

sudo apt update
sudo apt install nginx

Получение SSL-сертификата с помощью Certbot:

Установите Certbot и настройте сертификаты:

sudo apt install certbot python3-certbot-nginx

sudo certbot --nginx -d own.domain.com

Следуйте инструкциям для завершения получения сертификата. По итогу создается серт и происходит автоматическое конфигурирование дефолтных конфигов nginx. Можно зайти на сайт и убедиться, что работает редирект с 80 на 443 порт и подтягивается сертификат.

Откройте файл конфигурации

nano /etc/nginx/sites-available/default

server {
    listen 80;
    server_name my.domain.ru;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl; 
    server_name my.domain.ru; 

    ssl_certificate /etc/letsencrypt/live/my.domain.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/my.domain.ru/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8000;  # Uvicorn api server deployed
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Активируйте сайт и перезапустите Nginx:

sudo systemctl restart nginx

После выполнения этих шагов ваше FastAPI приложение будет работать на порту 8000 и обрабатываться Nginx с редиректом на HTTPS.

sudo apt install ufw
ufw allow 80
ufw allow 22
ufw allow 443
ufw enable

установить nc (netcat) для работы скрипта

apt install ncat

создать скрипт запуска

nano /home/kele_lk_backend/start_django_gunicorn.sh

вставить

#!/bin/bash

HOST="127.0.0.1"
PORT="8000"

nc -z -w5 $HOST $PORT
STATUS=$?

if [ $STATUS -ne 0 ]; then
  echo "Port $PORT is closed. Restart script start_api_server.sh"
  #/home/kele_lk_backend/start_django_gunicorn.sh
  source /home/kele_lk_backend/bin/activate
  cd /home/kele_lk_backend/
  gunicorn backend.wsgi:application --bind 0.0.0.0:8000
else
  echo "Port $PORT is open. Status - Ok "
fi

выдать прав

chmod +x /home/kele_lk_backend/start_django_gunicorn.sh

добавить в cron

crontab -e

строки

# min hour dom month dow command
@reboot /home/kele_lk_backend/start_django_gunicorn.sh
*/1 * * * * /home/kele_lk_backend/start_django_gunicorn.sh
⚠️ **GitHub.com Fallback** ⚠️