3.0 KiB
Архитектура проекта
Репозиторий разделен по зонам ответственности рантайма:
backend/ Python-код приложения
bot/ Telegram-бот, aiohttp API, вебхуки, сервисы
config/ Pydantic-настройки и загрузчики тарифов/тем
db/ SQLAlchemy-модели, DAL, миграции
main_backend.py точка входа aiohttp backend
main_worker.py точка входа фонового worker
main_migrate.py одноразовый запуск миграций
requirements.txt Python-зависимости рантайма
frontend/ Svelte/Vite Mini App и админка
src/ исходный код Svelte
scripts/ вспомогательные скрипты сборки frontend
package.json Node-скрипты и зависимости
deploy/
docker/ Dockerfile, nginx- и caddy-конфиги рантайма
examples/ готовые Docker Compose примеры запуска
data/ данные рантайма, монтируемые в контейнеры
locales/ переводы бота и Web App
tests/ Python-тесты
Основной docker-compose.yml находится в корне репозитория, чтобы docker compose up оставался простым продакшен-путем. Он собирает три прикладных образа из deploy/docker/Dockerfile:
backend: aiohttp API и вебхуки.worker: worker тарифов, синхронизация с панелью, обработчики очередей вебхуков.frontend: статические Svelte-ассеты, которые отдает nginx.
Сервис migrate - одноразовый контейнер на базе backend-образа. Он входит в стандартный Compose-граф: Postgres и Redis переходят в healthy-состояние, migrate применяет Base.metadata.create_all и ожидающие schema_migrations, а затем backend и worker стартуют только после успешного завершения migrate. Так миграции остаются автоматическими для docker compose up, но не запускаются внутри каждой backend-реплики.
Python-импорты намеренно остаются в пространствах bot.*, config.* и db.*. Контейнеры рантайма выставляют PYTHONPATH=/app/backend; локальные тесты используют такую же раскладку через pytest.ini.
Основные команды:
docker compose up -d --build
docker compose run --rm migrate
docker compose logs -f backend worker frontend
npm run build:webapp
pytest -q