# Updating the Arr Stack

This guide covers how to update the services running in the arr-stack: **Prowlarr**, **Radarr**, **Sonarr (TV)**, **Sonarr (Anime)**, **qBittorrent**, and **Seerr**. All services run as Docker containers via Docker Compose on the arr-server VM.

The same pattern applies to every container in the stack — pull the new image, then recreate the container. This is generally safe: pulling doesn't touch anything running, and recreating only replaces containers whose image actually changed.

## Step by step

**1. Log in to the arr-server**

```bash
ssh <user>@<arr-server>
```

**2. Go to the compose directory** (where `docker-compose.yml` lives)

```bash
cd ~/arr-stack
```

**3. Pull the new images** — this is *safe*, it only downloads, it doesn't touch the running containers

```bash
docker compose pull
```

To update only specific services, name them:

```bash
docker compose pull radarr sonarr-tv
```

**4. Recreate the containers with the new image** — this is where the brief downtime happens (usually well under a minute per service). Docker only recreates containers whose image actually changed:

```bash
docker compose up -d
```

Or for specific services only:

```bash
docker compose up -d radarr sonarr-tv
```

**5. Verify everything is up and on the new version**

```bash
docker compose ps
```

All services should show `Up`. Give them 30–60 seconds to fully initialize before checking further.

Check the version in each service's web UI (usually under **Settings → General** or the bottom of the sidebar), or via logs:

```bash
docker compose logs -f --tail=50
```

## Updating everything at once

To update all six services in one go:

```bash
cd ~/arr-stack
docker compose pull
docker compose up -d
```

## Service-specific notes

| Service | Notes after updating |
|---|---|
| **Prowlarr** | Feeds indexers to Radarr and both Sonarr instances. After updating, check **Settings → Apps** to confirm all three still show as synced. |
| **Radarr** | Check **Settings → Indexers** still shows all indexers active. |
| **Sonarr (TV)** / **Sonarr (Anime)** | Two independent instances — update and verify separately. Confirm episode/series detection still works. |
| **qBittorrent** | Active torrents and settings persist across updates (stored in the config volume). Verify downloads/seeding resume normally. |
| **Seerr** | Stateless request frontend. Verify it can still reach Radarr/Sonarr and that a test request goes through. |

## Rolling back

If an update causes problems, you can pin back to the previous image.

1. Find the image ID/digest that was running before the update:
   ```bash
   docker image ls --digests | grep <service-name>
   ```
   (Do this *before* pulling if you think you might need to roll back — note the current digest first.)

2. Stop the affected service:
   ```bash
   docker compose stop <service-name>
   ```

3. Temporarily pin the image in `docker-compose.yml` to the old digest:
   ```yaml
   radarr:
     image: lscr.io/linuxserver/radarr@sha256:<previous_digest>
   ```

4. Recreate with the pinned image:
   ```bash
   docker compose up -d <service-name>
   ```

5. Once confirmed stable, either leave it pinned or revert the compose file to `:latest` and re-test later.

If config itself got corrupted by the update (not just the binary), restore the relevant folder from a backup of `~/arr-stack/config/`.

## Backing up before updates

Config for every service lives under `~/arr-stack/config/<service>/`. A quick manual backup before a risky update:

```bash
tar -czf ~/arr-stack-backup-$(date +%Y%m%d-%H%M%S).tar.gz -C ~/arr-stack config/
```

## If something won't come back up

1. Check the logs for that specific service:
   ```bash
   docker compose logs <service-name>
   ```
2. Check disk space — a full disk is a common cause of failed startups:
   ```bash
   df -h ~/arr-stack
   ```
3. Check config folder permissions look sane:
   ```bash
   ls -la ~/arr-stack/config/
   ```
4. Try a plain restart before anything more drastic:
   ```bash
   docker compose restart <service-name>
   ```

## Update frequency

- All images here track `:latest`, so there's no fixed release cadence to wait for — updates just mean whatever the maintainers shipped since your last pull.
- For routine point releases, it's fine to just update.
- For anything that looks like a major version bump in the release notes, skim the changelog first — Prowlarr/Radarr/Sonarr occasionally have schema or config-format changes worth knowing about ahead of time.

## Further reading

- LinuxServer.io image docs: https://docs.linuxserver.io/
- Radarr releases: https://github.com/Radarr/Radarr/releases
- Sonarr releases: https://github.com/Sonarr/Sonarr/releases
- Prowlarr releases: https://github.com/Prowlarr/Prowlarr/releases
- qBittorrent releases: https://github.com/qbittorrent/qBittorrent/releases
- Seerr releases: https://github.com/seerr-team/seerr/releases