Nginx Gunicorn (Django) - nagaevkirill/WIKI GitHub Wiki
Для того чтобы запустить FastAPI сервер на порту 8000 через Uvicorn и настроить редирект на SSL с помощью Nginx, следуйте этим инструкциям:
установить в проект 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