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-бекенд за масштабом, провайдер білингу).