Хостинг Python-приложений: деплой Django, Flask и FastAPI

Хостинг Python-приложения начинается с процесса, который вашему приложению нужен для работы. Django и Flask обычно используют WSGI-сервер; FastAPI — ASGI-сервер. Celery-воркер или запланированный скрипт имеют другой жизненный цикл. Выбирайте хост, который поддерживает эти процессы, а также нужные вашему приложению базу данных и хранилище.
Lizard публикует это руководство. Мы проверили документацию по ссылкам фреймворков и провайдеров 9 сентября 2026 года. В примерах используются явные имена модулей, которые нужно адаптировать под свой проект.
Выбирайте среду выполнения до выбора хоста
| Приложение | Продакшн-процесс | Другие требования для проверки |
|---|---|---|
| Django с WSGI | Gunicorn или другой поддерживаемый WSGI-сервер | База данных, миграции, статические файлы и загрузки |
| Django с асинхронными возможностями | Поддерживаемый ASGI-сервер | Обработка соединений и совместимость зависимостей приложения |
| Flask | Продакшн WSGI-сервер | Путь импорта приложения или фабрика, секреты и база данных |
| FastAPI | Uvicorn или другой ASGI-сервер | Запуск задач, конкуренция и подключения к базе данных |
| Celery-воркер | Отдельный потребитель очереди | Брокер, бэкенд результатов при использовании, повторные попытки и завершение |
| Скрипт или batch-задание | Процесс, который запускается и завершается | Расписание, таймаут, статус выхода и долговечный вывод |
Сервер разработки предназначен для разработки. Смотрите официальное руководство по деплою Django, руководство по продакшну Flask и рекомендации по воркерам FastAPI.
Варианты хостинга Python по потребностям
| Хост | Почему стоит рассмотреть | Проверить перед выбором |
|---|---|---|
| Lizard | Веб-сервисы и воркеры с управляемыми сервисами данных и операциями через CLI | Настройки рантайма, подключение БД и измеренное потребление ресурсов |
| Railway | Несколько сервисов в одном проекте | Потребление всех сервисов и кредит тарифа |
| Render | Публичные планы веб-инстансов и воркеров | Отдельная стоимость БД и ограничения бесплатных сервисов |
| PythonAnywhere | Рабочий процесс хостинга с фокусом на Python | Поддержка WSGI/ASGI, исходящий доступ и лимиты задач на вашем плане |
| Cloud Run | HTTP-сервисы, джобы или пулы воркеров | Тип ресурса, режим биллинга, конкуренция и холодные старты |
| Fly.io | Машины в выбранных регионах | Размеры машин, хранилище и сетевые сборы |
| DigitalOcean App Platform | Управляемый деплой из исходников или образа | Поддержка сборки, компоненты приложения и цены на БД |
| Heroku | Привычный рабочий процесс деплоя Python | Текущий план, аддоны и направление продукта |
| VPS | Прямое управление сервером | Обновления, управление процессами, TLS, бэкапы и восстановление |
Используйте сравнение PaaS для более широкого решения о хостинге. Python-значок в таблице фич недостаточен для подтверждения поддержки воркеров или базы данных.
Бесплатный хостинг Python требует лимита нагрузки
Бесплатный тариф может ограничивать исходящие запросы, усыплять неактивный веб-процесс, лимитировать выполнение задач или включать только пробный кредит. Эти условия могут подойти для демо и не подойти для приёмника вебхуков или воркера очереди.
Проверьте правила бесплатных сервисов Render и возможности бесплатного аккаунта PythonAnywhere. Для Cloud Run страница цен описывает бесплатное использование рядом с тарифицируемыми ресурсами. База данных, реестр образов или сетевое использование могут остаться за пределами лимита, на который вы смотрите.
Протестируйте первый запрос после периода тишины и убедитесь, что запланированная или фоновая работа всё ещё выполняется. Описывайте бесплатный вариант через эти лимиты, а не как неограниченный хостинг.
Команды сборки и запуска
Для проекта, использующего requirements.txt, установите его зафиксированные зависимости:
python -m pip install -r requirements.txtИспользуйте пакетный менеджер и локфайл, уже лежащие в репозитории, если проект использует uv, Poetry или другой инструмент. Включите продакшн-сервер в зависимости. Не полагайтесь на пакет, установленный только на вашем ноутбуке.
Для Django, где myproject/wsgi.py определяет приложение:
gunicorn myproject.wsgi:application --bind "0.0.0.0:${PORT:-3000}"Для Flask, где app.py экспортирует app:
gunicorn app:app --bind "0.0.0.0:${PORT:-3000}"Для FastAPI, где main.py экспортирует app:
uvicorn main:app --host 0.0.0.0 --port "${PORT:-3000}"Эти команды ожидают, что оболочка развернёт переменную порта. JSON-массив Docker CMD не делает этого автоматически. Используйте либо документированную поддержку переменных рантаймом, либо shell-обёртку, либо небольшую программу, читающую окружение.
Задавайте количество воркеров исходя из замеров и доступной памяти. Больше процессов — больше памяти и соединений с БД; добавление воркеров не заменяет проверку медленного запроса или блокирующей задачи.
Минимальный контейнер FastAPI
Для приложения с main.py и зафиксированным requirements.txt, содержащим FastAPI и Uvicorn, этот Dockerfile запускает один серверный процесс:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN useradd --create-home appuser
USER appuser
EXPOSE 3000
CMD ["sh", "-c", "exec uvicorn main:app --host 0.0.0.0 --port ${PORT:-3000}"]Выбирайте версию Python, совместимую с проектом. Положите .env, локальные виртуальные окружения, кэши и Git-данные в .dockerignore. В этом примере не устанавливаются лишние системные пакеты; добавляйте только те, что нужны зависимостям.
На Lizard можно принести свой Dockerfile или использовать сборку из исходников. Руководство по деплою описывает варианты. Вашему приложению нужен небольшой health-эндпоинт, а также стоит протестировать эндпоинт, задействующий реальные зависимости.
Проверенный на Lizard деплой FastAPI
Наш публичный пример FastAPI имеет запись деплоя от 9 сентября 2026 года. Тест использовал коммит df522c1, собранный из GitHub в eu-west-lim-a, с портом 8000 и командой запуска Uvicorn в Procfile. Использовались Python 3.13, FastAPI 0.141.1 и Uvicorn 0.52.4. Ручные переопределения сборки или запуска не задавались.
Опубликованная запись проверки сообщает о шести пройденных проверках через публичный HTTPS URL:
| Запрос | Наблюдаемый результат |
|---|---|
GET /health | HTTP 200 с {"status":"ok"} |
GET /docs | HTTP 200; API-интерфейс использует /openapi.json |
GET /openapi.json | HTTP 200; схема содержит маршруты health и echo |
POST /echo с JSON-объектом | HTTP 200 с тем же объектом |
POST /echo с JSON-массивом | HTTP 422 для неверного типа тела |
GET /no-such-route | HTTP 404 |
Откройте живой health-эндпоинт, попробуйте API-интерфейс или следуйте руководству по деплою FastAPI.
Эти результаты покрывают деплой и HTTP-поведение для небольшого приложения без базы данных. Они не измеряют аптайм, пропускную способность или полное время деплоя. Та же запись даёт показание CLI в 11:48 UTC: примерно 0,034 ГБ памяти и примерно $0,00051/час в стоимости ресурсов. Это мгновенное показание, а не месячный счёт; приведённое показание использует тарифы, действовавшие в тот момент. Текущий хостинг Lizard использует pay as you go без ежемесячной подписки; хранилище, трафик и комиссии за платёж могут добавиться к итогу. Приведённый выше Dockerfile — отдельный пример и не воспроизводит точную конфигурацию того деплоя.
Django, Postgres и Celery требуют отдельных проверок
Подключите Managed Postgres через переменную, которую читают настройки Django. Запускайте миграции как контролируемый шаг релиза, а не самостоятельно в каждом веб-воркере. Настройте обработку статических файлов и дайте загруженным файлам долговечное хранилище.
Запускайте Celery как отдельный сервис с тем же соответствующим кодом приложения и своей командой запуска. Настройте брокер явно, например через Managed Redis, если приложение использует Redis. Проверьте повторные попытки, обработку дублирующих задач и завершение перед приёмом продакшн-нагрузки.
Для сервера, которым вы управляете сами, используйте пошаговое руководство по Django на VPS. Для управляемого воркера см. справочник по деплою воркера.
Оцените всё Python-приложение целиком
Включите веб-процессы, воркеры, базу данных, хранимые файлы, бэкапы, трафик и план, нуженный команде. Railway измеряет потребление и применяет оплачиваемый план к использованию. Render публикует планы инстансов. PythonAnywhere сейчас указывает Developer за $10/месяц; сверьте входящие фичи с вашим приложением. Источники: Railway, Render, PythonAnywhere.
У Lizard нет ежемесячной подписки или платы за сервис. Для небольшого приложения, в среднем потребляющего 0,01 vCPU и 0,1 ГБ памяти за 720 часов, с 10 ГБ исходящего трафика, ресурсные сборы итого около $1,53 до комиссий за платёж и налога. Добавьте базу данных, воркер и хранилище, которые нужно вашему Python-приложению. См. разобранный пример и актуальные тарифы. Купленные средства на балансе не сгорают, поэтому тихий месяц не требует покупки нового плана.
FAQ
Можно ли хостить FastAPI на тех же сервисах, что и Django? Часто да, но FastAPI нужен ASGI-сервер. Убедитесь, что хост поддерживает вашу команду запуска и любые долгоживущие соединения или воркеры, которые использует приложение.
Стоит ли использовать runserver в продакшне? Нет. Используйте продакшн WSGI- или ASGI-сервер и проверьте рекомендации фреймворка по деплою.
Почему хост говорит, что моё приложение нездорово? Проверьте логи сборки, статус выхода процесса, путь импорта, привязанный интерфейс и ожидаемый порт. Потом проверьте отсутствующие переменные и подключения зависимостей.
Нужен ли мне Dockerfile? Не на каждом хосте. Сборщик из исходников может создать образ, но вам всё равно нужны правильные зависимости и продакшн-команда запуска.
Какой лучший хост для Python-воркера? Тот, что поддерживает жизненный цикл воркера и его зависимости. Протестируйте потребление очереди, повторные попытки и поведение при рестарте; чисто HTTP-деплой недостаточен.
Разрабатывайте с ИИ. Развёртывайте с Lizard.
Вам не нужна платформенная команда, чтобы выйти в продакшн. Весь ваш облак — в одной команде CLI.
- Рабочие пространства
- —
- Сервисы
- —
- Аддоны
- —
- Развёртывания
- —