Skip to content

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 1–3 завершені (як у звітах Cursor).
  2. Є готові docker-файли:
  3. docker-compose.all.yml (23 services, port 80)
  4. infra/all-in-one-gateway/docker-compose.yml (порт 8080, dev)
  5. скрипти scripts/start-all.sh, scripts/stop-all.sh
  6. Є PostgreSQL та Redis (або будуть розгорнуті в цьому таску).
  7. Є VPS / dedicated server з Linux (Ubuntu 22.04 LTS або подібне).
  8. Домен 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:

  • порядок запуску всіх міграцій (001–010)
  • команду для 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

  2. GET https://app.daarion.space/api/health → 200

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

  5. Frontend

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

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

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

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

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

  11. Monitoring

  12. Якщо 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. Вимкнути:

  2. прямий доступ до Postgres ззовні

  3. прямий доступ до Redis/NATS ззовні

  4. Обмежити доступ до:

  5. Prometheus

  6. Grafana (або за Basic Auth, або через окремий VPN)

  7. У .env не зберігати секрети в git.

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


10. Acceptance Criteria

  1. Сервер: daarion.space резолвиться на IP VPS.
  2. HTTPS: https://app.daarion.space відкривається без помилок сертифіката.
  3. MVP UX:

  4. користувач може зареєструватися / залогінитись

  5. створити Team / Channel / Project / Follow-up
  6. зайти в City → Rooms, чат, presence
  7. викликати Second Me

  8. Сервіси живі: усі контейнері в docker ps — в статусі healthy / up.

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

  10. DEPLOY_ON_SERVER.md оновлено з урахуванням daarion.space

  11. 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."