Развертывание FastAPI на VDS

Разворачиваю на VDS приложение по инструкции Делал все по инструкции за исключением:

listen NUMBER_PORT;

proxy_pass http://0.0.0.0:NUMBER_PORT;

main:app ---(заменил на)-->wsgi:uvicorn

В мануале после команды:

sudo systemctl start myapp.service

Должно все работать - а у меня если проверить через:

sudo systemctl status myapp.service

Горит красная лампочка. И, соответственно, если зайти на адрес - там 502 ошибка

Точка входа(wsgi.py):

import uvicorn

if __name__ == "__main__":
    uvicorn.run("main:app", port=NUMBER_PORT_LOC, host='0.0.0.0', reload=True)

Если вручную запустить через:

python wsgi.py

то все работает...

В чем проблема? Что не так?


Ответы (1 шт):

Автор решения: Алексей Белкин

Благодаря @andreymal, я разобрался. Оставлю решение, если кому пригодится в будущем:

  1. sudo nano /etc/systemd/system/NAME_SERVISE.service
[Unit]
 Description= instance to serve NAME_SERVISE
 After=network.target
[Service]
 User=USER
 Group=www-data
 WorkingDirectory=/home/USER/MY_APP_FOLDER
 Environment="PATH=/home/USER/MY_APP_FOLDER/myprojectenv/bin"
 ExecStart=/home/USER/MY_APP_FOLDER/myprojectenv/bin/python  wsgi.py
[Install]
 WantedBy=multi-user.target
  1. Файл wsgi.py:
import uvicorn
if __name__ == "__main__":
    uvicorn.run("main:app", port=NUMBER_PORT_LOCAL, host='0.0.0.0', reload=True)
  1. sudo nano /etc/nginx/sites-available/NAME_SERVISE
server {
    listen NUMBER_PORT_GLOBAL;
    server_name IP_ADDRES;

    location / {
        include proxy_params;
        proxy_pass http://0.0.0.0:NUMBER_PORT_LOCAL;
    }
}
  1. Создаем символьную ссылку:
sudo ln -s /etc/nginx/sites-available/NAME_SERVISE /etc/nginx/sites-enabled
  1. Ну и типичные команды (запуск/автозагрузка/проверка статуса):
sudo systemctl start NAME_SERVISE
sudo systemctl enable NAME_SERVISE
sudo systemctl status NAME_SERVISE
→ Ссылка