Files
icq/openspec/changes/icq-fix-prosody-network/proposal.md
T

3.9 KiB
Raw Blame History

Proposal — icq-fix-prosody-network

Почему

С 2026-09-08 chat.nixg.ru (веб-клиент Converse.js) снова показывает бесконечную загрузку. Ручной запуск контейнера prosody не помог.

Корневая причина (подтверждена инспекцией):

  • Контейнер icq-prosody запущен вручную вне docker compose (docker start, пересоздан вручную 2026-09-08T13:33) и не подключён ни к одной Docker-сети:
    • docker ps -a → колонка Networks у icq-prosody пустая;
    • docker network inspect icq_default → в сети только icq-webchat (172.27.0.2) и icq-slidgram (172.27.0.4), prosody отсутствует;
    • docker inspect icq-prosody --format '{{json .NetworkSettings.Networks}}' → {};
    • docker exec icq-prosody hostname -i → пусто (нет IP в контейнере).
  • Из-за этого icq-webchat не может достучаться до Prosody по имени icq-prosody (DNS icq_default не резолвится), WebSocket-соединение не устанавливается → «бесконечная загрузка».
  • NetMode=icq_default в метаданных — обманчиво: метка осталась, но фактического подключения к сети нет (вероятно, контейнер пересоздан вне compose).

Что делаем

Пересоздать icq-prosody штатно через docker compose (force-recreate), чтобы он вернулся в сеть icq_default вместе с webchat и slidgram. Проверить, что:

  • контейнер подключён к icq_default с IP;
  • webchat и slidgram видят prosody по имени icq-prosody;
  • chat.nixg.ru снова открывается (WS connect → 101);
  • мост telegram.nixg.ru по-прежнему аутентифицирован;
  • после рестарта ничего не сломалось (логотипы, S2S, http_upload).

Объём

Один сервис (prosody), одна команда docker compose up -d --force-recreate prosody (+ проверки). Без изменений конфигов и образов.

Принятые решения

  • Не менять конфиги Prosody, nginx, DNS — только вернуть контейнер в compose-жизненный цикл.
  • Не трогать данные (./data, ./config, ./logs) — они на volume'ах.
  • Верификацию делать и изнутри (docker exec), и снаружи (curl через Caddy/nginx).

Риски и откат

  • Риск: force-recreate может на пару секунд уронить веб-чат/федерацию. Приемлемо.
  • Откат: docker compose up -d (пересоздание с теми же volume'ами) или docker start icq-prosody если что-то пошло не так — данные не теряются (volume'ы).
  • Не трогаем данные пользователей; никаких удалений.

Критерии приёмки

  • docker ps показывает icq-prosody в сети icq_default (не пустая колонка)
  • docker network inspect icq_default содержит icq-prosody с IP
  • docker exec icq-prosody hostname -i возвращает IP (не пусто)
  • из webchat резолвится и коннектится icq-prosody:5280
  • https://chat.nixg.ru грузится, Converse показывает окно входа (не бесконечная загрузка)
  • WS wss://xmpp.nixg.ru → HTTP 101 (переключение протокола)
  • docker logs icq-prosody без новых ошибок; компонент telegram.nixg.ru аутентифицирован