# X2Chat Edge Proxy (без VPN) — инструкция по установке

Этот гайд предназначен для быстрого развёртывания дополнительного edge-proxy сервера
в другом регионе для обхода сетевых ограничений на доступ к основному серверу.

## Что делает схема

- Клиенты подключаются к `EDGE_FQDN` по HTTPS/WSS (порт 443).
- Edge сервер проксирует запросы на основной сервер `ORIGIN_FQDN`.
- VPN/WireGuard не используется.
- Поддерживаются API, WebSocket, SSE и загрузки APK.

## Подготовка

Требования:

- Ubuntu 22.04+ или Debian 12+
- публичный домен для edge (`EDGE_FQDN`) с A-записью на IP сервера
- доступ по sudo

Параметры:

- `EDGE_FQDN` — домен edge-сервера (обязательно)
- `ADMIN_EMAIL` — email для Let's Encrypt (обязательно)
- `ORIGIN_FQDN` — основной сервер (по умолчанию `ix.x2chat.com`)
- `EDGE_NAME` — идентификатор edge узла (по умолчанию `edge-r1`)
- `SSH_ADMIN_IP` — опционально, для ограничения SSH по IP

## Запуск

1. Скачайте скрипт `install_x2chat_edge_proxy.sh`.
2. Выдайте права:

```bash
chmod +x install_x2chat_edge_proxy.sh
```

3. Запустите:

```bash
EDGE_FQDN="api-r1.example.com" \
ADMIN_EMAIL="admin@example.com" \
ORIGIN_FQDN="ix.x2chat.com" \
EDGE_NAME="edge-r1" \
SSH_ADMIN_IP="1.2.3.4" \
./install_x2chat_edge_proxy.sh
```

## Что настраивается автоматически

- Установка `nginx`, `certbot`, `ufw`, `fail2ban`
- TLS сертификат Let's Encrypt для `EDGE_FQDN`
- reverse proxy:
  - `/api/v1/*`
  - `/ws`
  - `/api/v1/notifications/stream`
  - `/api/v1/updates/*`
  - `/downloads/*`
  - `/apk/*`
- endpoint проверки edge: `/edge-health`
- firewall: открыты только `22`, `80`, `443`

## Проверка после установки

```bash
curl -fsS "https://EDGE_FQDN/edge-health"
curl -fsS "https://EDGE_FQDN/health"
curl -fsS "https://EDGE_FQDN/api/v1/updates/version"
```

## Дальнейшие шаги (на основном сервере/клиентах)

1. Добавить `EDGE_FQDN` в `CORS_ORIGINS` на origin backend.
2. Убедиться, что `TRUST_PROXY` настроен корректно.
3. Добавить edge-домены в fallback цепочку клиентов (Flutter `ApiConfig`).
4. Проверить login/chat/ws/sse/update через edge.

## Важно

- Это прокси-схема, а не отдельная копия backend.
- Если origin недоступен полностью, edge тоже не сможет обслуживать запросы.
- Для устойчивости к падению origin нужна отдельная active-passive стратегия.
