--- title: Arr stack — Kraken created: '2026-05-23' updated: '2026-09-29' type: tech namespace: family tags: [arr, kraken, radarr, sonarr, prowlarr, transmission, jellyfin] related: - "[[family/how-to/arr-stack-taiga]]" - "[[family/how-to/kraken-access]]" - "[[family/how-to/kraken-watchtower]]" - "[[personal/tech/kraken-docker-startup-order]]" --- # Arr stack — Kraken Каноническая документация arr-стека на Kraken. Taiga описывается отдельно в [[family/how-to/arr-stack-taiga]]. ## Архитектура Prowlarr → Radarr / Sonarr → Transmission → /media ↓ media-pipeline / router.py ↓ Jellyfin через symlink | Компонент | Порт | Назначение | |---|---:|---| | Prowlarr | 9696 | индексаторы и sync | | Radarr | 7878 | фильмы | | Sonarr | 8989 | сериалы | | Transmission | 9091 | torrent download client | | FlareSolverr | 8191 | browser challenge, если включён | | Jellyfin | 8096 | media server | Все arr-сервисы и Transmission должны видеть общую Docker-сеть media_net. Проверять фактические сети через docker inspect, а не только compose. ## Пути Базовый диск: /srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/ Проверка реального диска: readlink -f /srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade df -h /srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade Внутри контейнеров media path — /media. | Путь | Назначение | |---|---| | /media/movies-radarr | рабочая библиотека Radarr | | /media/series-sonarr | рабочая библиотека Sonarr | | /media/movies | Jellyfin movies | | /media/series | Jellyfin series | | /media/cartoons | Jellyfin cartoons | | /media/documentaries | Jellyfin documentaries | | /media/downloads/complete | завершённые ручные загрузки | Не путать /media Kraken с /storage Taiga. ## Compose и restart Перед изменением: docker compose config -q docker compose ps Определить владельца контейнера: docker inspect --format '{{index .Config.Labels "com.docker.compose.project"}} {{index .Config.Labels "com.docker.compose.project.config_files"}}' Запускать compose из каталога, указанного в project.config_files. Не запускать второй compose с тем же container_name. Проверка после reboot: docker ps --format 'table {{.Names}} {{.Status}} {{.Networks}}' docker network inspect media_net docker compose ps restart: unless-stopped не задаёт порядок между разными compose-проектами. Межпроектный порядок описан в [[personal/tech/kraken-docker-startup-order]]. ## Media routing Radarr/Sonarr используют рабочие каталоги, а router.py публикует их в Jellyfin через symlink: | Источник | Условие | Цель | |---|---|---| | movies-radarr | documentary | documentaries | | movies-radarr | animation без adult rating | cartoons | | movies-radarr | остальное | movies | | series-sonarr | documentary | documentaries-series | | series-sonarr | animation без TV-MA | cartoons-series | | series-sonarr | остальное | series | Проверка без изменений: cd /srv/.../docker/media-pipeline python3 router.py --dry-run Применение: python3 router.py --apply Ручные torrents обрабатываются sync.py и on-download-complete.sh. После перемещения обновлять location через Transmission RPC, а не вручную менять путь. ## Transmission Проверка RPC: docker exec transmission transmission-remote --list Проверка mount: docker inspect transmission --format '{{range .Mounts}}{{.Source}} -> {{.Destination}}{{println}}' Если Radarr/Sonarr получают Authentication failure, проверить штатный download-client test, текущие RPC credentials и host transmission:9091. Password в Obsidian не записывать. ## Prowlarr и FlareSolverr На Kraken proxy/DNS topology отличается от Taiga. Не переносить Taiga entrypoint и vless-proxy настройки сюда вслепую. Приёмка индексаторов: 1. Prowlarr видит flaresolverr:8191. 2. Индексер имеет нужные tags. 3. Реальный search возвращает результаты. 4. IndexerStatus не содержит старый quarantine. 5. LOG_LEVEL не пишет tracker credentials в logs. ## Jellyfin Jellyfin читает target libraries: movies, series, cartoons, documentaries и варианты. movies-radarr и series-sonarr не добавлять в Jellyfin, если router должен быть единственным слоем публикации. Проверка: docker inspect jellyfin --format '{{range .Mounts}}{{.Source}} -> {{.Destination}} ({{.Mode}}){{println}}' namei -l /srv/.../media/movies Проверять execute/traverse на каждом parent directory, uid/gid и read-only mount. ## Watchlist и cron Перед POST новой записи в Radarr/Sonarr делать pre-check существующей библиотеки. SeriesExistsValidator — duplicate, а не отказ индексатора. Cron проверять фактически: crontab -l sudo crontab -l systemctl is-active cron Документация не доказывает, что job установлен. Перед изменением crontab делать backup и проверять новый crontab сразу после установки. ## Watchtower и reboot pitfalls - Watchtower может остановить контейнеры через SIGTERM/SIGKILL во время update. - exit 137 не равен автоматически OOM; сверять kernel logs и Docker events. - depends_on работает только внутри одного compose-проекта. - Правка compose-файла не меняет уже созданный контейнер до up -d --force-recreate. - Bind mount и docker inspect важнее того, что написано в заметке. ## Troubleshooting | Симптом | Проверка | Действие | |---|---|---| | Container conflict | compose labels | запускать из владельца проекта | | Prowlarr 0 results | real search + IndexerStatus | сеть, tags, proxy, quarantine | | Radarr/Sonarr 401 к Prowlarr | URL base и API path | сверить URL из API sync | | Transmission auth | download-client test | credentials и RPC path | | Jellyfin пустая библиотека | mount + namei -l | исправить parent traverse/read | | Symlink не появился | router.py --dry-run | проверить NFO, source и cron | | После reboot сервис не встал | проекты и restart policy | запускать каждый проект из его каталога | | Диск заполнен | df -h и disk usage | остановить auto-download перед cleanup | ## Безопасность - API keys, passwords и tracker credentials не хранить в Obsidian. - Перед SQLite cleanup делать backup. - Не использовать rm -rf для media/config. - Не удалять torrents с deleteFiles=true без проверки hardlinks/symlinks. - Для cleanup сначала dry-run и список конкретных файлов. ## Связанные документы - [[family/how-to/arr-stack-taiga]] — отдельный TrueNAS Taiga stack. - [[personal/tech/kraken-docker-startup-order]] — startup/reboot. - [[family/how-to/kraken-watchtower]] — Watchtower. - [[family/how-to/kraken-network]] — сеть. - [[family/how-to/kraken-access]] — доступ.