<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Публичное облако на базе VMware с управлением через vCloud Director

Как создать и развернуть приложение на FastAPI: быстрый и простой деплой с Apps

Сергей Дурманов
Сергей Дурманов
Технический писатель
14 февраля 2025 г.
30
14 минут чтения
Средний рейтинг статьи: 5

FastAPI — это современный, быстрый веб-фреймворк для создания API на Python. Он предназначен для разработки веб-приложений и серверов API с минимальными усилиями и очень высокой производительностью. В данной статье мы рассмотрим быстрый деплой FastAPI приложения с использованием нашего сервера развертывания.

Для чего используется FastAPI:

  1. Для создания API:

    • FastAPI идеально подходит для создания RESTful API, GraphQL API и других типов веб-сервисов.

    • Позволяет легко определять эндпоинты, обрабатывать входящие запросы и возвращать ответы.

  2. Для высокопроизводительных приложений:

    • FastAPI основан на асинхронной модели работы (async/await), что делает его одним из самых быстрых фреймворков для Python.

    • По скорости он сравним с GoLang.

  3. Для автоматической генерации документации:

    • FastAPI автоматически генерирует интерактивную документацию API (через Swagger UI и ReDoc).

  4. Для валидации данных:

    •  Автоматически проверяет типы данных, поступающих в запросах, и возвращает ошибки, если данные не соответствуют ожидаемым типам.

  5. Для асинхронных задач:

    • Поддерживает асинхронные операции (отдает моментальный ответ и далее параллельно выполняем фоновую отложенную задачу).

    • Поддержка WebSocket.

  6. Для удобной разработки:

    • Имеет простой синтаксис.

  7. Для интеграции с OpenAPI и JSON Schema:

    • Фреймворк автоматически генерирует схемы OpenAPI, что позволяет легко интегрировать ваш API со сторонними инструментами.

Кейсы: кому и как использовать FastAPI

  1. Разработчикам корпоративных систем и персональных сайтов
    FastAPI прекрасно подходит для быстрой интеграции с базами данных и сторонними сервисами. Он имеет встроенную поддержку валидации данных и асинхронной обработки запросов.

  2. Web-дизайнерам для сайтов с динамическими данными
    FastAPI кардинально упрощает разработку backend для таких проектов, сводя настройку к минимуму. К тому же он облегчает получение данных для frontend-части.

  3. Разработчикам API и микросервисов
    FastAPI создан для работы с асинхронными приложениями и высоконагруженными системами. Он идеально подходит для разработки API и микросервисов.

  4. Студентам и начинающим разработчикам

    FastAPI крайне прост в освоении и подходит для быстрого создания учебных проектов и прототипов.

Для понимания простоты реализации серверов на FastAPI посмотрите пример получения актуальных курсов валют:

from fastapi import FastAPI
import requests

app = FastAPI()

@app.get("/api/kurs/{currency_code}")
def get_currency_rate(currency_code: str):
	url = f"https://api.exchangerate-api.com/v4/latest/{currency_code.upper()}"
	response = requests.get(url)
    
	if response.status_code == 200:
    	data = response.json()
    	return {
        	"base_currency": data["base"],
        	"date": data["date"],
        	"rates": data["rates"]
    	}
	else:
    	return {"error": "Курсы валют в данное время недоступны"}

Как видно из примера, вы создали полезное FastAPI-приложение (микросервис) с путем http://ваш_домен/api/kurs/rub буквально за несколько секунд.

Но мы не будем останавливаться на простых примерах. В этой статье мы создадим собственное приложение — хранилище переменных окружения для серверов (легковесный аналог Vault и AWS Secrets Manager) с небольшой админкой и доступом к переменным через API.

Наш проект будет реализован с использованием HTML + JavaScript + FastAPI. Назовём наш микросервис ENV Cloud Manager.

Давайте потратим 10 минут на развертывание сервера и изучение кода. Если затем вы решите опубликовать приложение в интернете, ознакомьтесь с разделом «Деплой приложения в публичном пространстве».

А теперь посмотрим на интерфейс приложения.

Главное окно:

Image5

Редактирование ключей:

Image7

Весь код рассматриваемого приложения доступен в репозитории GitHub.

apps

Разворачиваем готовый сервер FastAPI

Установка Python и необходимых библиотек

Для полноценной разработки нам необходимо Установка Python и pip зависит от операционной системы. Ниже приведены инструкции для различных ОС. В нашем примере использована версия 3.11.

Установка Python и pip на Windows

Скачайте Python:

  • Перейдите на официальный сайт Python: https://www.python.org/.
  • В разделе «Downloads» выберите последнюю версию Python для Windows.
  • Скачайте установщик (рекомендуется выбирать версию с «Windows Installer»).

Запустите установщик:

  • В процессе установки обязательно поставьте галочку на пункте «Add Python to PATH» (это добавит Python в системные переменные среды).
  • Нажмите «Install Now» для установки Python и pip.

Проверка установки:

Откройте командную строку (Win + R, введите cmd и нажмите «Enter»).

Введите команду:

python --version

Команда выведет установленную версию Python.

Проверьте установку pip:

pip --version

Установка Python и pip на macOS

Установка Python 3:

Установите Homebrew (если еще не установлен) из приложения Терминал:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Установите Python 3:

brew install python

Проверка установки (вам подойдет любая версия, начиная с 3.9):

python3 --version

Проверьте версию pip:

pip3 --version

Установка Python и pip на Linux (Ubuntu/Debian)

Обновите пакеты и установите Python 3 и pip:

sudo apt update
sudo apt install python3 python3-venv python3-pip -y

Проверьте версию Python:

python3 --version

Проверьте версию pip:

pip3 --version

Создание виртуального окружения

Для начала давайте создадим проект. Чтобы не засорять ваш компьютер новыми фреймворками, важно правильно организовать его техническую базу. Один из ключевых моментов — создание отдельного пространства для управления зависимостями.

Для этого мы будем использовать встроенный инструмент Python — venv, который создаёт собственную версию интерпретатора Python и набор установленных библиотек. Разделение окружений помогает избежать конфликтов между зависимостями, особенно когда разные проекты требуют разных версий одних и тех же библиотек.

Благодаря такой изоляции вы можете быть уверены, что обновление пакетов в одном проекте не повлияет на работоспособность других. По сути, создаётся отдельная папка внутри проекта, содержащая Python и все установленные для работы библиотеки.

Как создать виртуальное окружение:

Откройте терминал. 

Перейдите в директорию вашего проекта:

cd /путь/к/вашему/проекту

Создайте виртуальное окуружение:

python -m venv venv

Активируйте виртуальное окружение:

source venv/bin/activate

Устанавливаем FastAPI приложение (шаблон):

Создайте необходимые директории:

mkdir app && mkdir ./app/static && mkdir ./app/db

Скачайте файл requirements.txt с необходимыми для проекта зависимостями:

wget https://raw.githubusercontent.com/tecspda/timeweb-fastapi-demo/refs/heads/main/requirements.txt -O requirements.txt

Пакеты, которые мы установим с помощью requirements.txt (полный список):

Пакет

Версия

Описание

annotated-types

0.7.0

Расширения для аннотированных типов в Python, используются в Pydantic.

anyio

4.8.0

Асинхронная многопоточная библиотека, работает с asyncio, trio, curio.

cffi

1.17.1

Интерфейс для взаимодействия с C-кодом, используется cryptography.

click

8.1.8

Библиотека для создания CLI-приложений на Python.

cryptography

44.0.0

Криптографическая библиотека, предоставляет SSL/TLS, хеширование, шифрование.

fastapi

0.115.7

Современный веб-фреймворк для создания API, основанный на Pydantic и Starlette.

h11

0.14.0

HTTP/1.1-протокол в виде библиотеки, используется uvicorn.

idna

3.10

Поддержка Internationalized Domain Names (IDN) в Python.

pycparser

2.22

C-парсер на Python, используется cffi.

pydantic

2.10.6

Валидация данных и управление типами, активно применяется в FastAPI.

pydantic_core

2.27.2

Оптимизированное ядро Pydantic, написанное на Rust.

sniffio

1.3.1

Определяет, в каком асинхронном окружении выполняется код (asyncio/trio).

SQLAlchemy

2.0.37

ORM для работы с базами данных в Python.

starlette

0.45.3

ASGI-фреймворк, на котором построен FastAPI.

typing_extensions

4.12.2

Дополнительные аннотации типов для совместимости со старыми версиями Python.

uvicorn

0.34.0

ASGI-сервер для запуска FastAPI и других ASGI-приложений.

Выполните команду для установки зависимостей:

pip install -r requirements.txt

Далее введите в терминале следующие команды:

wget https://raw.githubusercontent.com/tecspda/timeweb-fastapi-demo/refs/heads/main/main.py -O ./main.py 
wget https://raw.githubusercontent.com/tecspda/timeweb-fastapi-demo/refs/heads/main/app/static/index.html -O ./app/static/index.html 
wget https://raw.githubusercontent.com/tecspda/timeweb-fastapi-demo/refs/heads/main/app/static/admin.html -O ./app/static/admin.html

Структура приложения:

/app
  /db
    -пока пусто
  /static
    -admin.html
    -index.html
/venv
- main.py
- requirement.txt

Как видите, для реализации проекта нам нужно всего три файла. Админка реализована в admin.html, вся backend-часть — в main.py, а index.html служит простой заглушкой.

При этом весь этот пакет (и фронт, и бэк) работает на FastAPI без каких-либо дополнительных утилит.

Запуск приложения:

Для запуска нашего приложения в качестве фонового сервера воспользуемся пакетом Uvicorn — это быстрый ASGI-сервер для Python, предназначенный для запуска веб-приложений, написанных с использованием асинхронных фреймворков, таких как FastAPI.

Перед запуском настройте собственные значения переменных ALLOWED_IPS, VALID_TOKENS, ADMIN_USERNAME, ADMIN_PASSWORD в файле main.py.

Выполните следующую команду в терминале:

uvicorn main:app --reload

main:app означает, что мы запускаем файл main.py как приложение-демон, постоянно находящееся в оперативной памяти сервера и принимающее запросы.

Теперь вы можете вопользоваться админкой по адресу: http://127.0.0.1:8000/admin

Или проверить запросы GET, POST, PUT и DELETE запросы по адресам:

  • GET http://127.0.0.1:8000/api/variables/ — получить список переменных

  • GET http://127.0.0.1:8000/api/variables/{key} — получить значение ключа

  • PUT http://127.0.0.1:8000/api/variables/{key} — обновить значение ключа

  • DELETE http://127.0.0.1:8000/api/variables/{key} — удалить ключ.

Если вы запускаете команду приложение на своем публичном облачном сервере, чтобы uvicorn слушал все адреса (0.0.0.0), запустите приложение с флагом --host:

uvicorn main:app --host 0.0.0.0 --port 8000 --reload

Также проверьте ограничения портов, если, например,  у вас установлен firewall ufw, то запустите в терминале следующую команду:

sudo ufw allow 8000
sudo ufw reload

При первом запуске вы можете увидеть подобное сообщение:

Image4

Это сделано для безопасности. Просто добавьте свой IP-адрес (на картинке 172.17.0.1) в переменную ALLOWED_IPS и обновите страницу.

Вот и всё! Мы всего за 5 минут, с минимальным количеством кода, написали FastAPI-приложение, которое позволяет централизованно хранить настройки для Docker-контейнеров, серверов и т. д., а также раздавать их всем вашим VPS.

Деплой FastAPI приложения в интернете

Для автоматизированного развертывания статических и динамических веб-приложений, построенных на популярных фреймворках, отлично подходит сервис Timeweb Cloud Apps. ЭЭта платформа предоставляет удобный функционал для деплоя приложений прямо из Git-репозитория. 

После настройки вы получаете уникальный публичный URL, который позволяет быстро получить доступ к вашему приложению. Такой подход значительно экономит время и ресурсы, предлагая надёжное решение для быстрого запуска ваших проектов.

Перед тем как развернуть приложение на проде, не забудьте изменить значения переменных ALLOWED_IPS, VALID_TOKENS, ADMIN_USERNAME, ADMIN_PASSWORD в файле main.py (подробное описание их назначения приведено ниже в разделе «Изучаем код микросервиса»).

Далее загрузите (push) ваше приложение в GitHub. Для этого используйте следующие команды в терминале:

echo "venv/" >> .gitignore
echo "__pycache__/" >> .gitignore
git init
git add .
git rm -r --cached venv __pycache__
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:ВАШ-НИК/НАЗВАНИЕ-РЕПОЗИТОРИЯ.git
git push -u origin main

Перейдите на страницу  https://timeweb.cloud/my/apps/create, выберите раздел «Backend» и продукт «FastAPI». 

Image1

Далее прокрутите страницу вниз до раздела «Репозиторий». Здесь мы подключим ваш GitHub-репозиторий для автоматического деплоя и формирования публичного URL.

Если вы впервые используете Timeweb Cloud Apps, нажмите кнопку «Добавить аккаунт». Затем авторизуйте наш сервис в GitHub. В процессе подключения GitHub может запросить ввод PIN-кода — это одно из последних обновлений, направленных на повышение безопасности авторизации.

Image6

Если ваш Github уже привязан к нашей системе, то просто пропустите первый шаг (стрелка 1) и переходите ко второму.

Image3

Укажите ваш GitHub-репозиторий с FastAPI-приложением (стрелка 2) и нажмите кнопку «Запустить деплой» (стрелка 3). Дополнительные настройки деплоя для нашего приложения не требуются.

После этого система развернёт сервер, задеплоит приложение в продакшн, создаст публичную ссылку — и вуаля! Ваш микросервис готов. Просто дождитесь завершения процесса деплоя.

Image2

Первичный запуск (деплой) сервера может занять 7–10 минут, тогда как все последующие изменения в вашем GitHub-репозитории будут применяться в течение 20–30 секунд.

После первого запуска вы увидите сообщение об ограничении доступа для вашего IP-адреса.

Image4

Вам необходимо добавить ваш IP-адрес (в нашем примере 172.17.0.1) в переменную ALLOWED_IPS и выполнить следующие команды в терминале:

git add .  # Добавляем все файлы
git commit -m "Добавлен IP"
git push origin main

После этого подождите 10-30 секунд, пока платформа Timeweb Cloud Apps  перезапустит проект. Далее обновите страницу /admin и наслаждайтесь приложением.

Изучаем код приложения на FastAPI

Внешний вид и функционал

Приложение состоит из админки и серверной части. Сначала рассмотрим backend, который как раз и реализован на основе фреймворка FastAPI.

Файл main.py содержит следующие классы и методы:

Общие классы и методы

Variable и UpdateVariable

Эти классы - это просто структуры, которые описывают поля, которые приходят в запросах. Используются для стандартизации названий и типов полей (просто для культурного стиля программирования).

encrypt_value и decrypt_value

Методы шифруют ваши данные перед записью в БД, а также расшифровывают после получения из БД.

Классы, методы и переменные sqlite


DATABASE_URL

Переменная, содержащая путь к sqlite базе, в которой мы храним данные

EnvironmentVariable

Класс Содержит модель таблицы sqlite, в которой мы храним данные

get_db

Метод содержит сессию для работы с базой данных

Классы, методы и переменные Fastapi

ALLOWED_IPS и VALID_TOKENS

Переменные содержат список IP-адресов, с которых вы будете обращаться к вашему сервису, а также Bearer-токен, который необходимо передавать в заголовке (header) запроса для предотвращения несанкционированного доступа.

add_middleware CORS

Метод для ограничения доступа к сервису из JavaScript-запросов.

IPAndTokenMiddleware -> dispatch

Метод производит проверку доступа к api с разрешенных IP-адресов (в тоже время доступ к статическим страницам открыт для всех)

authenticate

Метод обеспечивает авторизацию в /admin по логину и паролю.

read_index и read_admin

Методы генерируют статические страницы админки и главной страницы.

list_variables

Метод отдает по запросу список всех сохраненных в БД ключей без их значений.

add_variable

Метод принимает запрос на добавление данных в БД.

update_variable

Метод принимает запрос на изменение значения конкретного ключа в БД.

delete_variable

Метод принимает запрос на удаление конкретного ключа из БД.

Как это работает

При обращении к вашему сервису внешним запросом метод add_middleware выполняет проверку:

  • Для API-запросов — проверяет, есть ли IP-адрес в списке разрешённых.
  • Для HTML-страниц (например, админки или заглушки) — переводит запрос на выдачу статической страницы.

Применение этого метода обеспечивает высокий уровень безопасности вашего приложения:

  • Защищённые разделы становятся недоступными для пользователей, не прошедших аутентификацию, а также для запросов с неавторизованных IP-адресов.
  • Дополнительная защита реализуется через Bearer-токен, который должен присутствовать во всех запросах к системе.

Такая многоуровневая система безопасности помогает минимизировать риски.

После проверки FastAPI возвращает либо запрошенные данные через API, либо статическую HTML-страницу (например, админку).

Подготовили для вас выгодные тарифы на облачные серверы

Заключение

Итак, мы реализовали лёгкий и удобный микросервис для управления переменными окружения. ENV Cloud Manager демонстрирует, как с помощью FastAPI можно быстро и эффективно создавать полноценные веб-приложения с REST API, админкой и удобным интерфейсом.

Этот проект легко адаптировать для реальных условий — например, для использования в небольших командах или стартапах.

Как можно расширить функциональность

Рекомендуем вам развивать своё приложение, добавляя новые возможности. Попробуйте реализовать:

  • Расширенную аутентификацию (например, с использованием OAuth2).
  • Логирование изменений переменных.
  • Интеграцию с системами мониторинга (например, Prometheus и Grafana).

Создавая собственные API, вы на практике убедитесь, насколько FastAPI удобен и позволяет решать задачи с минимальным количеством кода.

Этот проект может стать отправной точкой для дальнейших экспериментов и изучения новых технологий.

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
14 февраля 2025 г.
30
14 минут чтения
Средний рейтинг статьи: 5
Пока нет комментариев