docs: контракт для агентов, архитектура и план фаз

AGENTS.md — индекс, команды и обязательные ограничения (Decimal для денег, не
конвертировать валюту на записи, SDK T-Invest ровно в одном модуле, аналитика
читает только confirmed). docs/ai/ — архитектура, соглашения, эксплуатация и
полный план на шесть фаз с проверками для каждой.
This commit is contained in:
Dmitry
2026-09-18 13:43:31 +03:00
parent 563308a08b
commit 220f027652
7 changed files with 836 additions and 0 deletions
+37
View File
@@ -0,0 +1,37 @@
# Эксплуатация
## VPS (Docker Compose)
```bash
cp .env.example .env # заполнить POSTGRES_PASSWORD, JWT_SECRET (openssl rand -hex 32), DOMAIN, токены
just up # docker compose up -d --build: db, api (миграции при старте), worker, caddy, pg-backup
docker compose exec api fintracker create-user you@example.com
```
- Caddy: авто-TLS на `DOMAIN`, `/api/*` → api:8000, остальное — Flutter web из `app/build/web`.
- Worker — единственный экземпляр планировщика; ручной синк через `POST /api/v1/sync/{source}`
ставит задачу в `sync_job`, worker забирает её раз в 5 с.
- `pg-backup` делает `pg_dump -Fc` раз в сутки в `./backups`, хранит 14 дней; off-site копию
настраивает хост (rclone/cron), см. открытый вопрос в плане.
## Восстановление
```bash
docker compose up -d db
docker compose exec -T db pg_restore -U $POSTGRES_USER -d $POSTGRES_DB --clean < backups/fintracker_<ts>.dump
docker compose up -d
```
Метрики пересчитываются из raw/core: `docker compose exec worker fintracker metrics refresh`
(появится в фазе 2).
## Секреты
Только `.env` на сервере. В чат и в git не попадают. T-Invest токен — read-only.
## Проверено с podman (2026-09-17)
- `podman 5.8` + `podman-compose 1.6`: стек `db api worker` поднимается, `depends_on.condition: service_healthy` работает.
- Имена образов в `docker-compose.yml` и `Dockerfile` полностью квалифицированы (`docker.io/library/...`) — podman без `unqualified-search-registries` короткие имена не резолвит.
- **Прокси хоста впекается в образ** при `podman build`/`compose --build` (`HTTP_PROXY` попадает в `Config.Env`), после чего запросы к `localhost` внутри контейнера идут в недостижимый прокси. Поэтому `just up` собирает с `env -u …proxy…`. На VPS без прокси это ни на что не влияет.
- `env_file: .env` в compose — буквальный путь; `--env-file` меняет только подстановку `${…}` в самом compose-файле.
- Команда `api` использует `exec`, иначе `sh -c` не передаёт SIGTERM uvicorn'у и compose добивает контейнер по таймауту.