FastAPI с нуля до production-ready образа
FastAPI – это быстрый (Fast) веб-фреймворк с открытым исходным кодом для создания веб-приложений с использованием языка программирования Python. В этой статье мы рассмотрим процесс создания production-ready образа веб-приложения с использованием FastAPI с нуля.
Шаг 1: Установка FastAPI
Для начала нам нужно установить FastAPI. Мы можем сделать это с помощью pip, установив пакет fastapi:
pip install fastapi
Шаг 2: Создание веб-приложения
После установки FastAPI мы можем создать наше веб-приложение. Создадим файл с именем main.py и добавим в него следующий код:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello, World"}
Шаг 3: Установка и конфигурация Docker
Чтобы создать production-ready образ нашего веб-приложения, мы будем использовать Docker. Установите Docker на свою машину и сконфигурируйте его согласно вашим потребностям.
Шаг 4: Создание Dockerfile
Создайте файл с именем Dockerfile в корневой директории вашего веб-приложения и добавьте в него следующий код:
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.8
WORKDIR /app
COPY ./app /app
EXPOSE 80
CMD ["gunicorn", "-k", "uvicorn.workers.UvicornWorker", "-c", "./gunicorn_conf.py", "main:app"]
Шаг 5: Сборка образа
Теперь мы можем собрать образ нашего веб-приложения, используя Docker. Выполните следующую команду в корневой директории вашего веб-приложения:
docker build -t myapp .
Шаг 6: Запуск контейнера
Теперь, когда у нас есть образ нашего веб-приложения, мы можем запустить контейнер. Выполните следующую команду:
docker run -d -p 80:80 myapp
Шаг 7: Тестирование веб-приложения
Откройте браузер и перейдите по адресу http://localhost:80, чтобы убедиться, что ваше веб-приложение успешно запущено и работает корректно.
Теперь ваше веб-приложение с использованием FastAPI готово к production и может быть развернуто в любой среде, поддерживающей Docker.
Очень доступно все рассказано, спасибо👍
Я не понимаю куда и как export MAIN_URL=/
Отличный пример хорошего DX. Спасибо! Ещё бы про правильный запуск на сервере – тоже полезно знать: настройки, рестарты, докеры, бекапы,
Спасибо за видео! Классная подача. Всё чётко и по делу. Очень хорошо рисуется общая картинка.
только теперь в сетингс надо импортить не из from pydantic a freom pydantic settings. эо изза того что падантик обновился
Искренне благодарю! Очень полезно! Замечательно что есть люди, помогающие расти над собой! =)
П.С. Почему-то пропал мой следующий комментарий про перенос BaseSettings в отдельный пакет pydantic-settings – появился pydantic v2
(при повторе кода Автора получил сообщение pydantic.errors.PydanticImportError: `BaseSettings` has been moved to the `pydantic-settings` package.) и решение этой проблемы (изменение в импорте на pydantic_settings после добавления указанного пакета с помощью poetry)
Также вообще ничего не видно в темной теме, даже через oled дисплей, хотелось бы светлую тему pycharm чтобы концентрировать внимание
Насчёт requirements.txt и неработоспособности программы после обновлений зависимостей – почему эту проблему не решает "package~=vers"? Именно ~=
Это очень крутой видос! Крайне понятно, уже применил на своем проекте.
Супер! Спасибо большое!
Нет ошибок, что интересно 😂
Здравствуйте! А планируются еще видео такого рода? Очень полезно, спасибо
не могу разобраться с ошибкой в докерфайле, мб кто знает в чем трабл?
"Skipping virtualenv creation, as specified in config file."
Класс!!!
Большое спасибо! Качественный материал)
Небольшой комментарий из официальной документации uvicorn
Server deployment is a complex area, that will depend on what kind of service you're deploying Uvicorn onto.
As a general rule, you probably want to:
Run uvicorn –reload from the command line for local development.
Run gunicorn -k uvicorn.workers.UvicornWorker for production.
Раз уж речь про "промышленную разработку" – файл pyproject.toml как раз и редактируют вручную. Прибивая нужные зависимости в нужные extras, указывая версии и ограничения и т.д. А вот файл poetry.lock как раз и не предназначен для ручного изменения, его необходимо обновлять командами poetry lock (лучше с флагом –no-update, чтобы без сюрпризов)
Спасибо. Очень добротно 👍