- 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
8.7 KiB
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. Передумови
- PHASE 1–3 завершені (як у звітах Cursor).
- Є готові 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
- Є PostgreSQL та Redis (або будуть розгорнуті в цьому таску).
- Є VPS / dedicated server з Linux (Ubuntu 22.04 LTS або подібне).
- Домен 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-записи:
daarion.space→ A-запис на IP сервера.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_globalCITY_DEFAULT_ROOMS=general,welcome,buildersTELEMETRY_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 з такими перевірками:
-
API
GET https://app.daarion.space/api/health→ 200GET https://app.daarion.space/api/city/rooms→ список дефолтних кімнатGET https://app.daarion.space/api/secondme/profile(якщо user авторизований)
-
Frontend
-
Відкрити
https://app.daarion.spaceу браузері:- сторінка логіну
- dashboard після входу
- Projects, Follow-ups, Settings
- City → Rooms, Presence, Second Me
-
-
WS
-
WebSocket підключення:
/ws/channels/.../ws/city/rooms/{room_id}/ws/city/presence
-
-
Second Me
- У UI написати prompt → отримати відповідь.
-
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)
-
Вимкнути:
- прямий доступ до Postgres ззовні
- прямий доступ до Redis/NATS ззовні
-
Обмежити доступ до:
- Prometheus
- Grafana (або за Basic Auth, або через окремий VPN)
-
У
.envне зберігати секрети в git. -
Оновити
PHASE_INFRA_READY.mdз прод-статусом.
10. Acceptance Criteria
-
Сервер: daarion.space резолвиться на IP VPS.
-
HTTPS:
https://app.daarion.spaceвідкривається без помилок сертифіката. -
MVP UX:
- користувач може зареєструватися / залогінитись
- створити Team / Channel / Project / Follow-up
- зайти в City → Rooms, чат, presence
- викликати Second Me
-
Сервіси живі: усі контейнері в
docker ps— в статусіhealthy/up. -
Документація:
DEPLOY_ON_SERVER.mdоновлено з урахуванням daarion.spaceDEPLOY_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."