Приложения на Python: Django, Flask и FastAPI.

Как определяются и запускаются проекты на Django, Flask и FastAPI, какую точку входа мы ищем, статические файлы, миграции и запуск Celery.

2 МИН ЧТЕНИЯ

Репозиторий с requirements.txt, pyproject.toml, Pipfile или manage.py — это проект на Python. Мы распознаём Django, Flask и FastAPI и запускаем их на рабочем сервере приложений — добавлять его самостоятельно не нужно.

Как проект собирается и запускается

  • Python 3.11.
  • Зависимости — pip install -r requirements.txt или pip install . для pyproject.toml.
  • Сервер — Django и Flask работают на gunicorn, FastAPI — на uvicorn. Сервер мы добавляем в установку сами.

Django

  • Распознаётся по manage.py или django в зависимостях.
  • Точка входа берётся из DJANGO_SETTINGS_MODULE в manage.py — <project>.wsgi:application.
  • Статические файлы — во время сборки выполняется python manage.py collectstatic. Отдавайте их из приложения с помощью WhiteNoise (добавьте его в middleware) или из объектного хранилища.
  • Миграции — рекомендуемая команда выпуска — python manage.py migrate --noinput. Она выполняется при каждом развёртывании до того, как новая версия начнёт принимать посетителей; если она завершилась ошибкой, текущая версия продолжает работать.
  • Добавьте свой домен и адрес rivervo.app в ALLOWED_HOSTS (например, из переменной) и задайте CSRF_TRUSTED_ORIGINS для форм по HTTPS.

Flask и FastAPI

Мы ищем файл, который создаёт приложение, — app.py, main.py, wsgi.py, application.py или server.py, — и переменную, в которой оно хранится:

# app.py
from flask import Flask
app = Flask(__name__)      # → запускается как app:app
# main.py
from fastapi import FastAPI
app = FastAPI()            # → запускается как main:app

Если приложение создаётся в другом месте (фабрика приложения, пакет), задайте Настройки → Настройки сборки → Команда запуска, например:

gunicorn "myproject:create_app()" --bind 0.0.0.0:$PORT
uvicorn myproject.api:app --host 0.0.0.0 --port $PORT

Базы данных

Добавьте в проект PostgreSQL или MySQL и используйте DATABASE_URL — через dj-database-url для Django или напрямую через SQLAlchemy. См. Базы данных.

Celery и другие фоновые процессы

Добавьте в проект Valkey и укажите Celery REDIS_URL. Запустите обработчик:

  • на вкладке Процессы как фоновый процесс — celery -A myproject worker -l info;
  • или отдельным сервисом — фоновым процессом со своими ресурсами;
  • Celery beat — ещё одним фоновым процессом, celery -A myproject beat -l info, — или периодическую команду как команду по расписанию или задачу по расписанию.

См. Сервисы проекта.

Файлы, которые сохраняются между развёртываниями

Каждое развёртывание начинается со свежей копии вашего репозитория. Файлы, которые приложение записывает в /data, сохраняются между развёртываниями и ежедневно попадают в резервные копии; всё, что записано в другие места, пропадает после следующего развёртывания. Для загрузок пользователей используйте объектное хранилище (для Django — django-storages с переменными S3_*).

Другие проекты на Python

Проекту на Python, который не использует ни один из этих фреймворков, нужен собственный Dockerfile в репозитории; тогда мы собираем по нему как есть.

Всё ещё не можете разобраться?

Напишите живому инженеру — медианный ответ менее 3 минут в любое время суток.

Написать в поддержку