-
Notifications
You must be signed in to change notification settings - Fork 0
Nginx SSL uvicorn fastapi
Для того чтобы запустить 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
создать скрипт запуска
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