FastAPI — это современный, быстрый веб-фреймворк для создания API на Python. Он предназначен для разработки веб-приложений и серверов API с минимальными усилиями и очень высокой производительностью. В данной статье мы рассмотрим быстрый деплой FastAPI приложения с использованием нашего сервера развертывания.
Для создания API:
FastAPI идеально подходит для создания RESTful API, GraphQL API и других типов веб-сервисов.
Позволяет легко определять эндпоинты, обрабатывать входящие запросы и возвращать ответы.
Для высокопроизводительных приложений:
FastAPI основан на асинхронной модели работы (async
/await
), что делает его одним из самых быстрых фреймворков для Python.
По скорости он сравним с GoLang.
Для автоматической генерации документации:
FastAPI автоматически генерирует интерактивную документацию API (через Swagger UI и ReDoc).
Для валидации данных:
Автоматически проверяет типы данных, поступающих в запросах, и возвращает ошибки, если данные не соответствуют ожидаемым типам.
Для асинхронных задач:
Поддерживает асинхронные операции (отдает моментальный ответ и далее параллельно выполняем фоновую отложенную задачу).
Поддержка WebSocket.
Для удобной разработки:
Имеет простой синтаксис.
Для интеграции с OpenAPI и JSON Schema:
Фреймворк автоматически генерирует схемы OpenAPI, что позволяет легко интегрировать ваш API со сторонними инструментами.
Разработчикам корпоративных систем и персональных сайтов
FastAPI прекрасно подходит для быстрой интеграции с базами данных и сторонними сервисами. Он имеет встроенную поддержку валидации данных и асинхронной обработки запросов.
Web-дизайнерам для сайтов с динамическими данными
FastAPI кардинально упрощает разработку backend для таких проектов, сводя настройку к минимуму. К тому же он облегчает получение данных для frontend-части.
Разработчикам API и микросервисов
FastAPI создан для работы с асинхронными приложениями и высоконагруженными системами. Он идеально подходит для разработки API и микросервисов.
Студентам и начинающим разработчикам
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 минут на развертывание сервера и изучение кода. Если затем вы решите опубликовать приложение в интернете, ознакомьтесь с разделом «Деплой приложения в публичном пространстве».
А теперь посмотрим на интерфейс приложения.
Главное окно:
Редактирование ключей:
Весь код рассматриваемого приложения доступен в репозитории GitHub.
apps
Для полноценной разработки нам необходимо Установка Python и pip зависит от операционной системы. Ниже приведены инструкции для различных ОС. В нашем примере использована версия 3.11.
Скачайте Python:
Запустите установщик:
Проверка установки:
Откройте командную строку (Win + R
, введите cmd
и нажмите «Enter»).
Введите команду:
python --version
Команда выведет установленную версию Python.
Проверьте установку pip:
pip --version
Установка 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 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
Создайте необходимые директории:
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
(полный список):
Пакет |
Версия |
Описание |
|
0.7.0 |
Расширения для аннотированных типов в Python, используются в Pydantic. |
|
4.8.0 |
Асинхронная многопоточная библиотека, работает с |
|
1.17.1 |
Интерфейс для взаимодействия с C-кодом, используется |
|
8.1.8 |
Библиотека для создания CLI-приложений на Python. |
|
44.0.0 |
Криптографическая библиотека, предоставляет SSL/TLS, хеширование, шифрование. |
|
0.115.7 |
Современный веб-фреймворк для создания API, основанный на Pydantic и Starlette. |
|
0.14.0 |
HTTP/1.1-протокол в виде библиотеки, используется |
|
3.10 |
Поддержка Internationalized Domain Names (IDN) в Python. |
|
2.22 |
C-парсер на Python, используется |
|
2.10.6 |
Валидация данных и управление типами, активно применяется в FastAPI. |
|
2.27.2 |
Оптимизированное ядро Pydantic, написанное на Rust. |
|
1.3.1 |
Определяет, в каком асинхронном окружении выполняется код ( |
|
2.0.37 |
ORM для работы с базами данных в Python. |
|
0.45.3 |
ASGI-фреймворк, на котором построен FastAPI. |
|
4.12.2 |
Дополнительные аннотации типов для совместимости со старыми версиями Python. |
|
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
При первом запуске вы можете увидеть подобное сообщение:
Это сделано для безопасности. Просто добавьте свой IP-адрес (на картинке 172.17.0.1
) в переменную ALLOWED_IPS
и обновите страницу.
Вот и всё! Мы всего за 5 минут, с минимальным количеством кода, написали FastAPI-приложение, которое позволяет централизованно хранить настройки для Docker-контейнеров, серверов и т. д., а также раздавать их всем вашим VPS.
Для автоматизированного развертывания статических и динамических веб-приложений, построенных на популярных фреймворках, отлично подходит сервис 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».
Далее прокрутите страницу вниз до раздела «Репозиторий». Здесь мы подключим ваш GitHub-репозиторий для автоматического деплоя и формирования публичного URL.
Если вы впервые используете Timeweb Cloud Apps, нажмите кнопку «Добавить аккаунт». Затем авторизуйте наш сервис в GitHub. В процессе подключения GitHub может запросить ввод PIN-кода — это одно из последних обновлений, направленных на повышение безопасности авторизации.
Если ваш Github уже привязан к нашей системе, то просто пропустите первый шаг (стрелка 1) и переходите ко второму.
Укажите ваш GitHub-репозиторий с FastAPI-приложением (стрелка 2) и нажмите кнопку «Запустить деплой» (стрелка 3). Дополнительные настройки деплоя для нашего приложения не требуются.
После этого система развернёт сервер, задеплоит приложение в продакшн, создаст публичную ссылку — и вуаля! Ваш микросервис готов. Просто дождитесь завершения процесса деплоя.
Первичный запуск (деплой) сервера может занять 7–10 минут, тогда как все последующие изменения в вашем GitHub-репозитории будут применяться в течение 20–30 секунд.
После первого запуска вы увидите сообщение об ограничении доступа для вашего IP-адреса.
Вам необходимо добавить ваш IP-адрес (в нашем примере 172.17.0.1
) в переменную ALLOWED_IPS
и выполнить следующие команды в терминале:
git add . # Добавляем все файлы
git commit -m "Добавлен IP"
git push origin main
После этого подождите 10-30 секунд, пока платформа Timeweb Cloud Apps перезапустит проект. Далее обновите страницу /admin
и наслаждайтесь приложением.
Приложение состоит из админки и серверной части. Сначала рассмотрим backend, который как раз и реализован на основе фреймворка FastAPI.
Файл main.py
содержит следующие классы и методы:
|
Эти классы - это просто структуры, которые описывают поля, которые приходят в запросах. Используются для стандартизации названий и типов полей (просто для культурного стиля программирования). |
|
Методы шифруют ваши данные перед записью в БД, а также расшифровывают после получения из БД. |
|
Переменная, содержащая путь к |
|
Класс Содержит модель таблицы |
|
Метод содержит сессию для работы с базой данных |
|
Переменные содержат список IP-адресов, с которых вы будете обращаться к вашему сервису, а также Bearer-токен, который необходимо передавать в заголовке (header) запроса для предотвращения несанкционированного доступа. |
|
Метод для ограничения доступа к сервису из JavaScript-запросов. |
|
Метод производит проверку доступа к api с разрешенных IP-адресов (в тоже время доступ к статическим страницам открыт для всех) |
|
Метод обеспечивает авторизацию в |
|
Методы генерируют статические страницы админки и главной страницы. |
|
Метод отдает по запросу список всех сохраненных в БД ключей без их значений. |
|
Метод принимает запрос на добавление данных в БД. |
|
Метод принимает запрос на изменение значения конкретного ключа в БД. |
|
Метод принимает запрос на удаление конкретного ключа из БД. |
При обращении к вашему сервису внешним запросом метод add_middleware
выполняет проверку:
Применение этого метода обеспечивает высокий уровень безопасности вашего приложения:
Такая многоуровневая система безопасности помогает минимизировать риски.
После проверки FastAPI возвращает либо запрошенные данные через API, либо статическую HTML-страницу (например, админку).
Подготовили для вас выгодные тарифы на облачные серверы
Итак, мы реализовали лёгкий и удобный микросервис для управления переменными окружения. ENV Cloud Manager демонстрирует, как с помощью FastAPI можно быстро и эффективно создавать полноценные веб-приложения с REST API, админкой и удобным интерфейсом.
Этот проект легко адаптировать для реальных условий — например, для использования в небольших командах или стартапах.
Рекомендуем вам развивать своё приложение, добавляя новые возможности. Попробуйте реализовать:
Создавая собственные API, вы на практике убедитесь, насколько FastAPI удобен и позволяет решать задачи с минимальным количеством кода.
Этот проект может стать отправной точкой для дальнейших экспериментов и изучения новых технологий.