Files
microdao-daarion/docs/tasks/TASK_PHASE_MVP_DEPLOY.md
Apple 3de3c8cb36 feat: Add presence heartbeat for Matrix online status
- matrix-gateway: POST /internal/matrix/presence/online endpoint
- usePresenceHeartbeat hook with activity tracking
- Auto away after 5 min inactivity
- Offline on page close/visibility change
- Integrated in MatrixChatRoom component
2025-11-27 00:19:40 -08:00

8.7 KiB
Raw Blame History

TASK_PHASE_MVP_DEPLOY.md

DAARION MVP — Production Deploy на домен daarion.space

Цей таск готує повний прод-деплой DAARION MVP на домен:

  • https://daarion.space (landing / marketing або redirect)
  • https://app.daarion.space (MVP-продукт: microDAO + City + Agents)

MVP уже реалізовано (Frontend, Agents Core, City Backend, Second Me).
Завдання цієї фази — перенести готовий стек на реальний сервер.


0. Передумови

  1. PHASE 13 завершені (як у звітах Cursor).
  2. Є готові docker-файли:
    • docker-compose.all.yml (23 services, port 80)
    • infra/all-in-one-gateway/docker-compose.yml (порт 8080, dev)
    • скрипти scripts/start-all.sh, scripts/stop-all.sh
  3. Є PostgreSQL та Redis (або будуть розгорнуті в цьому таску).
  4. Є VPS / dedicated server з Linux (Ubuntu 22.04 LTS або подібне).
  5. Домен daarion.space керується тобою (DNS-записи можна змінювати).

1. Цільова архітектура прод-деплою

1.1. Сервер

  • 1× VPS:
    • CPU: 4+ cores
    • RAM: 16+ GB
    • Disk: NVMe 256+ GB
    • OS: Ubuntu 22.04 LTS
  • Docker + Docker Compose встановлені.

1.2. Сервіси

Запускаються через docker-compose.all.yml:

  • gateway / nginx (порт 80 всередині)
  • frontend (Next.js build + nginx/static)
  • microdao-api
  • agents-service
  • city-service
  • secondme-service
  • Postgres
  • Redis
  • NATS
  • Prometheus + Grafana
  • інші core-сервіси, вже визначені в цьому compose

Важливо: prod-деплой бере за основу саме docker-compose.all.yml, а не dev-варіанти.


2. DNS-конфігурація

Налаштувати наступні DNS-записи:

  1. daarion.space → A-запис на IP сервера.
  2. app.daarion.space → A-запис на той самий IP сервера.

Опційно:

  • grafana.daarion.space → для прямого доступу до Grafana (якщо потрібно).
  • api.daarion.space → якщо хочеш окремий субдомен під API (на майбутнє).

3. SSL / HTTPS

Рекомендовано три варіанти (вибери один, реалізуй у таску):

ВАРІАНТ A — Caddy (найпростіший)

  • Запустити Caddy як окремий контейнер / сервіс:
    • слухає 80/443
    • робить HTTPS-термінацію
    • проксить на внутрішній gateway (порт 80 контейнерів Docker)

Приклад Caddyfile:

app.daarion.space {
    reverse_proxy gateway-nginx:80
}

daarion.space {
    redir https://app.daarion.space{uri}
}

ВАРІАНТ B — Nginx + Certbot (класика)

  • Зовнішній nginx на хості:

    • server_name app.daarion.space
    • reverse_proxy → 127.0.0.1:8080 (або 80, залежно від композу)
    • SSL-сертифікати через certbot.

ВАРІАНТ C — Traefik (якщо вже є в інфрі)

  • Traefik як edge router, видає HTTPS, роутить по labels.

4. ENV та секрети

Створити env/ директорію у репозиторії або на сервері (не в git):

env/
  app.env
  db.env
  redis.env
  nats.env
  agents.env
  city.env
  secondme.env

4.1. app.env (основні змінні)

APP_ENV=production
APP_BASE_URL=https://app.daarion.space

DATABASE_URL=postgres://daarion:********@db:5432/daarion
REDIS_URL=redis://redis:6379/0
NATS_URL=nats://nats:4222

JWT_SECRET=***************
ENCRYPTION_KEY=***********   # якщо використовується

4.2. Специфічні

  • SECONDME_AGENT_ID=ag_secondme_global
  • CITY_DEFAULT_ROOMS=general,welcome,builders
  • TELEMETRY_ENDPOINT (якщо є)
  • GF_SERVER_ROOT_URL для Grafana (якщо публікуємо через /grafana/)

У docker-compose.all.yml:

  • підключити .env файли як env_file: до відповідних сервісів.

5. Міграції бази даних

На сервері:

cd /opt/daarion   # приклад шляху деплою
docker compose -f docker-compose.all.yml run --rm migrations-service
# або, якщо в тебе чистий psql:
psql -U postgres -d daarion -f migrations/010_create_city_backend.sql
# + попередні міграції 001..009

Вимога в таску: Описати в README:

  • порядок запуску всіх міграцій (001010)
  • команду для re-run (idempotent)

6. Старт сервісів (docker-compose.all.yml)

На сервері:

cd /opt/daarion
cp env/app.env .env   # якщо Docker Compose очікує .env
docker compose -f docker-compose.all.yml pull   # якщо є образи в registry
docker compose -f docker-compose.all.yml up -d

або, якщо образи збираються локально:

docker compose -f docker-compose.all.yml build
docker compose -f docker-compose.all.yml up -d

Завдання в таску: Оновити scripts/start-all.sh і scripts/stop-all.sh, щоб вони:

  • працювали в prod (з використанням правильного compose-файлу)
  • логували в /var/log/daarion/ (при потребі)

7. Healthchecks та smoke-тести

Створити документ:

docs/DEPLOY_SMOKETEST_CHECKLIST.md з такими перевірками:

  1. API

    • GET https://app.daarion.space/api/health → 200
    • GET https://app.daarion.space/api/city/rooms → список дефолтних кімнат
    • GET https://app.daarion.space/api/secondme/profile (якщо user авторизований)
  2. Frontend

    • Відкрити https://app.daarion.space у браузері:

      • сторінка логіну
      • dashboard після входу
      • Projects, Follow-ups, Settings
      • City → Rooms, Presence, Second Me
  3. WS

    • WebSocket підключення:

      • /ws/channels/...
      • /ws/city/rooms/{room_id}
      • /ws/city/presence
  4. Second Me

    • У UI написати prompt → отримати відповідь.
  5. Monitoring

    • Якщо Grafana/promo публікуються:

      • https://app.daarion.space/grafana/
      • https://app.daarion.space/prometheus/ (optional)

8. Логи та моніторинг

Оновити docs/DEPLOYMENT_OVERVIEW.md:

  • показати, де зберігаються логи:

    • docker logs (для кожного сервісу)
    • опційно — volume з /var/log/...
  • описати:

    • як дивитися Grafana dashboard
    • як перевіряти NATS (jetstream, lag)
    • як перевіряти Redis (presence keys)

9. Безпека (мінімум для MVP)

  1. Вимкнути:

    • прямий доступ до Postgres ззовні
    • прямий доступ до Redis/NATS ззовні
  2. Обмежити доступ до:

    • Prometheus
    • Grafana (або за Basic Auth, або через окремий VPN)
  3. У .env не зберігати секрети в git.

  4. Оновити PHASE_INFRA_READY.md з прод-статусом.


10. Acceptance Criteria

  1. Сервер: daarion.space резолвиться на IP VPS.

  2. HTTPS: https://app.daarion.space відкривається без помилок сертифіката.

  3. MVP UX:

    • користувач може зареєструватися / залогінитись
    • створити Team / Channel / Project / Follow-up
    • зайти в City → Rooms, чат, presence
    • викликати Second Me
  4. Сервіси живі: усі контейнері в docker ps — в статусі healthy / up.

  5. Документація:

    • DEPLOY_ON_SERVER.md оновлено з урахуванням daarion.space
    • DEPLOY_SMOKETEST_CHECKLIST.md існує і відповідає фактичному деплою.

11. Команда для Cursor

"Підготувати повний production deploy для DAARION MVP згідно TASK_PHASE_MVP_DEPLOY.md. Використовувати docker-compose.all.yml, домен daarion.space, субдомен app.daarion.space, HTTPS, міграції, Redis, NATS, City та Second Me."