- 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
300 lines
8.0 KiB
Markdown
300 lines
8.0 KiB
Markdown
# TASK_PHASE_MATRIX_PREPARE.md
|
||
|
||
DAARION — PHASE 4: MATRIX PREPARE (Без деплою)
|
||
|
||
Цей таск **підготовчий**:
|
||
ми створюємо **повну структуру й конфіги для Matrix + Element Web + TURN**,
|
||
але **нічого не деплоїмо і не запускаємо**.
|
||
|
||
---
|
||
|
||
## 0. Жорсткі обмеження (дуже важливо)
|
||
|
||
Cursor **НЕ МАЄ ПРАВА** в цій фазі:
|
||
|
||
- запускати Synapse, Element, TURN
|
||
- змінювати існуючі docker-compose файли
|
||
- додавати Matrix у прод-інфру
|
||
- змінювати gateway, порти, SSL
|
||
|
||
Це **тільки підготовка файлів** для майбутньої **PHASE MATRIX FULL**.
|
||
|
||
---
|
||
|
||
## 1. Структура каталогів
|
||
|
||
Створити:
|
||
|
||
```text
|
||
infra/
|
||
matrix/
|
||
synapse/
|
||
homeserver.yaml
|
||
workers.yaml
|
||
log.config
|
||
postgres/
|
||
init.sql
|
||
turn/
|
||
turnserver.conf
|
||
element-web/
|
||
config.json
|
||
gateway/
|
||
matrix.conf
|
||
schemas/
|
||
events/
|
||
matrix_event.schema.json
|
||
README_MATRIX.md
|
||
```
|
||
|
||
---
|
||
|
||
## 2. Synapse — шаблони конфігів
|
||
|
||
### 2.1 `synapse/homeserver.yaml`
|
||
|
||
Шаблон (без реальних ключів і паролів):
|
||
|
||
* `server_name: "matrix.daarion.space"` (placeholder)
|
||
* `public_baseurl: "https://matrix.daarion.space/"` (placeholder)
|
||
* `database:` → Postgres (без реальних паролів)
|
||
* `listeners:`:
|
||
|
||
* порт 8008 (http)
|
||
|
||
* `registration:`:
|
||
|
||
* `enable_registration: false`
|
||
* `registration_shared_secret: "<TO_BE_FILLED>"` (placeholder comment)
|
||
|
||
* `media_store_path: "/data/media"` (placeholder)
|
||
* `federation_domain_whitelist` (коментар, не обов'язково)
|
||
* `modules:`:
|
||
|
||
* залишити секцію порожньою або з коментарями для майбутніх MSC
|
||
|
||
* `log_config: /config/log.config`
|
||
|
||
**Важливо:** у файлі мають бути **коментарі**, що це шаблон і реальні значення будуть заповнені в PHASE MATRIX FULL.
|
||
|
||
### 2.2 `synapse/workers.yaml`
|
||
|
||
Шаблон worker-конфіга:
|
||
|
||
```yaml
|
||
worker_app: generic_worker
|
||
|
||
worker_name: worker1
|
||
|
||
worker_listeners:
|
||
- type: http
|
||
port: 9101
|
||
resources:
|
||
- names: [client, federation]
|
||
compress: false
|
||
|
||
worker_daemonize: false
|
||
|
||
worker_log_config: /config/log.config
|
||
|
||
worker_replication_host: synapse
|
||
worker_replication_port: 9093
|
||
worker_replication_http_port: 9093
|
||
```
|
||
|
||
* коментарі, як це буде використовуватись у майбутньому.
|
||
|
||
### 2.3 `synapse/log.config`
|
||
|
||
Мінімальний logging конфіг (YAML), з рівнем `INFO` та коментарями.
|
||
|
||
---
|
||
|
||
## 3. Postgres schema init
|
||
|
||
`postgres/init.sql` — SQL-шаблон:
|
||
|
||
* створити БД `synapse`
|
||
* створити роль `synapse` з паролем `'CHANGE_ME'` (коментар, що змінити)
|
||
* дати права на БД
|
||
|
||
```sql
|
||
create database synapse;
|
||
create user synapse with encrypted password 'CHANGE_ME';
|
||
grant all privileges on database synapse to synapse;
|
||
```
|
||
|
||
Коментар: у PHASE MATRIX FULL буде або використовуватись офіційний мигратор Synapse, або helm/compose, а це — лише стартова заготівка.
|
||
|
||
---
|
||
|
||
## 4. TURN/STUN конфіг
|
||
|
||
`turn/turnserver.conf` — шаблон для coturn:
|
||
|
||
* `listening-port=3478`
|
||
* `fingerprint`
|
||
* `lt-cred-mech`
|
||
* `realm=daarion.space`
|
||
* `user=matrix:CHANGE_ME`
|
||
* `total-quota=100`
|
||
* `bps-capacity=0`
|
||
|
||
З великими коментарями:
|
||
|
||
* про використання real secrets
|
||
* про те, що TLS/DTLS налаштовуватиметься в PHASE MATRIX FULL
|
||
|
||
---
|
||
|
||
## 5. Element Web конфіг
|
||
|
||
`element-web/config.json` — базовий шаблон:
|
||
|
||
```json
|
||
{
|
||
"default_server_config": {
|
||
"m.homeserver": {
|
||
"base_url": "https://matrix.daarion.space",
|
||
"server_name": "daarion.space"
|
||
}
|
||
},
|
||
"brand": "DAARION Matrix",
|
||
"integrations_ui_url": "https://scalar.vector.im/",
|
||
"integrations_rest_url": "https://scalar.vector.im/api",
|
||
"bug_report_endpoint_url": null,
|
||
"features": {},
|
||
"show_labs_settings": true,
|
||
"defaultCountryCode": "UA",
|
||
"disable_custom_urls": true,
|
||
"disable_3pid_login": true
|
||
}
|
||
```
|
||
|
||
З коментарями (у README):
|
||
|
||
* як і де це буде використовуватись
|
||
* що сторінка `/element/` буде віддавати цей SPA
|
||
|
||
---
|
||
|
||
## 6. Gateway конфіг (Nginx) — шаблон
|
||
|
||
`gateway/matrix.conf`:
|
||
|
||
```nginx
|
||
# Шаблон. Не підключати до прод nginx поки що.
|
||
|
||
server {
|
||
listen 80;
|
||
server_name matrix.daarion.space;
|
||
|
||
location /_matrix/ {
|
||
proxy_pass http://matrix-homeserver:8008;
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Forwarded-For $remote_addr;
|
||
}
|
||
|
||
location /element/ {
|
||
root /var/www/element;
|
||
try_files $uri /index.html;
|
||
}
|
||
}
|
||
```
|
||
|
||
Коментар великими літерами:
|
||
**"ЦЕ ШАБЛОН. НЕ АКТИВУВАТИ, ПОКИ НЕ БУДЕ PHASE MATRIX FULL."**
|
||
|
||
---
|
||
|
||
## 7. Schemas — майбутній Bridge
|
||
|
||
`schemas/events/matrix_event.schema.json`:
|
||
|
||
JSON Schema для подій, які:
|
||
|
||
* Matrix → DAARION (через майбутній bridge)
|
||
* DAARION → Matrix
|
||
|
||
```json
|
||
{
|
||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||
"title": "Matrix Event (Bridge)",
|
||
"type": "object",
|
||
"properties": {
|
||
"event_id": { "type": "string" },
|
||
"room_id": { "type": "string" },
|
||
"sender": { "type": "string" },
|
||
"type": { "type": "string" },
|
||
"origin_server_ts": { "type": "integer" },
|
||
"content": { "type": "object" }
|
||
},
|
||
"required": ["event_id", "room_id", "sender", "type", "content"]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 8. README_MATRIX.md
|
||
|
||
Документ повинен описати:
|
||
|
||
### 8.1. Ролі
|
||
|
||
* Synapse — Matrix homeserver
|
||
* Element Web — клієнт
|
||
* TURN — медіа (voice/video, на майбутнє)
|
||
* Gateway — HTTP reverse proxy
|
||
* Bridge (майбутній) — DAARION City / Agents ↔ Matrix
|
||
|
||
### 8.2. Фази
|
||
|
||
Описати **5 фаз**:
|
||
|
||
1. **Phase 4 — Prepare (цей таск)**
|
||
|
||
* файли, структури, без деплою.
|
||
|
||
2. **Phase 5 — Base Synapse Deploy**
|
||
|
||
* розгортання Synapse + Postgres + TLS.
|
||
|
||
3. **Phase 6 — Element Web + Gateway**
|
||
|
||
* деплой статичного SPA, `/element/` route, `/_matrix/`.
|
||
|
||
4. **Phase 7 — Federation + Multi-node**
|
||
|
||
* кілька нод DAARION Matrix, federation keys, SRV-записи.
|
||
|
||
5. **Phase 8 — DAARION Bridge**
|
||
|
||
* агентний міст: public rooms ↔ Matrix rooms, presence, events.
|
||
|
||
### 8.3. Безпека
|
||
|
||
* зберігання ключів
|
||
* обмеження доступу
|
||
* E2EE keys (відповідальність клієнта)
|
||
* логування та privacy
|
||
|
||
---
|
||
|
||
## 9. Acceptance Criteria
|
||
|
||
1. Директорія `infra/matrix/` існує з усіма піддиректоріями й файлами.
|
||
2. Усі конфіги (`homeserver.yaml`, `workers.yaml`, `log.config`, `config.json`, `turnserver.conf`, `matrix.conf`) — є, містять валідний YAML/JSON/NGINX-синтаксис.
|
||
3. `postgres/init.sql` — є, описує базову схему БД (без реальних паролів).
|
||
4. `schemas/events/matrix_event.schema.json` — валідний JSON Schema.
|
||
5. `README_MATRIX.md` — повністю описує архітектуру, фази, безпеку та майбутні кроки.
|
||
6. **ЖОДНОГО** нового сервісу не додано в docker-compose.
|
||
7. **ЖОДЕН** Matrix-сервіс не запускається в цій фазі.
|
||
|
||
---
|
||
|
||
## 10. Команда для Cursor
|
||
|
||
**"Підготувати структуру та конфіги для Matrix згідно TASK_PHASE_MATRIX_PREPARE.md.
|
||
НЕ змінювати існуючі docker-compose, НЕ запускати Synapse/Element/Turn,
|
||
тільки створити файли та README."**
|
||
|