Post

Anyone Know Of An App That Can Do This

Anyone Know Of An App That Can Do This

Anyone Know Of An App That Can Do This

Introduction

If you’ve ever spent a lazy evening scrolling through endless movie lists, trying to decide what to watch next, you know the frustration of disjointed watchlists and scattered recommendations. The question “Anyone know of an app that can do this?” is a common refrain in homelab and self‑hosted communities, especially when the goal is to centralize media management, automate cataloguing, and integrate seamlessly with existing infrastructure.

For DevOps engineers and sysadmins who already run Docker, Kubernetes, or bare‑metal servers, the answer often lies in a self‑hosted solution that can be version‑controlled, monitored, and scaled just like any other production service. This guide walks you through a complete, production‑ready workflow for deploying a purpose‑built watchlist manager — using the widely adopted Radarr ecosystem as a concrete example — while emphasizing infrastructure best practices, security hardening, and performance considerations.

By the end of this article you will:

  • Understand the historical context and core capabilities of modern watchlist managers.
  • Identify the exact prerequisites and system requirements needed for a reliable installation.
  • Follow a step‑by‑step, Docker‑centric setup that avoids common pitfalls and leverages environment‑variable driven configuration.
  • Apply production‑grade configuration patterns, including TLS termination, resource limits, and backup strategies.
  • Execute day‑to‑day operations such as monitoring, scaling, and troubleshooting with confidence.

The content is deliberately technical, targeting experienced sysadmins and DevOps practitioners who value reproducibility, observability, and minimal external dependencies. No marketing fluff, no promotional CTAs, and no internal site links — just a concise, SEO‑optimized reference that can be dropped into any homelab documentation repository.


Understanding The Topic

What Is A Watchlist Manager?

A watchlist manager is a specialized application that ingests metadata about movies, TV shows, or other media, stores it in a searchable database, and provides user‑friendly interfaces for curating personal watchlists. In the self‑hosted realm, these tools often expose APIs for integration with other services (e.g., Plex, Jellyfin, or custom notification bots).

Historical Development

The concept traces back to early media server projects like Plex and Emby, which combined cataloguing with transcoding. As the need for dedicated metadata handling grew, community developers released purpose‑built tools such as Radarr (for movies) and Sonarr (for TV). Both are open‑source, written in .NET Core, and designed from the ground up to be container‑friendly.

Core Features

Feature Description Typical Use‑Case
Automatic metadata fetching Queries TheMovieDB, OMDB, and other APIs for posters, plot, and cast Populate a tidy library without manual entry
File monitoring & renaming Watches designated folders for new releases, renames files to a consistent schema Keep a tidy media directory
Customizable alerts Sends webhook, email, or push notifications on new releases Trigger a CI pipeline or a home‑automation routine
API access RESTful endpoints for programmatic list queries Integrate with dashboards or chatops bots
Docker support Official images with health‑checks and restart policies Deploy in any container orchestrator

Pros And Cons

Pros

  • Fully open‑source, with active community contributions.
  • Stateless operation when paired with external configuration volumes.
  • Rich API enables automation and integration with other DevOps tooling.

Cons

  • Requires a persistent storage backend for metadata; improper volume handling can cause data loss.
  • .NET runtime dependencies may increase container size compared to lighter languages.
  • UI is functional but not as polished as commercial alternatives.

Use‑Case Scenarios

  • Homelab Media Servers – Centralize movie and TV show catalogues for Plex/Jellyfin backends.
  • Automated Release Pipelines – Trigger downstream build or notification processes when a new title is added.
  • Personal Recommendation Engines – Feed watchlist data into custom analytics scripts.

The ecosystem is maturing: recent releases include built‑in support for TMDb v3 API keys, multi‑language UI, and enhanced health‑check endpoints. Upcoming roadmap items focus on graphQL APIs and WebAssembly‑based front‑ends, promising even tighter integration with modern DevOps toolchains.

Comparison With Alternatives

Tool Language Primary Strength Typical Deployment
Radarr .NET Core Full‑featured movie management, extensive plugin ecosystem Docker, Kubernetes
Sonarr .NET Core TV show focus, similar feature set Docker, Kubernetes
Traktr Go Lightweight, fast startup, minimal dependencies Docker, binary
Custom solutions Any Tailored to unique workflows Self‑hosted, often in CI pipelines

Radarr remains the de‑facto choice for movie‑centric automation, making it an ideal focal point for this guide.


Prerequisites

System Requirements

Component Minimum Recommended
CPU 1 vCPU 2+ vCPUs
RAM 1 GB 2 GB+
Disk 5 GB free 10 GB+ SSD (for fast metadata indexing)
Network Outbound internet access for API calls Stable broadband with >10 Mbps upstream
OS Ubuntu 22.04 LTS, Debian 12, or CentOS 8 Any modern Linux distribution with recent Docker Engine

Required Software

  • Docker Engine – version 24.0 or later.
  • Docker Compose – version 2.20 or later (optional but recommended).
  • Git – for cloning configuration repositories.
  • curl – for health‑check verification.

Network And Security Considerations

  • Expose only the necessary ports (typically 7878 for Radarr UI).
  • Place the container behind a reverse proxy (e.g., Caddy or Traefik) if external access is required, to terminate TLS.
  • Use Docker’s --restart unless-stopped policy to ensure resilience after host reboots.

User Permissions

  • Run containers as a non‑root user (--user $(id -u):$(id -g)) where possible.
  • Ensure the host user that owns the configuration volume ($CONFIG_DIR) has read/write permissions for the container process.

Pre‑Installation Checklist

  1. Verify Docker daemon is active: systemctl status docker.
  2. Create a dedicated directory for persistent configuration: mkdir -p $CONFIG_DIR.
  3. Pull the latest Radarr image: docker pull radarr/radarr:latest.
  4. Confirm that the host firewall allows inbound traffic on the chosen port (e.g., 7878).

Installation & Setup

1. Pull The Official Image

1
docker pull $CONTAINER_IMAGE:$CONTAINER_TAG

Replace $CONTAINER_IMAGE with radarr/radarr and $CONTAINER_TAG with latest or a specific version tag.

2. Create Configuration Volume

1
mkdir -p $CONFIG_DIR

This directory will persist metadata, settings, and logs across container restarts.

3. Define Environment Variables

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# docker-compose.yml
version: "3.8"
services:
  radarr:
    image: $CONTAINER_IMAGE:$CONTAINER_TAG
    container_name: $CONTAINER_NAMES
    restart: unless-stopped
    ports:
      - "$CONTAINER_PORTS"
    environment:
      - TZ=$CONTAINER_TIMEZONE
      - PUID=$PUID
      - PGID=$PGID
      - UMASK=$UMASK
    volumes:
      - $CONFIG_DIR:/config
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:7878/api/v3/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 45s

Explanation of key variables:

  • $CONTAINER_NAMES – Descriptive name for the container (e.g., radarr).
  • $CONTAINER_PORTS – Port mapping, typically "7878:7878".
  • $CONTAINER_TIMEZONE – Host timezone, e.g., America/New_York.
  • $PUID / $PGID – Numeric IDs of the user/group that should own files inside the container.
  • $UMASK – Permissions mask for file creation (default 022).

4. Deploy With Docker Compose

1
docker compose up -d

Verify that the container started successfully:

1
docker ps --filter "name=$CONTAINER_NAMES" --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Image}}"

You should see a healthy status after the health‑check interval.

5. Initial UI Access

Open a browser and navigate to http://localhost:$CONTAINER_PORTS. The first‑run wizard will guide you through:

  • Setting a Root Password (store it securely).
  • Configuring API Key for external services (e.g., Plex).
  • Adding Monitored Folders for automatic scanning.

6. Verify Installation

1
curl -s http://localhost:$CONTAINER_PORTS/api/v3/system/status | jq .status

Expected output: "healthy".


Configuration & Optimization

1. Advanced Environment Variables

Variable Purpose Example Value
TRACKED_COUNTRIES Restrict movie acquisition to specific regions ["US","CA"]
REQUIRED_FILENAME Enforce naming conventions for automated renaming ["Movie Title (Year).ext"]
MIN_WANTED_QUALITY Minimum video quality threshold 1080p
ADDITIONAL_SYNC_RESOURCES Additional mount points for external metadata "/mnt/media:/media"

Add these to the environment: block in docker-compose.yml as needed.

2. Security Hardening

  • TLS Termination – Deploy a reverse proxy (e.g., Caddy) in front of Radarr and enforce HTTPS.
  • Network Isolation – Use Docker’s --network flag to attach the container to a dedicated overlay network.
  • Secret Management – Store API keys in Docker secrets or an external vault (e.g., HashiCorp Vault) and mount them as read‑only files.

Example Caddy configuration (placed in /etc/caddy/Caddyfile):

https://radarr.example.com {
    reverse_proxy localhost:7878
    encode gzip
    log {
        output stdout
        format console
    }
}

3. Performance Optimization

  • Resource Limits – Add deploy.resources.limits (if using Docker Swarm) or --cpus / --memory flags to docker run.
  • Cache Directory – Mount a fast SSD cache for temporary downloads (/tmp).
  • Database Optimisation – Period
This post is licensed under CC BY 4.0 by the author.