Skip to content

Ресурсы и реализация

Всё, что нужно для запуска Agentfy.ai 2.0. Hetzner-centric (дешёвый компьют, co-located, EU/GDPR); AWS сжимается до опциональных S3 / KMS / SES — или до нуля. Cognito и Secrets Manager не используются. Про когда (если вообще) что-то из этого переезжает в AWS — см. Облачную стратегию.

Что из этого списка реально развёрнуто

Список ниже — план. То, что работает сегодня, объявлено во втором репозитории, Agentfy/gitops; Два репозитория перечисляют это файл за файлом. Коротко — и это меняет здесь четыре строки:

  • api, app, admin и Redis работают только в контуре dev. Аналога agentfy-apps/dev/ для прода нет.
  • Postgres не в кластере. Он стоит на двух отдельных VM в Hetzner, настроенных ansible/roles/postgres; DATABASE_URL api смотрит на 10.0.1.1:5432. Никакого CloudNativePG нигде нет.
  • LightRAG не существует — ни сервиса, ни чарта, ни Application.
  • Вопрос объектного хранилища решён в инфраструктуре и не используется в коде. terraform/storage.tf создаёт по одному приватному версионируемому бакету Hetzner Object Storage на контур, а AWS S3 оставляет только под состояние Terraform и бэкапы. Единственный драйвер хранилища в этом репозитории по-прежнему пишет в локальный путь на диске, так что в эти бакеты пока никто не читает и не пишет.

Ещё одна поправка, к разделу Секреты и ключи ниже: инфра-креды, включая KEK, попадают в кластер из HashiCorp Vault через External Secrets Operator, а не из написанного руками Kubernetes Secret. Под по-прежнему видит именно Kubernetes Secret — но он произведён, а не написан.

Kubernetes (Hetzner)

Один k3s-кластер (как Ranch) с тремя нодпулами — control plane крутится на своей ноде(ах), отдельно от нагрузок. Полная топология + автоскейлинг: Кластер и ноды.

пулчто крутитскейл
control-plane (tainted, изолирован)k3s server: API server · etcd · scheduler · controller-managerфикс: 1 (dev) / 3 (prod HA)
core (всегда онлайн)api, app, admin, сервис LightRAG, Postgres/RedisHPA на приложение + cluster-autoscaler на пуле
workers (tainted, node-role: workers)эфемерные worker-Job'ы (+ тяжёлые задачи)scale-to-zero на задачу; cluster-autoscaler 0 → N под нагрузкой

Плюс: Ingress (Traefik/nginx) + cert-manager (TLS), container registry, GitOps CD (ArgoCD), cluster-autoscaler + HPA/VPA, per-tenant ResourceQuota/LimitRange и NetworkPolicy (по умолчанию deny-all egress; allowlist Core WS + нужные домены).

Деплои

деплойпулжизненный цикл
apicoreпостоянный (Core) и эфемерный мозг (тот же образ, на турн)
app / admincoreпостоянный (Nuxt)
сервис LightRAG (Python)coreпостоянный; agent/knowledge — тонкий gateway к нему
workerworkersk8s Job по запросу на задачу; несёт Playwright + Chromium (поднимает браузер in-pod для браузерных задач — без отдельного пула); ttlSecondsAfterFinished + idle-reaper

Жизненный цикл Job — см. Worker на Kubernetes.

Хранилища

storeчто держитхост
Postgres (self-host)app-данные · chat · usage/billing · зашифрованные секреты · вектор (pgvector) · граф (AGE) для LightRAGHetzner
Redisочередь BullMQ · pub/sub (events) · локи · idle-таймерыHetzner
Object storagesystem/file (артефакты, аватары, доки, PDF-инвойсы, снапшоты браузера/workspace)S3 / R2 / Hetzner OS (открыто)
(Neo4j + Qdrant/Milvus)только если выбран large-scale путь LightRAG вместо pgvector+AGEHetzner

Postgres обязан быть self-host, потому что unified-бэкенд LightRAG требует расширений pgvector + Apache AGE (managed Neon блокирует AGE). Поэтому Postgres несёт app-данные и вектор + граф агента — один store для small/medium.

Инфра знаний / LightRAG

  • Отдельный Python-сервис на пуле core; agent/knowledge проксирует к нему через MCP.
  • Бэкенд по масштабу: много небольших базPostgres (pgvector + AGE); миллионы в одной базеNeo4j + Qdrant/Milvus. Бенчмарк до коммита.
  • Индексация async/в очереди (BullMQ), инкрементальная, с бюджетом токенов — стена это LLM-извлечение, не хранение. Per-base workspaces изолируют тенантов.

См. Знания — LightRAG.

Секреты и ключи

  • Секреты агента: зашифрованы в Postgres (app-layer envelope, AES-256-GCM, DEK завёрнут KEK) — без Secrets Manager. См. Секреты агента.
  • KEK: k8s Secret, инжектится только в api (MVP) → опц. AWS KMS (заворачивает только DEK) позже.
  • Auth: своя JWT (issuer = Core) — без Cognito. Та же схема минтит короткоживущие runtime session tokens в Job воркера (без долгоживущих кред в поде).

Observability и ops

  • Sentry (ошибки), Loki/Grafana (логи/метрики) self-host.
  • Бэкапы: Postgres (PITR) + object storage; аудит-лог (admin/audit) рантайм-сессий.
  • HA: реплицированные core-деплои; Postgres/Redis с репликами по мере роста.

Внешние SaaS (ни Hetzner, ни AWS)

  • Claude API (Anthropic) — LLM (system/llm).
  • Платежи — PayPal (+ Stripe?).
  • Email/SMTPResend (MVP) → AWS SES на объёмах; сменяемо за notification/email.

AWS-след — что (если что-то) остаётся

AWS-сервисиспользованиенужен?
S3object storage для system/fileопц. — против Hetzner OS / R2
KMSзаворачивание KEK секретовопц. — против KEK в k8s Secret
SESтранзакционная почта на объёмахпозже — MVP стартует на Resend (не AWS)
Cognitoвыкинут (своя JWT)
Secrets Managerвыкинут (шифрование в Postgres)
Bedrock / Lambda / DynamoDB / Step Functionsвыкинуты (Claude API / BullMQ / Postgres)

Итого: Agentfy.ai 2.0 может крутиться полностью на Hetzner (+ Claude/платежи/почта как внешние SaaS); AWS сведён максимум к нескольким managed-удобствам (S3/KMS/SES), каждое опционально.

Рекомендуемое разделение

КонцернГде
k8s (api/app/admin/worker/LightRAG)Hetzner
Postgres (+ pgvector + AGE + зашифрованные секреты), RedisHetzner (self-host)
Object storageHetzner OS или AWS S3 / R2 (открыто)
KEK секретовk8s Secret (MVP) → KMS (открыто)
EmailResend (MVP) → AWS SES на объёмах
LLM, платеживнешнее

См. Открытые вопросы — что ещё не решено (провайдер стораджа, vector/graph-бэкенд по масштабу, провайдер биллинга).