Files
icq/README.md
T

81 lines
5.2 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.
# ICQ — приватный XMPP-сервер (Prosody + Converse.js)
Личный XMPP-сервер для семьи/друзей. Домен: **nixg.ru**, веб-чат: **https://chat.nixg.ru**.
## Стек
- **Prosody 0.11.9** (Docker) — XMPP-сервер: c2s 5222, s2s 5269, WebSocket 5280, HTTPS 5281
- **Converse.js v14** (веб-клиент, ESM) — отдаётся nginx (Docker), доступ через Caddy (vps02)
- **Caddy** (vps02, host-network) — TLS-терминатор: chat.nixg.ru, xmpp.nixg.ru, upload.nixg.ru
- **Let's Encrypt** — сертификаты для XMPP (c2s/s2s) и веб
- **WireGuard** — туннель bigbox (10.8.0.2) ↔ vps02 (10.8.0.4)
- **Slidge/slidgram** (Docker) — мост XMPP↔Telegram (внешний компонент, XEP-0114)
## Функциональность (XEP-модули)
| Возможность | XEP | Модуль | Статус |
|---|---|---|---|
| MUC (групповые чаты) | XEP-0045 | Component `conference.nixg.ru` (mod_muc) | ✅ |
| PubSub (подписки, ленты) | XEP-0060 | mod_pubsub | ✅ |
| HTTP Upload (файлы) | XEP-0363 | Component `upload.nixg.ru` (mod_http_upload, community) | ✅ |
| MAM (история) | XEP-0313 | mod_mam (+mod_muc_mam) | ✅ |
| Carbons (все устройства) | XEP-0280 | mod_carbons | ✅ |
| OMEMO / OTR (сквозное шифрование) | XEP-0384 | PEP (mod_pep) для хранения ключей; серверный mod_omemo в 0.11 отсутствует — шифрование клиент-сайд (Gajim/Dino/Conversations) | ⚠️ клиент-сайд |
| WebRTC (звонки) | XEP-0166/0343 | клиент-сайд (Jingle); серверного модуля нет | ⚠️ клиент-сайд |
| Bookmarks (избранные) | XEP-0402 | через PEP/pubsub node `storage:bookmarks` (отдельного mod_bookmarks в 0.11 нет) | ✅ через PEP |
| Privilege (roster sync для мостов) | XEP-0356 | mod_privilege (community) | ✅ |
| PEP (аватары, OMEMO, отметки) | XEP-0163 | mod_pep | ✅ |
## Мост XMPP↔Telegram (Slidge/slidgram)
- Внешний компонент **telegram.nixg.ru** (XEP-0114), порт 5347 (внутри docker-сети).
- Образ `slidgram-proxy:latest` = codeberg.org/slidge/slidgram + SOCKS5-патч (env `SLIDGRAM_PROXY`).
- **Трафик Telegram идёт через SOCKS5 172.27.0.1:1080** (SSH-туннель VPS01, вне РФ) — работает при блокировке Telegram в РФ.
- Данные сессий: `./slidgram/data/` (том, uid 10000).
- Регистрация TG-аккаунта: из XMPP-клиента написать «register» на `telegram.nixg.ru`
(или ad-hoc команда Register) — **пошагово: WALKTHROUGH.md раздел 12**. Нужен api_id/api_hash
с https://my.telegram.org/apps.
- ⚠️ Известное ограничение: **URL-аватары** (web.telegram.org) качаются HTTP-клиентом slidge
напрямую (не через SOCKS5) → в РФ таймаутят. Задача в STATUS.md. На обмен сообщениями не влияет.
- Офлайн-доки: `docs/slidgram/` (копия slidge.im).
## Состав (после клонирования)
```
/opt/icq
├── config/ # prosody.cfg.lua (+ mounts в контейнер)
├── webchat/ # nginx: index.html + nginx.conf (dist скачивается отдельно)
├── modules/ # community-модули Prosody (mod_http_upload, mod_privilege, ...)
├── slidgram/ # Dockerfile + патчи для образа slidgram-proxy (SOCKS5)
├── docs/slidgram/ # офлайн-копия документации slidgram
├── docker-compose.yml
├── STATUS.md # точка входа: текущее состояние, задачи
├── PRD.md # требования/архитектура
├── MIGRATION.md # переезд chat.nixg.ru → nixg.ru
└── WALKTHROUGH.md # команды, засады, решения
```
## Быстрый запуск
```bash
# 1. dist Converse.js (в .gitignore, т.к. 24MB) — скачать из релиза:
# https://github.com/conversejs/converse/releases → converse.js-14.0.0.tgz
# распаковать package/dist/* в webchat/dist/
# 2. Сертификаты: положить LE-серт nixg.ru (fullchain, privkey) в certs/nixg.ru.{crt,key}
# 3. Запуск
docker compose up -d
```
## Домены (DNS, Jino)
| Запись | Значение |
|---|---|
| A chat.nixg.ru, xmpp.nixg.ru, upload.nixg.ru | 87.242.100.206 (vps02) |
| SRV _xmpp-client._tcp.nixg.ru | 5222 xmpp.nixg.ru |
| SRV _xmpp-server._tcp.nixg.ru | 5269 xmpp.nixg.ru |
| SRV _xmpp-client-websocket._tcp.nixg.ru | 443 xmpp.nixg.ru |
| TXT _acme-challenge.nixg.ru (при продлении) | временно |
## Лицензия
Приватный проект. Пароли и ключи в репозиторий не попадают (см. .gitignore).
---
Подробности: [STATUS.md](STATUS.md) (текущее состояние), [PRD.md](PRD.md), [WALKTHROUGH.md](WALKTHROUGH.md)