Files
clientsflow/docs/adr/0002-pocketbase-gvisor-microapps.md
2026-03-23 11:47:14 +07:00

81 lines
4.2 KiB
Markdown
Raw Permalink 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.

# ADR-0002: PocketBase + gVisor Platform For Agent-Built Microapps
Дата: 2026-03-23
Статус: accepted
## Контекст
Нужен минимальный платформенный слой, в котором агент может собирать микро-приложения для клиентов по жёсткому шаблону:
- данные и auth живут в PocketBase;
- код приложения исполняется изолированно в Deno runtime;
- delivery идёт только из шаблонного репозитория и после валидации;
- control-plane хранится в основной Prisma-базе проекта.
Ключевые ограничения:
- агент не должен деплоить произвольный код вне шаблона;
- приложения разных клиентов должны быть логически и операционно изолированы;
- база данных и execution host разводятся в разные контуры;
- rollout и rollback должны опираться на versioned deploy records.
## Решение
Принимаем MVP-схему из двух data-plane компонентов и одного control-plane:
1. `PocketBase`
- отдельный сервис данных для микро-приложений;
- каждое приложение получает собственный `pocketbaseInstanceId` и URL;
- доступ из микро-приложения идёт только через разрешённый service account.
2. `Deno runner` в `gVisor`
- каждое приложение исполняется как контейнер с `runsc`;
- runtime получает лимиты по CPU/RAM/PIDs и whitelist по env/network;
- runner запускает только Deno entrypoint из шаблона микро-приложения.
3. `backend` как control-plane
- хранит `MicroAppProject`, `MicroAppRuntimeConfig`, `MicroAppDeployment`;
- выдаёт конфиг для provisioning и delivery;
- знает путь репозитория, ветку, template checksum, preview/prod URL.
## Поток
1. Агент создаёт проект только из `microapps/templates/pocketbase-deno-dashboard`.
2. Валидатор проверяет структуру репозитория и `app.config.ts`.
3. Control-plane создаёт или обновляет запись `MicroAppProject`.
4. Delivery pipeline фиксирует новую версию в `MicroAppDeployment`.
5. Runner поднимает Deno-контейнер через `gVisor`.
6. Публикация идёт через preview domain, а promotion в основной домен выполняется отдельно.
## Delivery
- source of truth: git-репозиторий приложения;
- deploy unit: versioned template-compliant app directory;
- preview создаётся автоматически после успешной валидации;
- production переключается через отдельный promote шаг;
- rollback выполняется redeploy предыдущей записи `MicroAppDeployment`.
## Домены
На первом этапе платформа хранит:
- `primaryDomain`
- `previewDomain`
Привязка доменов и DNS-автоматизация выносятся в отдельный шаг интеграции с Cloudflare и не блокируют запуск control-plane MVP.
## Последствия
Плюсы:
- появляется единый control-plane для клиентских микро-приложений;
- есть жёсткий шаблон и проверяемый runtime policy;
- база данных и execution host разделены;
- есть основа для preview/prod flow и rollback.
Минусы:
- runtime по-прежнему требует отдельного delivery automation поверх git;
- provisioning PocketBase instance пока остаётся внешней операцией;
- домены и TLS-автоматизация ещё не включены в MVP-каркас.