Files
fin-tracker/docs/ai/ops.md
T
Dmitry ffc5ed959a feat(app): offline-кэш GET-запросов на дашборде — фаза 5
CacheInterceptor кэширует каждый успешный GET по путь+параметры в drift
(sqlite нативно, wasm+OPFS в браузере) и подменяет им сетевую ошибку;
провайдер отдаёт Cached<T>, экран показывает баннер «данные на …».
Контракт для остальных экранов — docs/ai/offline-cache.md.

flake.nix: libsecret/pkg-config для линуксовой сборки, jq/curl для
just app-web-assets (сборка sqlite3.wasm + drift_worker.js).
2026-09-19 12:40:08 +03:00

37 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Эксплуатация
## 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`.
## Секреты
Только `.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 добивает контейнер по таймауту.