Nginx SSL uvicorn fastapi - nagaevkirill/WIKI GitHub Wiki

создать 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
⚠️ **GitHub.com Fallback** ⚠️