Creating a Production-Ready FastAPI Image from Scratch

Posted by

FastAPI с нуля до production-ready образа

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.

0 0 votes
Article Rating
17 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@dglonassik
6 months ago

Очень доступно все рассказано, спасибо👍

@Ramakot-ff3gd
6 months ago

Я не понимаю куда и как export MAIN_URL=/

@alexdubkov6998
6 months ago

Отличный пример хорошего DX. Спасибо! Ещё бы про правильный запуск на сервере – тоже полезно знать: настройки, рестарты, докеры, бекапы,

@simforum
6 months ago

Спасибо за видео! Классная подача. Всё чётко и по делу. Очень хорошо рисуется общая картинка.

@Vetal116
6 months ago

только теперь в сетингс надо импортить не из from pydantic a freom pydantic settings. эо изза того что падантик обновился

@andreymartynov3958
6 months ago

Искренне благодарю! Очень полезно! Замечательно что есть люди, помогающие расти над собой! =)

П.С. Почему-то пропал мой следующий комментарий про перенос BaseSettings в отдельный пакет pydantic-settings – появился pydantic v2
(при повторе кода Автора получил сообщение pydantic.errors.PydanticImportError: `BaseSettings` has been moved to the `pydantic-settings` package.) и решение этой проблемы (изменение в импорте на pydantic_settings после добавления указанного пакета с помощью poetry)

@goodpins
6 months ago

Также вообще ничего не видно в темной теме, даже через oled дисплей, хотелось бы светлую тему pycharm чтобы концентрировать внимание

@goodpins
6 months ago

Насчёт requirements.txt и неработоспособности программы после обновлений зависимостей – почему эту проблему не решает "package~=vers"? Именно ~=

@danyderden304
6 months ago

Это очень крутой видос! Крайне понятно, уже применил на своем проекте.

@vastchuk
6 months ago

Супер! Спасибо большое!

@geekdev0
6 months ago

Нет ошибок, что интересно 😂

@vadimyagofarov8290
6 months ago

Здравствуйте! А планируются еще видео такого рода? Очень полезно, спасибо

@GRIMEANARCHY
6 months ago

не могу разобраться с ошибкой в докерфайле, мб кто знает в чем трабл?
"Skipping virtualenv creation, as specified in config file."

@B0JIKA
6 months ago

Класс!!!

@user-mx3yc7fu9l
6 months ago

Большое спасибо! Качественный материал)

Небольшой комментарий из официальной документации 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.

@user-vi1fw4ep3j
6 months ago

Раз уж речь про "промышленную разработку" – файл pyproject.toml как раз и редактируют вручную. Прибивая нужные зависимости в нужные extras, указывая версии и ограничения и т.д. А вот файл poetry.lock как раз и не предназначен для ручного изменения, его необходимо обновлять командами poetry lock (лучше с флагом –no-update, чтобы без сюрпризов)

@versusbassz
6 months ago

Спасибо. Очень добротно 👍