- Create /docs structure (microdao, daarion, agents) - Organize 61 cursor technical docs - Add README files for each category - Copy key documents to public categories - Add GitHub setup instructions and scripts
481 lines
14 KiB
Markdown
481 lines
14 KiB
Markdown
# 25 — Deployment & Infrastructure (MicroDAO)
|
||
|
||
*Deployment процес, середовища, інфраструктура, CI/CD, моніторинг*
|
||
|
||
---
|
||
|
||
## 1. Purpose & Scope
|
||
|
||
Цей документ описує інфраструктуру розгортання та процеси деплою для:
|
||
|
||
- microdao (messenger + agents + governance + wallet);
|
||
- DAARION.city core (Second Me, Gift Fabric, Citizenship);
|
||
- інтеграційних модулів (Embassy, RWA, Energy Union, GREENFOOD та ін.);
|
||
- Event-driven шару (NATS/JetStream / Outbox).
|
||
|
||
Ціль:
|
||
|
||
- чітко визначити середовища (local/dev/staging/prod);
|
||
- описати основні компоненти інфра-стеку;
|
||
- стандартизувати CI/CD pipeline та керування міграціями;
|
||
- визначити моніторинг, логування, backup/restore.
|
||
|
||
---
|
||
|
||
## 2. Environments
|
||
|
||
### 2.1 Local
|
||
|
||
Призначення:
|
||
|
||
- швидка розробка;
|
||
- інтеграційні тести окремого розробника.
|
||
|
||
Особливості:
|
||
|
||
- Postgres (може бути Supabase local або Docker);
|
||
- NATS/JetStream локально (Docker);
|
||
- фронтенд (Next.js / React) — `localhost:3000`;
|
||
- backend/edge functions — `localhost:PORT`;
|
||
- спрощена конфігурація OAuth/Email.
|
||
|
||
### 2.2 Dev
|
||
|
||
Призначення:
|
||
|
||
- інтеграція гілок;
|
||
- тестування нових фіч командою.
|
||
|
||
Особливості:
|
||
|
||
- часто автодеплой з `develop` / `dev` гілки;
|
||
- нестабільне середовище, допускається breaking changes;
|
||
- окремі ресурси БД, NATS, storage.
|
||
|
||
### 2.3 Staging
|
||
|
||
Призначення:
|
||
|
||
- передпродакшн середовище, максимально наближене до прод;
|
||
- тестування релізів перед викоткою на prod;
|
||
- smoke-тести, регресія, перевірка міграцій.
|
||
|
||
Особливості:
|
||
|
||
- конфігурації максимально збігаються з prod;
|
||
- ті ж версії Postgres/NATS/Redis;
|
||
- мінімум тестових даних, максимально наближені сценарії.
|
||
|
||
### 2.4 Prod
|
||
|
||
Призначення:
|
||
|
||
- бойове середовище для реальних користувачів та агентів;
|
||
- висока доступність, резервування, SLA.
|
||
|
||
Особливості:
|
||
|
||
- реплікація БД;
|
||
- резервні копії (snapshots + PITR);
|
||
- горизонтальне масштабування критичних сервісів;
|
||
- жорсткі політики безпеки, rate limiting, WAF.
|
||
|
||
---
|
||
|
||
## 3. Core Infrastructure Components
|
||
|
||
### 3.1 Database Layer
|
||
|
||
- **Postgres** (Supabase / керований Postgres):
|
||
- основні таблиці: `users`, `teams`, `channels`, `messages`, `projects`, `tasks`, `agents`, `wallets`, `staking_ringk`, `payouts`, `rwa_inventory`, `embassy_*`, `access_keys`, `capabilities`, `bundles`, `audit_log`, `outbox_events`.
|
||
- схема й міграції описані в `27_database_schema_migrations.md`.
|
||
|
||
Рекомендації:
|
||
|
||
- один кластер на середовище (dev/staging/prod);
|
||
- не змішувати dev/staging/prod в одному кластері;
|
||
- використовувати read-replicas для prod (аналітика, довгі запити).
|
||
|
||
### 3.2 Event Bus
|
||
|
||
- **NATS JetStream** (або інший стейтовий event bus):
|
||
- теми (topics) з `Data Model & Event Catalog`;
|
||
- консьюмери: Wallet service, Gift Fabric, Embassies, Telemetry.
|
||
|
||
Роль:
|
||
|
||
- децентралізований шар подій;
|
||
- відв'язка інтерфейсу, агентів і бекенду;
|
||
- реалізація Outbox pattern (`outbox_events` → NATS).
|
||
|
||
### 3.3 Application Layer
|
||
|
||
- **API Gateway / Edge Functions**:
|
||
- REST/gRPC/API для frontend, агентів, інтеграцій;
|
||
- PEP (Policy Enforcement Point) для capability-check;
|
||
- валідація access keys, підписів Embassy, rate limiting.
|
||
|
||
- **Domain Services** (можуть бути edge functions / окремі сервіси):
|
||
- Messaging Service (channels/messages/followups);
|
||
- Projects/Tasks Service;
|
||
- Agent Orchestrator (agent_runs, router);
|
||
- Wallet & Payouts;
|
||
- Embassy Service;
|
||
- Governance Service.
|
||
|
||
### 3.4 Frontend
|
||
|
||
- SPA/SSR (React/Next.js):
|
||
- DAARION.city UI;
|
||
- microdao messenger + agents;
|
||
- admin-консоль (telemetry, управління платформи).
|
||
|
||
Рекомендації:
|
||
|
||
- окремі build'и для user-facing (місто) і admin/ops;
|
||
- environment-specific base URLs.
|
||
|
||
### 3.5 Object Storage
|
||
|
||
- зберігання файлів/документів/зображень:
|
||
- user uploads (файли в каналах, документи);
|
||
- логи агентів (якщо великі);
|
||
- snapshot-и моделей/конфігів (якщо потрібно).
|
||
|
||
---
|
||
|
||
## 4. High-level Topology
|
||
|
||
Текстовий опис (спрощено):
|
||
|
||
- Frontend (Web) → API Gateway
|
||
- API Gateway → Postgres / NATS / Services
|
||
- Agent Mesh ↔ API Gateway ↔ NATS
|
||
- Embassy Webhooks ↔ API Gateway ↔ NATS ↔ Services
|
||
- Observability Stack (Prometheus/Grafana/Logs) → читає метрики з усіх компонентів
|
||
|
||
(Опційно можна додати Mermaid-діаграму у цьому файлі.)
|
||
|
||
---
|
||
|
||
## 5. Deployment Workflows
|
||
|
||
### 5.1 Local
|
||
|
||
- `docker-compose` / Supabase local:
|
||
- `postgres`, `nats`, `minio` (опційно), `api`, `web`.
|
||
- Команди:
|
||
- `npm run dev` (web);
|
||
- `supabase db push` / `pnpm prisma migrate` / `golang-migrate up` (залежно від стеку);
|
||
- запуск background workers для Outbox → NATS.
|
||
|
||
### 5.2 Dev
|
||
|
||
Trigger:
|
||
|
||
- push в `develop` / `dev` гілку.
|
||
|
||
Кроки:
|
||
|
||
1. CI: `lint`, `tests`, `typecheck`.
|
||
2. Build:
|
||
- web (static/SSR bundle);
|
||
- backend/edge functions (docker image або окремі функції).
|
||
3. Deploy:
|
||
- apply DB migrations;
|
||
- деплой API/edge;
|
||
- деплой web (dev URL).
|
||
4. Smoke-тести:
|
||
- healthcheck endpoints;
|
||
- простий сценарій (login → створити канал → відправити повідомлення).
|
||
|
||
### 5.3 Staging
|
||
|
||
Trigger:
|
||
|
||
- merge/push у `main` з тегом `rc-*` або окрема `release/*` гілка.
|
||
|
||
Кроки:
|
||
|
||
1. CI повторює dev-пайплайн.
|
||
2. DB migrations:
|
||
- запуск у режимі dry-run (якщо підтримується);
|
||
- застосування на staging.
|
||
3. Deploy API, workers, web (staging domain).
|
||
4. Інтеграційні тести:
|
||
- агенти, Embassy вебхуки, payouts, RWA, governance flows.
|
||
|
||
### 5.4 Prod
|
||
|
||
Trigger:
|
||
|
||
- тег `vX.Y.Z` або manual approval релізу.
|
||
|
||
Кроки:
|
||
|
||
1. Freeze staging (ті самі артефакти).
|
||
2. Backup prod DB (snapshot).
|
||
3. Apply migrations на prod.
|
||
4. Deploy API/edge з поетапним rollout (canary / по одному інстансу).
|
||
5. Deploy web (атомарна заміна, rollback через попередній build).
|
||
6. Post-deploy чек-лист:
|
||
- логін/чат;
|
||
- ворк агента;
|
||
- простий payout симуляційний (якщо є test mode);
|
||
- кілька Embassy викликів у test-конфігурації.
|
||
|
||
---
|
||
|
||
## 6. Configuration & Environment Variables
|
||
|
||
Приклад розділів `.env` (загальні ключі):
|
||
|
||
### 6.1 Database
|
||
|
||
- `DB_HOST`
|
||
- `DB_PORT`
|
||
- `DB_NAME`
|
||
- `DB_USER`
|
||
- `DB_PASSWORD`
|
||
- `DB_SSLMODE` (prod: `require`)
|
||
|
||
### 6.2 NATS / Event Bus
|
||
|
||
- `NATS_URL`
|
||
- `NATS_USER`
|
||
- `NATS_PASSWORD`
|
||
- `NATS_STREAM_EVENTS` (ім'я стріму для event catalog)
|
||
- `NATS_CONSUMER_WALLET`
|
||
- `NATS_CONSUMER_EMBASSY`
|
||
- `NATS_CONSUMER_GIFT_FABRIC`
|
||
|
||
### 6.3 Auth / Security
|
||
|
||
- `JWT_SECRET` (для capability-token, якщо локально)
|
||
- `SESSION_SECRET`
|
||
- `E2EE_PUBLIC_KEY` / `E2EE_PRIVATE_KEY` (або інший механізм)
|
||
- `RATE_LIMIT_GLOBAL`
|
||
- `RATE_LIMIT_PER_KEY`
|
||
|
||
### 6.4 Embassy
|
||
|
||
- `EMBASSY_WEBHOOK_SECRET_ENERGY_UNION`
|
||
- `EMBASSY_WEBHOOK_SECRET_GREENFOOD`
|
||
- `EMBASSY_WEBHOOK_SECRET_WATER_UNION`
|
||
- `EMBASSY_WEBHOOK_SECRET_ESSENCE_STREAM`
|
||
|
||
### 6.5 Wallet / Chain
|
||
|
||
- `CHAIN_RPC_URL`
|
||
- `CHAIN_EXPLORER_URL`
|
||
- `WALLET_SAFE_ADDRESS` (якщо multi-sig)
|
||
- `WALLET_PRIVATE_KEY` (краще в KMS, не у .env)
|
||
|
||
---
|
||
|
||
## 7. Secrets Management
|
||
|
||
- Prod/staging secrets **не зберігати** у `.env` у репозиторії.
|
||
- Використовувати:
|
||
- KMS (GCP/AWS/Azure) або
|
||
- менеджер секретів (Vault, Doppler, SSM Parameter Store тощо).
|
||
- Workers/API при старті:
|
||
- тягнуть секрети з KMS/secret manager;
|
||
- кешують лише в пам'яті (не логувати).
|
||
|
||
Особливо чутливі:
|
||
|
||
- ключі Embassy Webhooks;
|
||
- wallet private keys / hot signer;
|
||
- JWT/Session secrets.
|
||
|
||
---
|
||
|
||
## 8. Database Migrations
|
||
|
||
Посилання: `27_database_schema_migrations.md`.
|
||
|
||
Правила:
|
||
|
||
1. Міграції **ніколи** не змінюють/ламають дані під час prod розгортання без попередніх data-migrations.
|
||
2. `up`/`down` повинні бути ідемпотентними (DROP IF EXISTS / CREATE IF NOT EXISTS).
|
||
3. Порядок виконання:
|
||
- local: розробник запускає всі `000XXX_*.sql` + `seeds.sql`;
|
||
- dev/staging/prod: CI/CD застосовує міграції у правильному порядку.
|
||
|
||
---
|
||
|
||
## 9. Event Bus & Outbox Pattern
|
||
|
||
- Event producer-и (API/Services) не відправляють події напряму в NATS у критичних шляхах — спочатку пишуть у `outbox_events`.
|
||
- Background worker:
|
||
- читає `outbox_events` з `processed=false`;
|
||
- публікує у NATS відповідний topic;
|
||
- позначає `processed=true`, `processed_at=NOW()`.
|
||
|
||
Це зменшує ймовірність втрати подій при часткових збоях.
|
||
|
||
---
|
||
|
||
## 10. Monitoring & Logging
|
||
|
||
### 10.1 Метрики
|
||
|
||
- **API/Backend**:
|
||
- latency per endpoint;
|
||
- error rate (5xx, 4xx);
|
||
- rate limiting triggers.
|
||
|
||
- **DB**:
|
||
- connections;
|
||
- slow queries;
|
||
- реплікація (lag).
|
||
|
||
- **NATS/Event Bus**:
|
||
- backlog per consumer;
|
||
- delivery errors;
|
||
- redeliveries.
|
||
|
||
- **Agents**:
|
||
- кількість запусків;
|
||
- середня тривалість run;
|
||
- помилки агента (LLM/tool errors).
|
||
|
||
### 10.2 Логи
|
||
|
||
- централізований збір (ELK / Loki / Cloud Logging);
|
||
- кореляційні ID:
|
||
- `X-Request-ID` на кожен HTTP-запит;
|
||
- propagation у NATS payload (trace_id / correlation_id).
|
||
|
||
---
|
||
|
||
## 11. Backups & Restore
|
||
|
||
### 11.1 Backups
|
||
|
||
- Prod:
|
||
- щоденні повні snapshots;
|
||
- WAL / PITR (Point-In-Time Recovery) на 7–30 днів;
|
||
- Staging:
|
||
- щоденні або раз на 2–3 дні (за потреби).
|
||
|
||
### 11.2 Restore Policy
|
||
|
||
- тестовий restore на окремий тимчасовий кластер мінімум раз на місяць;
|
||
- документований сценарій:
|
||
- відновлення в новий кластер;
|
||
- redirect трафіку (якщо потрібно).
|
||
|
||
---
|
||
|
||
## 12. Rollout Strategies
|
||
|
||
### 12.1 API/Backend
|
||
|
||
- **Canary**:
|
||
- невеликий відсоток трафіку на новий реліз;
|
||
- моніторинг помилок/латентності;
|
||
- поступове збільшення.
|
||
|
||
- **Blue-Green**:
|
||
- parallel stack (blue/green);
|
||
- перемикання через load balancer/DNS.
|
||
|
||
### 12.2 Frontend
|
||
|
||
- атомарний switch build'ів (immutable artifacts);
|
||
- rollback = переключення на попередній build.
|
||
|
||
### 12.3 Feature Flags
|
||
|
||
- складні зміни (особливо агенти, Gift Fabric, RWA) — за feature flags:
|
||
- flags зберігаються в БД або у спеціальному конфіг-сервісі;
|
||
- викочуються спочатку на dev/staging, потім для частини користувачів у prod.
|
||
|
||
---
|
||
|
||
## 13. CI/CD Pipeline (Reference)
|
||
|
||
Псевдо-YAML для орієнтира:
|
||
|
||
```yaml
|
||
name: deploy
|
||
|
||
on:
|
||
push:
|
||
branches: [develop, main]
|
||
tags: ['v*']
|
||
|
||
jobs:
|
||
build-and-test:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
- uses: actions/setup-node@v4
|
||
with:
|
||
node-version: '20'
|
||
- run: npm ci
|
||
- run: npm run lint
|
||
- run: npm test
|
||
- run: npm run build:web
|
||
- run: npm run build:api
|
||
|
||
migrate-and-deploy:
|
||
needs: build-and-test
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
- name: Run DB migrations
|
||
run: |
|
||
./scripts/migrate.sh up
|
||
- name: Deploy API
|
||
run: |
|
||
./scripts/deploy_api.sh
|
||
- name: Deploy Web
|
||
run: |
|
||
./scripts/deploy_web.sh
|
||
```
|
||
|
||
---
|
||
|
||
## 14. Завдання для Cursor
|
||
|
||
```text
|
||
You are a senior DevOps engineer. Set up deployment infrastructure using:
|
||
- 25_deployment_infrastructure.md
|
||
- 27_database_schema_migrations.md
|
||
- 05_coding_standards.md
|
||
|
||
Tasks:
|
||
1) Create docker-compose.yml for local development (postgres, nats, minio).
|
||
2) Create CI/CD pipeline configuration (GitHub Actions / GitLab CI).
|
||
3) Create deployment scripts (migrate.sh, deploy_api.sh, deploy_web.sh).
|
||
4) Set up environment variable templates (.env.example).
|
||
5) Create monitoring dashboard configuration (Grafana / Prometheus).
|
||
|
||
Output:
|
||
- list of modified files
|
||
- diff
|
||
- summary
|
||
```
|
||
|
||
---
|
||
|
||
## 15. Результат
|
||
|
||
Після впровадження цієї інфраструктури:
|
||
|
||
- чітко визначені середовища та процеси деплою;
|
||
- стандартизований CI/CD pipeline;
|
||
- готовність до масштабування та production deployment;
|
||
- моніторинг та логування для всіх компонентів;
|
||
- надійні backup/restore процеси.
|
||
|
||
---
|
||
|
||
**Версія:** 1.0
|
||
**Останнє оновлення:** 2024-11-14
|
||
|
||
|