[2026-09-20] eagle: family/how-to/arr-stack-kraken.md family/how-to/kraken-watchtower.md personal/tech/watchtower-docker-updates.md
This commit is contained in:
1 parent
71ccf6a456
commit
9432cee44e
3 files changed
+74
-12
No files matched your search
@@ -423,6 +423,20 @@ sudo docker inspect <name> -f '{{index .Config.Labels "com.docker.compose.projec
|
||||
|
||||
Автообновлением занимается Watchtower — **проверить его конфиг перед тем, как ждать обновлений**: [[family/how-to/kraken-watchtower]], теория — [[personal/tech/watchtower-docker-updates]].
|
||||
|
||||
## Автообновление (Watchtower) — 2026-09-20
|
||||
|
||||
Все сервисы стека (`radarr`, `sonarr`, `prowlarr`, `flaresolverr`, `transmission`) **плюс `jellyfin` и `portainer`** размечены label `com.centurylinklabs.watchtower.enable=true` → обновляются автоматически (7 контейнеров, проверено `scanned=7`). Полный разбор и список того, что НЕ обновляется: [[family/how-to/kraken-watchtower]].
|
||||
|
||||
Актуальные версии на 2026-09-20:
|
||||
|
||||
| Сервис | Версия |
|
||||
|---|---|
|
||||
| Radarr | 6.4.4.10685 |
|
||||
| Sonarr | 4.0.20.3014 |
|
||||
| Prowlarr | 2.6.5.5623 |
|
||||
| FlareSolverr | 3.5.2 |
|
||||
| Watchtower | 1.22.2 (nickfedor) |
|
||||
|
||||
## Notes
|
||||
|
||||
- See [[arr-stack-taiga]] for Taiga (secondary) arr stack
|
||||
|
||||
@@ -18,10 +18,45 @@ related:
|
||||
---
|
||||
# Watchtower на Kraken (RPi5 / OMV / arm64)
|
||||
|
||||
> **Создано:** 2026-09-20. **Статус:** ✅ работает, версия 1.22.2 (форк nickfedor).
|
||||
> ⏳ **Открытый пункт:** `--label-enable` включён, но label НЕТ ни у одного контейнера → **сейчас Watchtower не обновит ничего**. Ждёт решения Alex: вариант 1 (повесить label на radarr/sonarr/prowlarr/flaresolverr) или вариант 2 (убрать `--label-enable`, обновлять все 12).
|
||||
> **Создано:** 2026-09-20. **Статус:** ✅ ЗАВЕРШЕНО — версия 1.22.2 (форк nickfedor), label проставлены на 7 контейнеров, проверено прогоном `scanned=7 failed=0`.
|
||||
> **Связанные:** [[family/how-to/arr-stack-kraken]], [[personal/tech/watchtower-docker-updates]] (реюзабельная теория), [[personal/tech/jellyfin-db-schema-mismatch]], [[personal/tech/docker-data-root-mount-race]]
|
||||
|
||||
## ✅ РЕШЕНИЕ (2026-09-20): какие контейнеры обновляются автоматом
|
||||
|
||||
Решение Alex: «вариант 1 + jellyfin, portainer, transmission». Итого **7 контейнеров размечены** label `com.centurylinklabs.watchtower.enable=true`:
|
||||
|
||||
| Контейнер | Где label | Примечание |
|
||||
|---|---|---|
|
||||
| `radarr` | `docker/radarr/docker-compose.yml` | |
|
||||
| `sonarr` | `docker/sonarr/docker-compose.yml` | |
|
||||
| `prowlarr` | `docker/prowlarr/docker-compose.yml` | |
|
||||
| `flaresolverr` | `docker/prowlarr/docker-compose.yml` | тот же файл |
|
||||
| `jellyfin` | `docker/jellyfin/docker-compose.yml` | ⚠️ тег `latest` — см. ниже |
|
||||
| `portainer` | `docker/portainer/docker-compose.yml` | данные в `/data`, пересоздание безопасно |
|
||||
| `transmission` | `docker/transmission/docker-compose.yml` | 244 торрента в `./` (config), пересоздание данные не задело |
|
||||
|
||||
**НЕ размечены (сознательно):**
|
||||
- `watchtower` — сам себя (иначе зацикливание)
|
||||
- `hermes-kraken` — агент Hermes
|
||||
- `xray-reverse-bridge` — VPN-мост
|
||||
- `rclone`, `cloudflared`
|
||||
|
||||
Проверка после простановки:
|
||||
```bash
|
||||
sudo docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
|
||||
nickfedor/watchtower:1.22.2 --run-once --monitor-only --label-enable
|
||||
# → Update session completed failed=0 scanned=7 updated=0 ← ровно 7, не 13
|
||||
```
|
||||
|
||||
### Про Jellyfin и тег (решение Alex)
|
||||
|
||||
Алекс явно потребовал: **«пусть ставит до всех публичных релизов»** → стоит `image: jellyfin/jellyfin:latest`, Watchtower поставит в т.ч. мажор 13.
|
||||
|
||||
Моя рекомендация была пинить `12` (после инцидента `jellyfin-db-schema-mismatch`, где контейнер остался на старом образе при уже мигрированной БД и отдавал 503). **Алекс выбрал `latest` — риск принят осознанно.** Если Jellyfin однажды отдаст 503 после автообновления — смотреть [[personal/tech/jellyfin-db-schema-mismatch]], бэкап БД: `/home/kraken/backups/jellyfin-label-20260920-190935/`.
|
||||
|
||||
⚠️ Важное следствие `--cleanup`: старые образы удаляются, откатиться на предыдущую версию после автообновления будет **некуда**.
|
||||
|
||||
|
||||
## Что было сломано (2026-09-20)
|
||||
|
||||
Watchtower стоял на `containrrr/watchtower` **без единого флага** и **не обновил ни один контейнер за ~2.5 месяца**.
|
||||
@@ -73,20 +108,29 @@ sudo docker logs --tail 20 watchtower
|
||||
# → Watchtower 1.22.2 using Docker API v1.54 (был v1.40)
|
||||
# → Next scheduled run: ... in 23 hours 59 minutes ← таймер виДЕН
|
||||
|
||||
# 2) РЕАЛЬНЫЙ прогон без изменений
|
||||
# 2) РЕАЛЬНЫЙ прогон без изменений — БЕЗ label (сравнение)
|
||||
sudo docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
|
||||
nickfedor/watchtower:1.22.2 --run-once --monitor-only
|
||||
# → Update session completed failed=0 scanned=13 updated=0
|
||||
# → "Found new image" container=transmission ← баг no-available-image-info ВЫЛЕЧЕН
|
||||
|
||||
# 3) С label (актуальный режим) → должно быть ровно 7
|
||||
sudo docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
|
||||
nickfedor/watchtower:1.22.2 --run-once --monitor-only --label-enable
|
||||
# → Update session completed failed=0 scanned=7 updated=0
|
||||
```
|
||||
|
||||
## ⚠️ КРИТИЧНО: `--label-enable` и Jellyfin
|
||||
## ⚠️ КРИТИЧНО: Watchtower и Jellyfin — история и принятое решение
|
||||
|
||||
**Watchtower уже один раз сломал Jellyfin** (см. [[personal/tech/jellyfin-db-schema-mismatch]]): переключил мажорную версию 10.11.8 → 12.1, БД мигрировала вперёд, сервер перестал стартовать с `no such column: p.Permission_Permissions_Guid`, Jellyfin отдавал 503.
|
||||
**Watchtower уже один раз сломал Jellyfin** (см. [[personal/tech/jellyfin-db-schema-mismatch]]): контейнер остался на старом образе 10.11.8 при уже мигрированной до 12.1 БД → `no such column: p.Permission_Permissions_Guid` → 503.
|
||||
|
||||
Поэтому **Jellyfin нельзя давать в автообновление без пина тега**. Если ставить ему label — сначала заменить `image: jellyfin/jellyfin` (без тега = latest) на пиновый, например `jellyfin/jellyfin:12.1`.
|
||||
Разбор инцидента показывает: **сама миграция БД прошла нормально**, упало из-за рассинхрона «старый сервер + новая схема». То есть мажорный апдейт сам по себе БД не ломает.
|
||||
|
||||
Правило: `latest` + автомажор = риск сломать БД (EF Core не умеет даунгрейд схемы). Для сервисов с миграциями БД пинить мажорную версию.
|
||||
**Решение Alex (2026-09-20):** тег `latest`, обновляемся до всех публичных релизов, включая мажор 13. Риск принят осознанно. Бэкап БД перед пересозданием: `/home/kraken/backups/jellyfin-label-20260920-190935/` (24 МБ).
|
||||
|
||||
**Если Jellyfin отдаёт 503 после автообновления** — это тот же класс проблемы: смотреть `personal/tech/jellyfin-db-schema-mismatch`, проверить `docker exec jellyfin /jellyfin/jellyfin --version` против версии в `__EFMigrationsHistory`.
|
||||
|
||||
⚠️ Следствие `--cleanup`: старые образы удаляются, откат на предыдущую версию **после** автообновления невозможен. Если нужен откат — только полный restore БД из бэкапа.
|
||||
|
||||
## Диагностика Watchtower
|
||||
|
||||
@@ -115,10 +159,10 @@ done
|
||||
|
||||
| # | Пункт | Статус |
|
||||
|---|---|---|
|
||||
| 1 | Решить вариант 1 / вариант 2 для `--label-enable` и проставить label | ⏳ ждёт Alex |
|
||||
| 2 | `Allowed Hosts is not configured` warning в Radarr/Sonarr/Prowlarr — ограничить, какие hostname могут обращаться | ⏳ отдельная задача |
|
||||
| 3 | Найдены новые образы при прогоне: `portainer`, `cloudflared`, `transmission` — обновить при необходимости | ℹ️ не делалось (transmission без label, portainer/cloudflared — свои тонкости) |
|
||||
| 4 | Home Assistant на Kraken — `Exited (128)` ~2 месяца, не поднимался (см. [[family/how-to/kraken-access]]) | ⏳ отдельная задача |
|
||||
| 1 | `Allowed Hosts is not configured` warning в Radarr/Sonarr/Prowlarr — ограничить, какие hostname могут обращаться | ⏳ отдельная задача |
|
||||
| 2 | Home Assistant на Kraken — `Exited (128)` ~2 месяца, не поднимался (см. [[family/how-to/kraken-access]]) | ⏳ отдельная задача |
|
||||
|
||||
✅ Закрыто 2026-09-20: label проставлены, решение по Jellyfin принято (`latest`), первый прогон с label прошёл (`scanned=7 failed=0`).
|
||||
|
||||
## Теория (реюзабельно)
|
||||
|
||||
|
||||
@@ -108,7 +108,11 @@ level=info msg="Update session completed" failed=0 scanned=N skipped=0 updated=0
|
||||
|
||||
- Jellyfin на Kraken: `latest` уехал 10.11.8 → 12.1, БД мигрировала вперёд, откатить схему нельзя → сервер отдавал **503**, `no such column: ...`. Детали: [[personal/tech/jellyfin-db-schema-mismatch]].
|
||||
|
||||
**Правило:** сервисам с БД и миграциями — пиновый тег (`image: jellyfin/jellyfin:12.1`), НЕ `latest` + watchtower. Либо не давать им label, либо сначала пин.
|
||||
**Правило (общее):** сервисам с forward-only миграциями БД безопаснее пиновый тег (`image: jellyfin/jellyfin:12.1`), а не `latest` + автообновление.
|
||||
|
||||
⚠️ **Но это рекомендация, не аксиома — на Kraken решено иначе.** Alex 2026-09-20 явно выбрал `latest` для Jellyfin: «пусть ставит до всех публичных релизов», т.е. включая мажор 13. Риск принят осознанно, бэкап БД делается перед пересозданием. См. [[family/how-to/kraken-watchtower]] § «Про Jellyfin и тег».
|
||||
|
||||
Отдельно важный нюанс: **упал не мажорный апдейт как таковой**, а рассинхрон «контейнер на старом образе + уже мигрированная БД». Сама миграция прошла нормально. То есть мажорный апдейт БД не ломает — ломает откат сервера назад без отката схемы.
|
||||
|
||||
## Питфоллы диагностики
|
||||
|
||||
|
||||
Reference in new issue
Block a user