Skip to content

Maintenance & updates

Update routine

What How Cadence
:latest images (Sonarr, Radarr, Prowlarr, Plex, Bazarr, Seerr, Tautulli, FlareSolverr) Portainer → Stack → Update the stack → Re-pull image scheduled (see private runbook)
Pinned images (gluetun, qBittorrent, restic, Portainer) Check release notes, bump the tag in the stack or compose, redeploy deliberately, when needed
DSM Control Panel → Update (security updates) when released

Never run docker-compose in the folder of a Portainer-managed stack

Portainer keeps its own copy of the compose file and the env. Edit and redeploy in Portainer (or through its API).

Rollback tags

Before bumping a pinned image, keep the old one:

docker tag qmcgaw/gluetun:<old> qmcgaw/gluetun:rollback-$(date +%Y%m%d)

Rolling back means putting the old tag back in the stack and redeploying. Before risky changes, also save the stack file and env (Portainer API GET /api/stacks/<id>/file) and the app's config.xml/DB into /volume1/docker/backups/<change>-<date>/ (root 700).

Known gotchas

  • Saving or updating the gluetun-qbittorrent stack recreates gluetun. Wait for gluetun to be healthy; qBittorrent restarts with it. Check that its listen port = the forwarded port.
  • Allowed Hosts in Sonarr/Radarr: any new hostname or proxy has to be added, followed by a restart, or you get 400 Invalid Hostname.
  • Snapshots of data hold on to the space of replaced media for up to a month. If the volume passes 80%, prune old data snapshots first.
  • The qBittorrent share-limit action Remove triggers an *arr health warning. That is expected and intended (see gluetun page).
  • Plex Optimized Versions are not worth it on this CPU (far slower than realtime).

Keeping this guide current

  1. Make the change on the NAS and note it in the private runbook.
  2. Update the matching page and/or compose/ file here. Sanitize (see the README checklist).
  3. Add an entry to the Changelog.
  4. Run ./scripts/scan.sh, then mkdocs build --strict, then commit.