Приложения на Python: Django, Flask и FastAPI.
Как определяются и запускаются проекты на Django, Flask и FastAPI, какую точку входа мы ищем, статические файлы, миграции и запуск Celery.
Репозиторий с 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 в репозитории; тогда мы собираем по нему как есть.