Files
icq/STATUS.md
T

9.0 KiB
Raw Blame History

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 — инфраструктура, DNS, учётные данные, TLS/LE, бэкапы
  • BRIDGE-TELEGRAM.md — мост Telegram (Slidge): статус, регистрация, задача по аватарам
  • WALKTHROUGH.md — полный разбор всех этапов, команд, засад (ESM-фикс, TLS, HTTP Upload, OMEMO, регистрация slidgram §12, push §10.4)
  • CHEATSHEET.md — полезные команды
  • PRD.md · MIGRATION.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)

  • Прод 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 удалён.
  • Тестовый стенд /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ер). Не трогать сервер.

Быстрые команды

cd /opt/icq && docker compose ps
docker logs icq-prosody --tail 50
docker exec icq-prosody prosodyctl check config
# полный список: CHEATSHEET.md