mirror of
https://gitverse.ru/kpa39l/icq.git
synced 2026-09-29 09:55:11 +00:00
docs+fix: no-auth-mech на Prosody 13.0 — consider_websocket_secure=true (WS insecure после миграции); опыт в STATUS/WALKTHROUGH
This commit is contained in:
@@ -120,6 +120,27 @@ iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
|
||||
- `location / { try_files $uri $uri/ /index.html; }`
|
||||
- Docker-compose: сервис `webchat` (nginx:alpine), ports `8081:8081`, volume `./webchat:/usr/share/nginx/html:ro`.
|
||||
|
||||
**ЗАСАДА: DNS-кэш nginx → Connection refused на /xmpp-websocket (инцидент 2026-08-30)**.
|
||||
Симптом: chat.nixg.ru открывается, форма логина мелькает, Converse висит на пульсирующем белом
|
||||
кружке (спиннер connecting). В логах icq-webchat каждую минуту:
|
||||
`connect() failed (111: Connection refused) ... upstream http://172.27.0.2:5280/xmpp-websocket`.
|
||||
Причина: nginx резолвит имя `prosody` ОДИН раз при старте и держит IP вечно.
|
||||
После пересоздания контейнеров (prosody, slidgram) docker присваивает адреса заново —
|
||||
старый IP (172.27.0.2) переходит к ДРУГОМУ контейнеру (slidgram), prosody уезжает на .4.
|
||||
nginx же продолжает слать на закешированный .2 → refused → 502 → спиннер.
|
||||
Лечение: `docker compose restart webchat` (пере-резолв). Профилакт — динамический resolver:
|
||||
```
|
||||
nginx
|
||||
resolver 127.0.11 valid=30s ipv6=off; # docker embedded DNS
|
||||
location /xmpp-websocket {
|
||||
set $prosody_upstream http://prosody:5280;
|
||||
proxy_pass $prosody_upstream/xmpp-websocket;
|
||||
...
|
||||
}
|
||||
```
|
||||
Без переменной + resolver nginx не пере-резолвит на лету. Патч применён (2026-08-30),
|
||||
в `webchat/nginx.conf`.
|
||||
|
||||
**Критическая засада веб-клиента**: в Converse.js v14 опция WebSocket называется **`websocket_url`**,
|
||||
НЕ `bosh_service_url`! Если задать `bosh_service_url` с wss:// — Converse пытается подключиться по BOSH
|
||||
(а у Prosody BOSH нет), падает, UI не рендерится (пустая страница!).
|
||||
@@ -223,6 +244,13 @@ curl -sS https://xmpp.nixg.ru/.well-known/host-meta # 200 JSON XEP-0156
|
||||
12. **dpkg прерван / apt exit 127** — сломан `chromium-browser` (snap-transitional); чинить `dpkg --configure -a` + переустановка.
|
||||
13. **git: .venv попал в историю** — venv НЕ коммитить (в .gitignore), удалять из истории
|
||||
filter-branch + force-push (репо похудел с 22MB до 216K).
|
||||
14. **Prosody 13.0: WS-сессия «insecure» → «no-auth-mech» (2026-08-30)** — после миграции
|
||||
на 13.0 веб-чат сломался: форма мелькает, белый кружок, `No stream features to offer
|
||||
on insecure session` в логах, бесконечные переподключения. TLS терминируется на edge
|
||||
(Caddy→nginx→Prosody plain 5280) → 13.0 не предлагает SASL на «insecure» WS.
|
||||
ФИКС (глобальная секция prosody.cfg.lua): `consider_websocket_secure = true`.
|
||||
НЕ ставить `c2s_require_encryption=false` (дыра в 5222: plaintext-пароли).
|
||||
Проверка: `Authenticated as user@nixg.ru [prosody:operator]` в логах после входа по WS.
|
||||
|
||||
## 7. HTTP Upload (XEP-0363) — mod_http_upload
|
||||
|
||||
@@ -651,6 +679,39 @@ JSON содержит `"always_invite_when_adding_bookmarks": true` — слай
|
||||
(после апгрейда 0.12). Пока слайдж-стаб не чинит bookmarks, приглашения — единственный
|
||||
способ «увидеть» каналы, их можно игнорировать в Pidgin.
|
||||
|
||||
## 12.8. МИГРАЦИЯ ПРОДА НА PROSODY 13.0 (2026-08-30)
|
||||
|
||||
Прод nixg.ru переведён с 0.11.9 на 13.0 (образ `gitea.nixg.ru/hermes/icq-prosody:13.0`).
|
||||
Стенд подтверждал совместимость заранее (references/prosody-13-parallel-stand.md).
|
||||
|
||||
**Шаги и изменения конфига (что отличается от 0.11.9):**
|
||||
1. Бэкап перед миграцией: `tar czf backups/pre-migration-13-*.tar.gz config data certs modules webchat`.
|
||||
2. docker-compose: `image: gitea.nixg.ru/hermes/icq-prosody:13.0` (вместо `prosody/prosody:latest`).
|
||||
3. `component_ports = { 5347 }` — **УДАЛЁН** в 13.0 (listener жёстко на 5347). Убрать.
|
||||
Listener поднимает module-less `Component "telegram.nixg.ru"`-блок (уже был).
|
||||
4. `"pubsub"` из `modules_enabled` VirtualHost — **УБРАТЬ**: в 13.0 mod_pubsub только как Component.
|
||||
Добавлен `Component "pubsub.nixg.ru" "pubsub"` (bookmarks/ленты).
|
||||
Ошибка до фикса: `Pubsub should be loaded as a component`.
|
||||
5. **РЕГРЕССИЯ http_upload**: slidge получал `No upload slot in this IQ: <iq ... id="0" />` —
|
||||
в 13.0-версии mod_http_upload слот выдаётся только `origin.type=="c2s"` ИЛИ JID из
|
||||
`http_upload_access`. Slidge просит слот от имени компонента → добавить:
|
||||
`http_upload_access = { "telegram.nixg.ru" }` в блок `Component "upload.nixg.ru"`.
|
||||
До фикса 180 ошибок/10 мин; после — 0.
|
||||
6. `cross_domain_websocket` — deprecated (варнинг), но всё ещё читается mod_websocket → работает.
|
||||
Можно оставить; новый механизм — `http_cors_override`.
|
||||
7. Лог: один блок `log` в глобальной секции (в 13.0 строго один).
|
||||
|
||||
**Проверка после миграции:**
|
||||
- `prosodyctl check config` → All checks passed.
|
||||
- `External component successfully authenticated` для telegram.nixg.ru в prosody.log.
|
||||
- mod_privilege: в логе `nixg.ru:privilege ... Archiving stanza` (slidge-carbon-*) — работает.
|
||||
- WebSocket: рукопожатие → `101 Switching Protocols` через nginx (Chat работает).
|
||||
- HTTP Upload: 0 ошибок `No upload slot` после рестарта.
|
||||
- Авторизация: SASL отвечает на неверный пароль AUTH FAILED (логика работает).
|
||||
|
||||
**Тестовый стенд** /opt/icq/test (icq-prosody-test) ОСТАНОВЛЕН: `docker stop` + `docker update --restart=no`.
|
||||
Поднять при следующем обновлении: `cd /opt/icq/test && docker compose up -d`.
|
||||
|
||||
## 13. TODO (следующие шаги)
|
||||
- [x] ~~OMEMO (XEP-0384)~~ — ВЫПОЛНЕНО: раздел 9; скрипт scripts/omemo_check.py.
|
||||
- [ ] Бот-книгоискатель (slixmpp + OPDS) — Этап 3 PRD. venv уже создан (/opt/icq/.venv: aiohttp, slixmpp).
|
||||
|
||||
Reference in New Issue
Block a user