Files
icq/STATUS.md

88 lines
9.0 KiB
Markdown
Raw Permalink 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 — ТЕКУЩИЙ СТАТУС И ПЛАН (точка входа для новой сессии)
> Обновлено: 2026-08-30 · Сессия: bigbox (/opt/icq)
## Проект
Self-hosted XMPP-мессенджер на **nixg.ru** (Prosody **13.0** + веб-клиент Converse v14 + мост Telegram).
Миграция на nixg.ru (2026-08-28): JID юзеров `user@nixg.ru`, веб-клиент chat.nixg.ru, WS wss://xmpp.nixg.ru.
Апгрейд Prosody 0.11.9 → **13.0** (2026-08-30): образ gitea.nixg.ru/hermes/icq-prosody:13.0.
**Документация:**
- [INFRA.md](INFRA.md) — инфраструктура, DNS, учётные данные, TLS/LE, бэкапы
- [BRIDGE-TELEGRAM.md](BRIDGE-TELEGRAM.md) — мост Telegram (Slidge): статус, регистрация, задача по аватарам
- [WALKTHROUGH.md](WALKTHROUGH.md) — полный разбор всех этапов, команд, засад (ESM-фикс, TLS, HTTP Upload, OMEMO, регистрация slidgram §12, push §10.4)
- [CHEATSHEET.md](CHEATSHEET.md) — полезные команды
- [PRD.md](PRD.md) · [MIGRATION.md](MIGRATION.md) · [XEP-AUDIT.md](XEP-AUDIT.md)
## Что работает (подтверждено)
- ✅ XMPP-сервер nixg.ru: c2s 5222 / s2s 5269 / http 5280 / https 5281, федерация через SRV
- ✅ TLS: LE-серты (Caddy 443 для WS/веб; Prosody c2s/s2s — dns-01, истекает 2026-11-26, продление вручную)
- ✅ Веб-чат https://chat.nixg.ru/ (Converse v14, вход admin@nixg.ru, wss://xmpp.nixg.ru)
- ✅ HTTP Upload (upload.nixg.ru, XEP-0363), OMEMO (XEP-0384, через PEP), MAM, Carbons, MUC, PubSub, Bookmarks
- ✅ Бэкапы → Яндекс.Диск (cron 2:45), watchdog продления LE-серта (тихий, cron ca2a23a34905)
- ✅ Мост Telegram (Slidge/slidgram): telegram.nixg.ru аутентифицирован, MTProto через SOCKS5-туннель VPS01
- ✅ **TG-аккаунт привязан к мосту (2026-08-29)**: estorozhenko@nixg.ru → команда register из Pidgin, номер +792****2181, api_id/api_hash из конфига. Логин OK, контакты и аватары синхронизируются.
- ✅ Пользователи: admin@nixg.ru, estorozhenko@nixg.ru (оба входят); самостоятельная регистрация ОТКЛЮЧЕНА
- ✅ **Админы сервера** (2026-08-29): `admins = { "admin@nixg.ru", "estorozhenko@nixg.ru" }` — оба могут ad-hoc команды
- ✅ **Параллельный стенд Prosody 13.0 ПОДТВЕРЖДЁН** (2026-08-30, /opt/icq/test, контейнер icq-prosody-test):
авторизация (3 юзера OK + неверный пароль отклонён) и mod_privilege XEP-0356 (roster IQ → result)
работают на 13.0. Образ: gitea.nixg.ru/hermes/icq-prosody:13.0. → Основа для миграции прода.
- ✅ **Прод на Prosody 13.0** (2026-08-30): мигрирован, всё работает (см. «Выполнено» ниже).
Тестовый стенд остановлен (icq-prosody-test, --restart=no) до следующего обновления.
## Задачи (будущее)
### ✅ ВЫПОЛНЕНО: миграция прода на Prosody 13.0 (2026-08-30)
- [x] **Прод nixg.ru мигрирован с 0.11.9 на 13.0** (образ gitea.nixg.ru/hermes/icq-prosody:13.0):
авторизация OK, mod_privilege XEP-0356 работает (Archiving stanza в логах),
WebSocket 101 через nginx, компонент telegram.nixg.ru аутентифицирован,
HTTP Upload исправлен (`http_upload_access = { "telegram.nixg.ru" }` — регрессия 13.0,
слоты выдавались только c2s; без фикса — «No upload slot» у Slidge).
Детали миграции: WALKTHROUGH.md (новый раздел) + референс prosody-13-parallel-stand.md.
Изменения конфига под 13.0: pubsub → Component "pubsub.nixg.ru", component_ports удалён.
- [x] **Тестовый стенд /opt/icq/test ОСТАНОВЛЕН (не удалён)** — контейнер icq-prosody-test
`docker stop` + `--restart=no`; поднять снова при следующем обновлении.
- [ ] **module:send_iq фикс mod_privilege на проде (опция)** — если миграция 13.0 откладывается:
стаб-ACK (коммит 770c9fa) остаётся; полного XEP-0356 на 0.11.9 нет (API 0.12).
### Прочее (не критично)
- [ ] **ИДЕЯ: папки Telegram → подгруппы в ростере моста** (2026-08-30): все TG-контакты сейчас
скопом в группе «Telegram». Предложение: при подключении к мосту читать список папок/каталогов
из Telegram (архивы/папки чатов) и создавать соответствующие подгруппы в каталоге моста,
раскладывая контакты по ним. НО: при 2–3-минутном лаге логина (массовый рендер ростера
на 1602 контакта) это усугубит старт — реализация только вместе с ускорением рендера.
См. BRIDGE-TELEGRAM.md «Наблюдения». Отложено.
- [ ] **Разобраться с рендером 1600 TG-контактов в рostере при каждом логине клиента** (2026-08-30):
клиент заново скачивает весь рostер + Slidge шлёт presence по всем контактам → 2–3 мин
и «пик в сети» по каждому. Это специфика Slidge, НЕ баг (серверный рostер цел). Идеи:
проверить, можно ли в Slidge отложить/пропустить массовый рoster-рендер при login
(свойства :poll-чатов, cache), и не дёргается ли зря. См. BRIDGE-TELEGRAM.md «Наблюдения».
- [ ] **Аватары TG в мосте таймаутят** — HTTP-часть slidge не ходит через SOCKS5 (URL web.telegram.org
недоступны из РФ). Косметика, на переписку не влияет. Разбор и варианты: BRIDGE-TELEGRAM.md.
- [ ] **Бот-книгоискатель (slixmpp + OPDS)** — Этап 3 PRD. (venv готов: /opt/icq/.venv)
- [ ] **Мост mautrix (WhatsApp)** — Этап 4; нужен external component. [Telegram уже на Slidge]
- [ ] **Push-уведомления** — после апгрейда 13.0 (util.jwt нативный); варианты — WALKTHROUGH §10.4
- [ ] **MAM: ошибка при логине «max_items: not a number»** — проверить настройку mod_mam (не мешает чату)
## Известные грабли (2026-08-29)
- ✅ **РЕШЕНО 2026-08-30: «no-auth-mech» / белый кружок в веб-чате после миграции на 13.0** —
Prosody 13 считает WS-сессию insecure (TLS на edge: Caddy→nginx→Prosody plain 5280),
не предлагает SASL («No stream features to offer on insecure session»), Converse
бесконечно переподключается. ФИКС: `consider_websocket_secure = true` (глобальная
секция prosody.cfg.lua). НЕ использовать `c2s_require_encryption=false` (дыра в 5222).
Детали: референс prosody-13-production-migration.md в скилле xmpp-server-prosody.
- mod_privilege (XEP-0356) сломан на 0.11.9 (module:send_iq — API 0.12). Стоит стаб-ACK (коммит 770c9fa):
Prosody стабилен, но bookmarks/MDS через XEP-0356 не работают → слайдж шлёт приглашения в группы вручную.
Полное решение — апгрейд 13.0 (ПОДТВЕРЖДЁН на стенде, см. задачи). Детали: WALKTHROUGH §12.7.
- ⚠️ ВАЖНО 13.0: в компонентной сессии НЕТ `full_jid` (только host), mod_privilege tip-версии логирует
«Entity nil» — это НЕ ошибка привилегий, просто лог. Привилегии выдаются корректно (см. стенд).
- Рostер TG-контактов цел на сервере (1602). Если контакты «пропали» в Pidgin после рестарта —
Disable/Enable аккаунта (клиент сам скачает рostер). Не трогать сервер.
## Быстрые команды
```bash
cd /opt/icq && docker compose ps
docker logs icq-prosody --tail 50
docker exec icq-prosody prosodyctl check config
# полный список: CHEATSHEET.md
```