Nginx SSL uvicorn fastapi - nagaevkirill/WIKI GitHub Wiki
Для того чтобы запустить FastAPI сервер на порту 8000 через Uvicorn и настроить редирект на SSL с помощью Nginx, следуйте этим инструкциям:
создать python проект
apt update apt upgrade apt install python3.10-venv apt install python3-pip -y python3 -m venv api-mq-sender cd api-mq-sender
добавить FastAPI и Uvicorn. Если еще не установлено, выполните:
pip install fastapi uvicorn
добавить main.py:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
Запустите FastAPI приложение:
Bash
uvicorn main:app --host 0.0.0.0 --port 8000
Здесь main:app предполагает, что ваш файл называется main.py и содержит объект app из FastAPI.
Установка 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/api-mq-sender/start_api_server.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/api-mq-sender/start_api_server.sh source /home/api-mq-sender/venv/bin/activate cd /home/api-mq-sender uvicorn main:app --host 0.0.0.0 --port 8000 else echo "Port $PORT is open. Status - Ok " fi
выдать прав
chmod +x /home/api-mq-sender/start_api_server.sh
добавить в cron
crontab -e
строкb
@reboot /home/api-mq-sender/start_api_server.sh */1 * * * * /home/api-mq-sender/start_api_server.sh