- 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
DAARION All-in-One Gateway
Version: 1.0.0
Purpose: HTTP Gateway з path-based routing для локальної інфраструктури
🎯 Що це таке
All-in-One HTTP Gateway — це єдина точка входу для всіх мікросервісів DAARION/microDAO.
Переваги:
- ✅ Один порт замість 10+ різних портів
- ✅ Path-based routing — чіткі шляхи
/api/,/ws/,/grafana/ - ✅ WebSocket підтримка —
/ws/*для real-time - ✅ Production-ready — готовий до публікації на домені
- ✅ Docker-based — один
docker compose up -d
Що він дає
До (без gateway):
http://localhost:8000 → microdao API
http://localhost:8001 → WebSocket
http://localhost:8008 → Matrix
http://localhost:3000 → Grafana
http://localhost:9090 → Prometheus
http://localhost:8081 → RAG
http://localhost:8082 → Notifications
Після (з gateway):
http://localhost:8080/api/ → microdao API
http://localhost:8080/ws/ → WebSocket
http://localhost:8080/matrix/ → Matrix
http://localhost:8080/grafana/ → Grafana
http://localhost:8080/prometheus/ → Prometheus
http://localhost:8080/rag/ → RAG
http://localhost:8080/notify/ → Notifications
🚀 Локальний запуск
1. Підготовка
cd infra/all-in-one-gateway
# Копіювати .env
cp .env.example .env
# За потреби відредагувати .env
nano .env
2. Запуск
# Підняти всі сервіси
docker compose up -d
# Перевірити статус
docker compose ps
# Подивитися логи
docker compose logs -f gateway-nginx
3. Перевірка
Health check:
curl http://localhost:8080/healthz
# Очікується: OK
MicroDAO API:
curl http://localhost:8080/api/health
Grafana:
http://localhost:8080/grafana/
Prometheus:
http://localhost:8080/prometheus/
Matrix:
curl http://localhost:8080/matrix/_matrix/client/versions
4. Зупинка
# Зупинити всі сервіси
docker compose down
# Зупинити і видалити volumes (⚠️ видалить дані!)
docker compose down -v
🗺️ Маршрутизація
| Path | Target Service | Port | Protocol |
|---|---|---|---|
/api/ |
microdao-api |
8000 | HTTP |
/ws/ |
microdao-ws |
8001 | WebSocket |
/matrix/ |
matrix-homeserver |
8008 | HTTP |
/_matrix/ |
matrix-homeserver |
8008 | HTTP (Matrix protocol) |
/grafana/ |
grafana |
3000 | HTTP |
/prometheus/ |
prometheus |
9090 | HTTP |
/rag/ |
rag-service |
8081 | HTTP |
/notify/ |
notification-service |
8082 | HTTP |
/healthz |
gateway (internal) | - | HTTP |
📦 Сервіси
Infrastructure (4)
-
postgres — PostgreSQL 15
- Database для microdao
- Volume:
postgres_data
-
redis — Redis 7
- Cache & sessions
- Volume:
redis_data
-
nats — NATS JetStream
- Message bus
- Volume:
nats_data
-
matrix-homeserver — Matrix Synapse
- Chat server
- Volume:
matrix_data
Application Services (6)
- microdao-api — REST API мікросервіс
- microdao-ws — WebSocket gateway
- grafana — Monitoring UI
- prometheus — Metrics storage
- rag-service — RAG/AI service
- notification-service — Email/Push notifications
Gateway (1)
- gateway-nginx — NGINX reverse proxy
- Port:
8080:80 - Config:
nginx/nginx.conf
- Port:
🌍 Публікація на сервері (без k8s)
Сценарій 1: VPS з одним доменом
DNS:
app.example.com → IP сервера (A record)
На сервері (зовнішній nginx):
Створити /etc/nginx/sites-available/daarion:
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Активувати:
sudo ln -s /etc/nginx/sites-available/daarion /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Сценарій 2: SSL/TLS (Let's Encrypt)
Встановити certbot:
sudo apt install certbot python3-certbot-nginx
Отримати сертифікат:
sudo certbot --nginx -d app.example.com
Автоматичне оновлення:
sudo certbot renew --dry-run
Certbot автоматично додасть SSL конфігурацію до nginx.
Сценарій 3: Host Network Mode
Якщо потрібно слухати 80/443 напряму:
Змінити docker-compose.yml:
gateway-nginx:
network_mode: host
ports: [] # не потрібні в host mode
Тоді gateway-nginx буде слухати 80 порт хоста напряму.
☸️ Ingress для k3s/k8s (ескіз)
Коли перейдете на Kubernetes, можна використати такий Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: daarion-gateway
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- host: app.daarion.city
http:
paths:
- path: /api(/|$)(.*)
pathType: Prefix
backend:
service:
name: microdao-api
port:
number: 8000
- path: /ws(/|$)(.*)
pathType: Prefix
backend:
service:
name: microdao-ws
port:
number: 8001
- path: /grafana(/|$)(.*)
pathType: Prefix
backend:
service:
name: grafana
port:
number: 3000
- path: /prometheus(/|$)(.*)
pathType: Prefix
backend:
service:
name: prometheus
port:
number: 9090
- path: /rag(/|$)(.*)
pathType: Prefix
backend:
service:
name: rag-service
port:
number: 8081
- path: /notify(/|$)(.*)
pathType: Prefix
backend:
service:
name: notification-service
port:
number: 8082
Важливо: У k8s кожен сервіс має бути окремим Deployment + Service.
🔧 Налаштування
Environment Variables
Всі змінні в .env:
# Database
DATABASE_URL=postgres://microdao:microdao@postgres:5432/microdao
# Cache
REDIS_URL=redis://redis:6379/0
# Message Bus
NATS_URL=nats://nats:4222
# Matrix
SYNAPSE_SERVER_NAME=localhost
# RAG
RAG_MODEL_NAME=BAAI/bge-m3
# Notifications
NOTIFY_FROM_EMAIL=noreply@localhost
# PostgreSQL Password
POSTGRES_PASSWORD=postgres
Змінити порт Gateway
У docker-compose.yml:
gateway-nginx:
ports:
- "8080:80" # змінити 8080 на інший порт
Додати новий сервіс
- Додати upstream в
nginx/nginx.conf:
upstream my_service {
server my-service:8083;
}
- Додати location:
location /myservice/ {
proxy_set_header Host $host;
# ... (інші заголовки)
proxy_pass http://my_service/;
}
- Додати сервіс в
docker-compose.yml:
my-service:
image: my-service:local
networks:
- infra_net
🐛 Troubleshooting
Gateway не стартує
# Перевірити логи
docker compose logs gateway-nginx
# Перевірити конфігурацію
docker compose exec gateway-nginx nginx -t
502 Bad Gateway
Це означає, що backend сервіс не працює.
# Перевірити статус сервісів
docker compose ps
# Подивитися логи backend
docker compose logs microdao-api
WebSocket не працює
Перевірте, що в nginx є:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
Grafana/Prometheus не відкриваються
Переконайтеся, що в environment змінних є:
grafana:
environment:
- GF_SERVER_ROOT_URL=%(protocol)s://%(domain)s/grafana/
- GF_SERVER_SERVE_FROM_SUB_PATH=true
prometheus:
command:
- '--web.external-url=/prometheus/'
📚 Додаткова документація
В цьому репозиторії:
../../docs/DEPLOYMENT_OVERVIEW.md— Повний огляд deployment../../docs/DEPLOY_ON_SERVER.md— Production deployment../../INFRASTRUCTURE.md— Архітектура інфраструктури
Зовнішні ресурси:
🎯 Наступні кроки
-
Запустити локально:
docker compose up -d open http://localhost:8080 -
Додати свої сервіси (якщо потрібно)
-
Деплой на staging/production:
- Налаштувати домен
- Додати SSL/TLS
- Змінити паролі в
.env
-
Моніторинг:
- Grafana: http://localhost:8080/grafana/
- Prometheus: http://localhost:8080/prometheus/
-
Підготувати Ingress для k8s (якщо плануєте)
⚠️ Важливі примітки
Безпека
- ⚠️ Змініть
POSTGRES_PASSWORDв production! - ⚠️ Не використовуйте
localhostдляSYNAPSE_SERVER_NAMEв production - ⚠️ Додайте автентифікацію для Grafana/Prometheus
- ⚠️ Використовуйте HTTPS в production
Production Checklist
- Змінено всі паролі
- Налаштовано SSL/TLS
- Додано моніторинг
- Налаштовано backup
- Додано rate limiting
- Налаштовано firewall
- Перевірено всі endpoints
🎉 Готово!
Тепер у вас є єдина точка входу для всіх мікросервісів DAARION!
Питання? Створіть issue в репозиторії або зверніться до документації.