- PHP 59.1%
- Dart 13.3%
- Python 10%
- Go 8.7%
- JavaScript 5.1%
- Other 3.7%
|
|
||
|---|---|---|
| .claude/skills/epicly-logs | ||
| .forgejo | ||
| .github | ||
| apps | ||
| benchmarks | ||
| docs | ||
| infra | ||
| packages/contracts | ||
| services | ||
| .cbmignore | ||
| .editorconfig | ||
| .env.example | ||
| .env.prod.example | ||
| .env.server-check.example | ||
| .gitattributes | ||
| .gitignore | ||
| .prettierignore | ||
| .prettierrc.json | ||
| AGENTS.md | ||
| ARCHITECTURE.md | ||
| compose.ci.yaml | ||
| compose.composer-proxy.yaml | ||
| compose.dev.yaml | ||
| compose.inference.yaml | ||
| compose.minimal.yaml | ||
| compose.notifications-test.yaml | ||
| compose.notifications.prod.yaml | ||
| compose.notifications.yaml | ||
| compose.prod.composer-proxy.yaml | ||
| compose.prod.overrides.yaml | ||
| compose.prod.server.yaml | ||
| compose.prod.yaml | ||
| compose.server-check.yaml | ||
| compose.tools.yaml | ||
| compose.yaml | ||
| FORGEJO.md | ||
| LICENSE | ||
| Makefile | ||
| PLAN.md | ||
| README.md | ||
Epicly Unstable App
Монорепозиторий Epicly Unstable: PHP 8.5/Symfony 8.1/FrankenPHP, Go Gateway/Notifications, Flutter клиент и Python AI. Архитектура — ARCHITECTURE.md, порядок разработки — PLAN.md.
После P0 добавлена инфраструктура P1.1: default minimal запускает Gateway, Core HTTP с одним worker, отдельные game/background процессы, PostgreSQL и два Redis. Есть миграции, общий игровой runtime и авторизованный transport для Sandbox и Durak (2–6 игроков). Production auth/command path развивается в P1.2–P1.8; первый реальный стенд и Caddy ingress проверены, minimum/capacity приемка остается открытой. Подробности и границы — docs/phases/p1/P1.1.md.
Локальный запуск
Нужны Docker Engine, Compose с include (2.20+), Make и Git. SDK и package managers выполняются в контейнерах. Первый bootstrap требует registry/package repositories.
make bootstrap
make migrate
make auth-init
make check test smoke
# Return to default runtime with demo transport disabled:
docker compose up -d --wait gateway
HTTP: http://localhost:8088, Gateway: http://localhost:8089. HTTP_PORT/GATEWAY_PORT меняются в .env или окружении. Ports только loopback, внешнего Caddy здесь не нужно. /health — liveness; /ready — зависимости роли. /ws использует epicly.v1 и пользовательскую аутентификацию; /demo/ws удалён. WS_ORIGINS — точный allowlist (default http://localhost:8088); при другом HTTP port задайте соответствующий Origin.
make env копирует отсутствующие .env examples без перезаписи. Core vendor/cache находятся в named volumes. make vendor устанавливает locked PHP dependencies в игнорируемый host vendor для IDE, через контейнер. После composer.lock обновляйте обе копии через make bootstrap vendor.
make down сохраняет volumes. down --volumes удаляет игровые/account данные; миграции не откатываются автоматическим удалением таблиц. Для существующего P0 PostgreSQL volume нужны новые service roles: переход и permissions. Новый volume настраивается init script автоматически.
Команды
| Цель | Назначение |
|---|---|
make up / make down |
Запуск / остановка семи minimal сервисов |
make bootstrap / make vendor |
Runtime / host IDE dependencies из lock |
make check / make test / make smoke |
PHP/architecture/format/config, PHPUnit, HTTP |
make domain-test |
P2.1–P2.3: домен, table graph, Sandbox без сервисов |
make console ARGS=about / make logs |
Symfony CLI / HTTP logs |
make format / make php-fix |
Prettier / PHP-CS-Fixer через контейнеры |
make storage-smoke / make amqp-smoke |
Storage / opt-in broker compatibility |
make integrations-bootstrap |
Opt-in RabbitMQ topology, без создания jobs |
make go-check python-check client-check |
Go/Python/Flutter toolchain checks |
make contracts-test contracts-asyncapi |
P0.4 protocol fixtures и schema validation |
make live-acceptance |
Действующие live/fault контракты Gateway и Core |
Heavy AI/Flutter/tooling запускаются явно (make tools-build, make ai-check, make client-build client-android-build). Default не требует RabbitMQ, AI, notifications, object storage, metrics или отдельных processes на partition.
Ресурсы и первый тестовый стенд
Исходные budgets: 1 HTTP worker, Gateway pool=2, PHP game/background memory=96 MiB, PG connections=30/shared_buffers=64 MiB, Redis maxmemory state=96/security=32 MiB с headroom/AOF everysec/noeviction. Counts, quotas, memory и batches конфигурируются в compose.minimal.yaml. Суммарные container limits — 1120 MiB, без ОС/build/ingress. Это не минимальная RAM хоста.
На дев-машине 12 logical CPUs/32 GiB idle container memory около 141 MiB; cached restart до healthy 6–7s. На первом стенде i5-3470/7.43 GiB container working set около 143–154 MiB, cached restart 8s; HTTPS/WSS, heartbeat и рестарты проверены через внешний Caddy. Результаты стенда. Поддерживаемый minimum CPU/RAM еще не определен: нужны контролируемые memory pressure/capacity испытания. Process RSS измерен отдельно, абсолютный startup peak не установлен. Процедура, условия и результаты — P1.1. Полный пользовательский WS/reconnect проверяется после готовности transport.
Production / selfhost
Локальный compose.yaml объединяет общую базу, tools и dev overrides до подключения модели. Инструменты SDK включаются профилем tools, PCOV — профилем coverage, RabbitMQ — integrations. В production эти dev/tooling overrides не подключаются.
compose.prod.yaml использует тот же minimal состав, production image без dev mounts/Xdebug, отдельные secrets и существующую external network caddy. Только Core HTTP и Gateway подключены к ingress; приложение и DB/Redis не публикуют host ports. Инструкции, exact trusted proxies и маршруты — infra/caddy.
cp .env.prod.example .env.prod
# Fill all secrets, PUBLIC_URL and exact TRUSTED_PROXIES before starting.
docker compose --env-file .env.prod -f compose.prod.yaml up --build --wait
make DOCKER_COMPOSE='docker compose --env-file .env.prod -f compose.prod.yaml' migrate
Внешний Caddy в этих командах не создается и не перезагружается. Production counter transport выключен; публичный игровой API появится в следующих пунктах P1. Один PG, без standby; minimal не обещает HA или сохранение каждого hot committed хода.
Структура и документы
apps/core — HTTP/CLI и migrations; apps/gateway — Go runtime и probes; apps/client — Flutter; services/notifications — Go; services/ai — Python; packages/contracts — P0.4 protocol schemas/fixtures; infra — runtime bootstrap/ingress/tool images; benchmarks — изолированные измерения.
- ADR, conventions, ownership, license/assets.
- Dependencies, quality gates, contracts.
- P0.1, P0.5, P1.1.
- Symfony Docker происхождение runtime.
В Git только .env examples с публичными local defaults. Рабочие env/секреты игнорируются. Production секреты — локальные файлы deployment или vault. Теги latest в reproducible runtime не используются.
P1.2: auth endpoints, signing key rotation, security projection/recovery и локальный fault probe описаны в docs/phases/p1/P1.2.md. make auth-smoke проверяет HTTP → PostgreSQL → Redis → Gateway, временно останавливая локальные security/background containers.
Heartbeat и presence P1.5: гарантии и проверки, make presence-crash-smoke; presence Lua на настоящем Redis проверяет make go-check, PHP presence/broker tests входят в общий suite.
Прямой WS/REST admission и проверки двух Gateway: P1.6, make admission-smoke. Redis worker, fencing, background persistence и recovery: P1.7; их tests входят в общий suite.
Gate M1 пройден: запуск и приемка. Его действующие runtime-проверки входят в make live-acceptance.