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

300 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`:
```caddy
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):
```text
env/
app.env
db.env
redis.env
nats.env
agents.env
city.env
secondme.env
```
### 4.1. `app.env` (основні змінні)
```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. Міграції бази даних
На сервері:
```bash
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)
На сервері:
```bash
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
```
або, якщо образи збираються локально:
```bash
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."**