20 KiB
TorrServer на Кра́кене — диагностика
Дата: 2026-09-22 · ОБНОВЛЕНО 2026-09-22 (вечер): подтверждено Alex в UI
Вывод: ✅ TorrServer исправен. ЗАДАЧА ЗАКРЫТА. «Торренты» пусто было по причине
🔴 redapi указывал на локальный lampac, чей JacRed отдаёт формат БЕЗ
поля info → PidTor падал на torrent.info.sizeName → NPE → 500 → кэшировался
как 503. ИСПРАВЛЕНО: redapi возвращён на http://jac.red.
Приёмка Alex: «Во! теперь появились торренты. запустил F1..» — ✅ видно в UI.
Диагноз и фикс — family/how-to/lampac-torrents.
Связано: personal/tech/lampac-deployment, family/how-to/lampac-torrents,
personal/plans/lampac-disable-1xbet-ads, personal/plans/watchlist-tmdb-missing-marker
✅ Статус закрытия (2026-09-22 вечер)
| Пункт | Статус |
|---|---|
| PidTor 500/503 | ✅ исправлено, redapi=http://jac.red |
| Приёмка в UI | ✅ Alex запустил F1 в плеере |
Тестовая раздача probe |
✅ убрана сама (сброс при рестарте) |
min_sid |
✅ min_sid: 3 убран → сток 15 |
| Минус год у «Волшебный участок: Фильм» | ⏳ оставлено пусто (см. ниже) |
Вопрос Alex
«по просмотру: у меня есть определенные сомнения что через torrserver идут, там только пункт "смотреть онлайн" работает и он добавляет вотермарк и рекламу 1xbet - это точно с торрентов? потому что если пункт "торренты" выбрать при просмотре - то там пусто.»
Ответ: сомнения Alex верны по рекламе. Но TorrServer исправен.
Реклама 1xbet — НЕ от TorrServer
| Пункт UI | Механизм | Источник потока | Реклама |
|---|---|---|---|
| «Торренты» | PidTor → JacRed → magnet → TorrServer |
P2P-раздача | НЕТ |
| «Смотреть онлайн» | Online + OnlineRUS (20 балансеров) |
чужой CDN сайта | ЕСТЬ (1xbet) |
TorrServer не вставляет рекламу. Баннеры рисует плеер-обёртка онлайн-источника.
🔴 Все проверки — сырьём, не догадкой
1. TorrServer жив и качает
# изнутри контейнера (снаружи порт 9085 закрыт!)
docker exec lampac sh -c 'curl -s http://127.0.0.1:9085/echo'
# -> MatriX.135
✅ Раздача добавилась и пошла качаться (тест магнитом Big Buck Bunny):
{"title":"probe","name":"Big Buck Bunny","hash":"dd8255ec...","stat":3,
"stat_string":"Torrent working","total_peers":343,"active_peers":7,
"connected_seeders":5,"bytes_written":6918,"bytes_read":49072,
"torrent_size":276445467}
⚠️ Тестовая раздача удалена после проверки:
POST /ts/torrents {"action":"rem","hash":"..."} → HTTP 200.
2. JacRed находит раздачи
curl -s "http://127.0.0.1:9118/api/v1.0/torrents?search=Матрица"
# HTTP 200, 74 КБ
Трекеры в выдаче: kinozal, torrentby, rutor, rutracker.
Магниты на месте: magnet:?xt=urn:btih:3A44F276AA59110B5765458EA013863CFD5BFBFA
3. PidTor выдаёт торренты в UI
curl -s "http://127.0.0.1:9118/lite/pidtor?title=Матрица&year=1999"
# HTTP 200, 8435 байт, 12 раздач
Ответ содержит рабочий торрент:
/lite/pidtor/s61065ea115b7cc3e8db9fb5ab1f6f327f08bd1c9?tr=...
В /lite/events PidTor присутствует как источник: "name":"Pid<s>T</s>or".
4. jac.red резолвится
getent hosts jac.red -> 144.31.3.10
curl http://jac.red -> HTTP 200
5. 🔴 НО: часть фильмов отдаёт 503 ИЗ КЭША
Массовая проверка 12 позиций каталога дала 11 × HTTP 503, 1 × HTTP 200. При этом JacRed по тем же фильмам отдаёт раздачи:
F1 (2025) -> /api/v2.0/indexers/all/results -> 200, 72 раздачи (sid=203,26,18…)
Гамнет (2025) -> 200, 14 раздач (max sid=79, 6 проходят min_sid=15)
А /lite/pidtor?title=F1 -> 503 с заголовком X-Invoke-Cache: HIT
X-Invoke-Cache: HIT + время ответа 0.0016s = ответ из памяти, запроса к
JacRed НЕ было. Один раз источник отказал → lampac закэшировал 503 на ~40 мин.
🔴 Диагностический признак: смотреть заголовки, не только код.
503 ≠ «раздач нет» (тогда был бы 200 с пустым списком). 503 = отказ источника,
закэшированный процессом. Сброс — docker restart lampac.
🔴 Роли в цепочке: поиск НАРУЖУ, качание локально
Lampa → lampac PidTor → jac.red (ПОИСК раздач — ЧУЖОЙ хост 144.31.3.10)
→ magnet → TorrServer Кра́кена (КАЧАЕТ, локально)
→ поток /lite/pidtor/s<id>
⚠️ Поиск раздач не локален — PidTor.redapi = "http://jac.red". TorrServer
только качает то, что нашёл чужой сервер. Не путать эти роли при диагностике.
🔴🔴 Локальный JacRed — НЕ альтернатива. Он ломает PidTor
Проверено 2026-09-22 (стоило полной поломки): переключение
redapi на http://127.0.0.1:9118 (локальный JacRed lampac) роняет ВСЕ
фильмы в HTTP 500.
НАШ JacRed отдаёт поля: Tracker, Details, Title, Size, PublishDate,
Category, Seeders, Peers, MagnetUri
^^^ поля "info" НЕТ
jac.red отдаёт ещё: info{quality, voices[], sizeName, name, originalname,
relased}, ffprobe, languages, CategoryDesc
PidTor/Controller.cs:97:
string mediainfo = torrent.info.sizeName ?? string.Empty;
^^^^^^^^^^^^^^ info == null -> NullReferenceException -> 500
Локальный JacRed быстрее (0.12s против 0.35s), но несовместим по формату.
redapi обязан оставаться http://jac.red. Подробно:
family/how-to/lampac-torrents
🔴 min_sid: 15 — второй фильтр, режущий выдачу
Реальные сиды по свежим фильмам: 1–37. Порог 15 отсекает большинство:
Гамнет: из 14 раздач проходят только 6
F1: отсекаются раздачи с sid=1, 4, 7 (рабочие)
Понижение min_sid — решение Alex (низкий sid = медленнее качает).
Варианты: 1 (показывать всё) · 3..5 (компромисс) · оставить 15.
🔴 Маршруты — главный питфолл разбора
TorrServer НЕ доступен по порту 9085 напрямую — lampac проксирует его
под префиксом /ts/ на порт 9118:
http://127.0.0.1:9118/ts/echo -> MatriX.135 (кто ты)
http://127.0.0.1:9118/ts/{*suffix} -> прокси на TorrServer API
http://127.0.0.1:9118/ts/stream -> воспроизведение
http://127.0.0.1:9118/ts/playlist -> плейлист
http://127.0.0.1:9118/ts/download/ -> скачивание
Проверять только изнутри контейнера (docker exec lampac) — снаружи
порт 9085 даёт Connection refused.
Метод запроса ВАЖЕН
POST /ts/torrents -d '{"action":"list"}' -> 200, [] ✅ ТОЛЬКО ТАК
POST /ts/torrents с телом [] -> 400
POST /ts/torrents без тела -> 400
POST /ts/torrents с телом {} -> 400
GET /ts/torrents -> 404 (метода нет)
GET /ts/torrents/list -> 404
GET /ts/settings -> 403 (нужна авторизация ts:tspass)
400 вместо 404 = маршрут существует. Это ключевой признак при диагностике.
🔴 Проверено 2026-09-22: список раздач отдаёт ТОЛЬКО -d '{"action":"list"}'
с заголовком Content-Type: application/json. Пустое тело, [] и {} → 400.
Верный вызов:
ssh kraken "curl -s -m 15 -X POST http://127.0.0.1:9118/ts/torrents \
-H 'Content-Type: application/json' -d '{\"action\":\"list\"}'"
Удаление раздачи
ssh kraken "curl -s -X POST http://127.0.0.1:9118/ts/torrents \
-H 'Content-Type: application/json' \
-d '{\"action\":\"rem\",\"hash\":\"<hash>\"}'"
⚠️ Раздачи живут в памяти процесса TorrServer. docker restart lampac
их выгружает — тестовая раздача probe (Big Buck Bunny), добавленная
2026-09-22, после рестарта исчезла сама, список вернулся пустым. Убирать
вручную не потребовалось.
🔴 Конфиг: где что лежит
current.conf (эффективный, слитый из base.conf + init.conf)
"TorrServer": {
"releases": "MatriX.135",
"tsport": 9085,
"defaultPasswd": "ts",
"limit_map": [{ "pattern": "^/ts/", "map": { "limit": 50, "second": 1 } }]
},
"JacRed": {
"typesearch": "webapi",
"disableJackett": true,
"webApiHost": "http://ns3bg91xvuqfvq9h.cfhttp.top",
"Red": { "trackers": ["rutracker","rutor","kinozal","nnmclub",
"megapeer","bitru","toloka","lostfilm","baibako","torrentby",
"hdrezka","selezen","animelayer","anilibria","anifilm"] }
},
"PidTor": {
"enable": true,
"enabled": false,
"redapi": "http://jac.red",
"min_sid": 15,
"torrs": null, ← README: без этого список ПУСТОЙ
"auth_torrs": null ← ...но фактически /lite/pidtor работает
}
⚠️ Расхождение с README PidTor: README говорит «пункт появляется только
если заданы torrs/auth_torrs, иначе список пустой». Фактически при null
/lite/pidtor отдал 8435 байт с рабочей раздачей. README устарел для этой
сборки (MatriX.135).
API JacRed
GET /api/v1.0/conf -> {"apikey":true}
GET /api/v1.0/torrents?search=... -> список раздач
GET /api/v2.0/indexers/{status}/results?Query= -> JacRed/Jackett-формат
⚠️ /jacred, /jacred/api → 404. Не те пути.
Секция TorrServer.settings.json (data/ts/)
{"BitTorr": {"CacheSize": 100663296, "ConnectionsLimit": 25,
"DisableDHT": false, "DisablePEX": false, "DisableTCP": false,
"EnableIPv6": false, "PreloadCache": 0, "ReaderReadAHead": 83,
"TorrentDisconnectTimeout": 180, "TorrentsSavePath": "",
"UseDisk": false, "RetrackersMode": 1}}
Питфоллы сессии
- 🔴
/media/movies-radarr— два разных каталога. Снаружи/media/movies-radarrэто SD-пустышка (0 файлов). Реальный путь Radarr = монтируется ИЗ ДРУГОГО диска:/srv/dev-disk-by-uuid-49e8f586-…/media/movies-radarr(17 каталогов). Отдельный диск от lampac (6194539b). Проверятьdocker inspectмаунты, а неfindпо наружному пути. - 🔴
setsid nohupНЕ спасает от ssh-обрыва. Прогон генератора дважды умирал (client_loop: send disconnect: Broken pipe). Рабочее решение —systemd-run --user --unit=<name> --scope <script>: отвязывает от сессии. - 🔴
stringsв контейнере не даёт маршрутов TS — пустой вывод. СмотретьREADME.mdмодуля и пробовать запросы (404 vs 400), а не парсить бинарник. - 🔴
vast.jsиmodification.js— НЕ источники рекламы. VASTPlayer не подключён вsisi/index.html;modification.js(22 КБ) даёт 0 совпадений на1xbet|vast|adTag, домены толькоw3.org. Реклама от онлайн-источников.
Итог: что реально делает «Смотреть онлайн» vs «Торренты»
«Смотреть онлайн» = 20 источников из /lite/events. Из них ТОРРЕНТНЫЙ — РОВНО ОДИН:
Pid<s>T</s>or http://127.0.0.1:9118/lite/pidtor balanser=pidtor
Остальные 19 — онлайн-балансеры (чужой CDN, реклама 1xbet):
Filmix · pizdatoehd · Kinobase · Phantom · Kinogo · AniDub · LeProduction ·
VeoVeo · Collaps · HDVB · Rutube · VK Видео · Kinoteatr.kg · Vibix ·
Kinotochka · Eneyida · UaKino · UAFilm · Geosaitebi
Отдельного пункта «Торренты» в /lite/events НЕТ — это не источник, а
интерфейс выбора раздачи внутри PidTor. Путь в UI:
карточка → «Смотреть онлайн» → PidTor → список раздач → выбор качества.
# проверка количества раздач на фильме из терминала
ssh kraken 'curl -s "http://127.0.0.1:9118/lite/pidtor?title=Матрица&year=1999" \
| grep -c data-json=' # -> 12
# пакетная проверка позиций каталога
python3 /tmp/probe_pidtor_batch.py
Если пусто — порядок проверки (по реальной причине, 2026-09-22)
- СНАЧАЛА проверить
redapi:docker exec lampac sh -c 'grep -o "\"redapi\": \"[^\"]*\"" /lampac/current.conf'→ должно бытьhttp://jac.red. Если127.0.0.1:9118— PidTor отдаст 500 (см. выше) curl -i "…/lite/pidtor?title=<название>&year=<год>"— смотреть заголовки:X-Invoke-Cache: HIT→ это кэш, лечениеdocker restart lampac- 500 → реальная ошибка (чаще всего
info-несовместимость источника) - 503 → источник отказал, кэш держит ~45 мин (
extend: 2700) - 200, но 0 раздач → реально нет раздач у трекеров
min_sid: 15(сток) — сиды < 15 отсекаются (свежие фильмы часто 1–37)
🔴 Порядок сброса кэша (если 503 застрял)
Кэш переживает docker restart — он на диске:
H=/srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f/lampac
docker stop lampac
cp -r "$H/cache/fdb" /tmp/fdb-backup-$(date +%Y%m%d-%H%M%S)/ # бэкап обязателен
rm -rf "$H/cache/fdb"; mkdir -p "$H/cache/fdb"
docker start lampac
⚠️ После чистки 503 сменится на 500 — это признак, что кэш больше не маскирует настоящую причину. Дальше искать причину 500 (пункт 2 выше), а не радоваться.
🔴 «Волшебный участок: Фильм» — year: null. НЕ БАГ, данных нет в источнике
Дата разбора: 2026-09-22 · Статус: ⏳ оставлено пусто (решение Alex ожидается)
Сырьё
watchlist.json (единственная позиция без года из 376):
{
"name": "Волшебный участок: Фильм",
"original": "Волшебный участок: Фильм",
"year": null, <- год отсутствует
"rating": 0.0,
"image": "", <- 🔴 постера ТОЖЕ нет
"href": "https://www.themoviedb.org/movie/1272100"
}
Что реально отдаёт TMDB по ID 1272100
curl "https://api.themoviedb.org/3/movie/1272100?api_key=$TMDB_KEY&language=ru-RU"
ru-RU: title='Волшебный участок: Фильм' original_title='Волшебный участок: Фильм'
en-US: title='The Magic District. The Movie'
release_date = '' <- ПУСТО
status = 'In Production' <- 🔴 ФИЛЬМ ЕЩЁ НЕ ВЫШЕЛ
poster_path = None / poster=False <- постера нет
runtime = 0 imdb_id = None vote_average = 0.0
TMDB поиск по названию подтверждает: ровно один результат, id=1272100.
Вывод: генератор работает правильно
release_date пуст у самого TMDB, потому что фильм в производстве.
Генератор честно пишет null. Это не дефект tmdb_details().
Кинопоиск как fallback не подходит: запрос
kinopoiskapiunofficial.tech/api/v2.1/films/search-by-keyword?keyword=Волшебный участок
вернул HTTP 400 Bad Request (баг API на :keyword-маршруте). Плюс
КП-карточки фильма может ещё не существовать — сериал есть, фильм в производстве.
Решение: НЕ ВЫДУМЫВАТЬ год
| Вариант | Оценка |
|---|---|
Оставить null (рекомендовано) |
✅ не выдумываем данные; когда фильм выйдет — TMDB отдаст release_date, генератор подхватит сам |
| Заполнить год вручную | ❌ премьера неизвестна → выдуманный год хуже пустоты |
| Год из КП как fallback | ❌ КП отдаёт 400; ~30-40 мин работы, риск сломать резолв |
Косметическая опция (если Alex захочет, ~15 мин): выводить "скоро"
вместо пустого года при status == "In Production".
Правило «фильм есть → добавлять» соблюдено: позиция в каталоге, карточка откроется, торренты найдутся когда фильм выйдет.
Питфолл: где лежат ключи TMDB/KP
🔴 .env в $H/lampac/ НЕТ — ключи в $H/watchlist-sync/.env
(TMDB_KEY, KP_KEY). Генератор читает через load_env() — 5 мест поиска.
Питфолл: пути на Кра́кене
🔴 HDD lampac = /srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f
НЕ ...6194539b-ec7d-4b5e-9cb2-2a4e0b0a3a1a (этот UUID не существует)
watchlist.json = $H/lampac/wwwroot/watchlist.json (376 записей)
боевой .md = $H/obsidian/family/documents/movies-watchlist.md
скрипты = $H/lampac/scripts/{gen_watchlist.py,mark_missing.py}
⚠️ find /srv -name watchlist.json — единственный надёжный способ уточнить путь;
UUID в памяти/доках может быть устаревшим или обрезанным.