From a2351a266d8dff71cfbf470c20b1fe73097494d8 Mon Sep 17 00:00:00 2001 From: Nick Yeoman Date: Thu, 2 Jul 2026 21:23:02 -0700 Subject: [PATCH] feat: add lidarr_dev stack, rewrite prowlarr_dev, align template conventions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add lidarr_dev stack with compose.yaml, sample.env, and README - Rewrite prowlarr_dev to match template conventions (compose.yaml, defaults on all vars, proxy network, README sections) - Set default VOL_PATH to /data (absolute, never ./data) - Reorder README sections: Overview → Project Details → Getting Started → Env Vars → Volume Notes → Network Notes → Docker Run - Update template-readme.md and AGENTS.md with new conventions --- AGENTS.md | 4 +- _docs/template-readme.md | 32 +++++++------- lidarr_dev/README.md | 66 ++++++++++++++--------------- lidarr_dev/compose.yaml | 4 +- lidarr_dev/sample.env | 2 +- prowlarr_dev/README.md | 74 ++++++++++++++++++++++++++++++--- prowlarr_dev/compose.yaml | 18 ++++++++ prowlarr_dev/docker-compose.yml | 13 ------ prowlarr_dev/sample.env | 3 +- 9 files changed, 141 insertions(+), 75 deletions(-) create mode 100644 prowlarr_dev/compose.yaml delete mode 100644 prowlarr_dev/docker-compose.yml diff --git a/AGENTS.md b/AGENTS.md index 0e45c66..4ebd41a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -5,12 +5,12 @@ - Every stack has at least 3 files: `compose.yaml` (dockhand style), `sample.env`, `README.md` - `_dev` = experimental, `_notes` = docs/minimal examples, no suffix = production-ready - Always references an external `proxy` network (`docker network create proxy` once) -- Volumes use `${VOL_PATH:-/data}` as the base path +- Volumes use `${VOL_PATH:-/data}` as the base path (absolute `/data`, never `./data`) - Timezone defaults to `America/Vancouver`, but only include if the container requires it. - Restart policy, image tag, and port are configurable via env vars with sensible defaults - New stacks: copy from `_docs/template-compose.md` and `_docs/template-readme.md` - Compose section order: `image` → `restart` → `volumes` → `environment` → `ports` → `networks` → `depends_on` → `healthcheck` → `labels` → `command` → `user` -- README section order: `Overview` → `Getting Started` → `Docker Run` → `Project Details` → `Environment Variable Notes` → `Volume Notes` → `Network Notes` → `Additional Notes / Gotchas` → `Dockhand Stack, Deploy from Git` +- README section order: `Overview` → `Project Details` → `Getting Started` → `Environment Variable Notes` → `Volume Notes` → `Network Notes` → `Docker Run` → `Additional Notes / Gotchas` → `Dockhand Stack, Deploy from Git` - Every compose file must declare the external `proxy` network at the root level: ```yaml networks: diff --git a/_docs/template-readme.md b/_docs/template-readme.md index 78bef22..0316ce0 100644 --- a/_docs/template-readme.md +++ b/_docs/template-readme.md @@ -5,21 +5,6 @@ A short 1--3 sentence description of what this Docker Compose project does. -## Getting Started - -1. Start the container: `docker compose up -d` -2. Open http://localhost:[PORT] in your browser -3. Follow the initial setup wizard to configure the application - -## Docker Run - -```bash -docker run -d \ - --name=[SERVICE_NAME] \ - # ...env vars, ports, volumes... - [IMAGE_NAME] -``` - ## Project Details - **Project Repository:** [Link](https://example.com) @@ -28,6 +13,12 @@ docker run -d \ - **Documentation:** [Docs](https://dockerhub.com) - **Reverse Proxy Port:** `80` +## Getting Started + +1. Start the container: `docker compose up -d` +2. Open http://localhost:[PORT] in your browser +3. Follow the initial setup wizard to configure the application + ## Environment Variable Notes List any required or optional environment variables, where they come @@ -52,6 +43,15 @@ Example: Requires proxy network +## Docker Run + +```bash +docker run -d \ + --name=[SERVICE_NAME] \ + # ...env vars, ports, volumes... + [IMAGE_NAME] +``` + ## Additional Notes / Gotchas Add any special information someone should know before running the @@ -66,4 +66,4 @@ Additional env file (optional): SERVICENAME/sample.env Then "Load" SERVICENAME/sample.env into the Environmental variables in dockhand -Create the Stack \ No newline at end of file +Create the Stack diff --git a/lidarr_dev/README.md b/lidarr_dev/README.md index 0cbcd3b..121d50c 100644 --- a/lidarr_dev/README.md +++ b/lidarr_dev/README.md @@ -4,6 +4,12 @@ Lidarr is a music collection manager for Usenet and BitTorrent users. It automatically monitors specified artists, searches for new releases (or upgrades to existing tracks), and sends them to your download client. After download, Lidarr renames and organizes the files into your music library and can notify your media server of the new content. +## Project Details + +- **Project Repository:** [https://lidarr.audio/](https://lidarr.audio/) +- **Container Image:** [ghcr.io/hotio/lidarr](https://hotio.dev/containers/lidarr/) +- **Reverse Proxy Port:** `8686` + ## Getting Started Open http://localhost:8686 in your browser and complete the initial setup wizard: @@ -26,6 +32,31 @@ qBittorrent downloads to its own directory → Lidarr picks it up, renames/tags Lidarr doesn't natively import Spotify playlists. Use a community tool like [SpotifyToLidarr](https://github.com/Claudemirovsky/SpotifyToLidarr) or set up a **List** (Settings → Lists) from Last.fm or MusicBrainz to auto-add artists based on your listening habits. +## Environment Variable Notes + +| Variable | Description | +|---|---| +| `LIDARR_IMAGE` | Container image (default: `ghcr.io/hotio/lidarr:release`) | +| `LIDARR_RESTART` | Restart policy (default: `unless-stopped`) | +| `LIDARR_PORT` | Published port for the web UI (default: `8686`) | +| `VOL_PATH` | Base path for persistent data volumes (default: `/data`) | +| `TZ` | Container timezone (default: `America/Vancouver`) | + +## Volume Notes + +| Volume | Purpose | +|---|---| +| `${VOL_PATH:-/data}/lidarr/config` | Application configuration and database | +| `${VOL_PATH:-/data}/lidarr/data` | Download client data and working directory | + +## Network Notes + +Requires an external `proxy` network. Create it once with: + +```bash +docker network create proxy +``` + ## Docker Run ```bash @@ -36,44 +67,13 @@ docker run -d \ -e UMASK=002 \ -e TZ=America/Vancouver \ -p 8686:8686 \ - -v ${VOL_PATH:-./data}/lidarr/config:/config \ - -v ${VOL_PATH:-./data}/lidarr/data:/data \ + -v ${VOL_PATH:-/data}/lidarr/config:/config \ + -v ${VOL_PATH:-/data}/lidarr/data:/data \ --network proxy \ --restart unless-stopped \ ghcr.io/hotio/lidarr:release ``` -## Project Details - -- **Project Repository:** [https://lidarr.audio/](https://lidarr.audio/) -- **Container Image:** [ghcr.io/hotio/lidarr](https://hotio.dev/containers/lidarr/) -- **Reverse Proxy Port:** `8686` - -## Environment Variable Notes - -| Variable | Description | -|---|---| -| `LIDARR_IMAGE` | Container image (default: `ghcr.io/hotio/lidarr:release`) | -| `LIDARR_RESTART` | Restart policy (default: `unless-stopped`) | -| `LIDARR_PORT` | Published port for the web UI (default: `8686`) | -| `VOL_PATH` | Base path for persistent data volumes (default: `./data`) | -| `TZ` | Container timezone (default: `America/Vancouver`) | - -## Volume Notes - -| Volume | Purpose | -|---|---| -| `${VOL_PATH}/lidarr/config` | Application configuration and database | -| `${VOL_PATH}/lidarr/data` | Download client data and working directory | - -## Network Notes - -Requires an external `proxy` network. Create it once with: - -```bash -docker network create proxy -``` - ## Dockhand Stack, Deploy from Git - **Cookbooks Repository** diff --git a/lidarr_dev/compose.yaml b/lidarr_dev/compose.yaml index 739145f..511d5ea 100644 --- a/lidarr_dev/compose.yaml +++ b/lidarr_dev/compose.yaml @@ -3,8 +3,8 @@ services: image: ${LIDARR_IMAGE:-ghcr.io/hotio/lidarr:release} restart: ${LIDARR_RESTART:-unless-stopped} volumes: - - ${VOL_PATH:-./data}/lidarr/config:/config - - ${VOL_PATH:-./data}/lidarr/data:/data + - ${VOL_PATH:-/data}/lidarr/config:/config + - ${VOL_PATH:-/data}/lidarr/data:/data environment: - PUID=1000 - PGID=1000 diff --git a/lidarr_dev/sample.env b/lidarr_dev/sample.env index d88e8ff..19b67c1 100644 --- a/lidarr_dev/sample.env +++ b/lidarr_dev/sample.env @@ -1,4 +1,4 @@ # Lidarr -VOL_PATH=./data +VOL_PATH=/data LIDARR_IMAGE=ghcr.io/hotio/lidarr:release TZ="America/Vancouver" diff --git a/prowlarr_dev/README.md b/prowlarr_dev/README.md index 145a95c..0d22e67 100644 --- a/prowlarr_dev/README.md +++ b/prowlarr_dev/README.md @@ -1,9 +1,71 @@ - # Prowlarr +# Prowlarr - Official Site: https://prowlarr.com/ - docker docs: https://hotio.dev/containers/prowlarr/ (VPN setup here) - Proxy port: 9696 +## Overview - Prowlarr is an indexer manager and proxy developed by the *arr team to integrate with and support applications like Sonarr, Radarr, Lidarr, and Readarr. Its primary function is to centralize the management of your various torrent tracker and Usenet indexer configurations. Instead of manually adding and configuring each indexer in every single one of your *arr applications, you simply add them once to Prowlarr. Prowlarr then automatically syncs these indexers and their settings to all of your connected apps, drastically simplifying setup and maintenance while also providing a single dashboard to monitor the status and statistics of all your indexer sources. +Prowlarr is an indexer manager and proxy for the *arr ecosystem. It centralizes your torrent tracker and Usenet indexer configuration — add them once in Prowlarr and they sync automatically to Sonarr, Radarr, Lidarr, and Readarr. It's a modern replacement for Jackett with a unified API and built-in sync. -I'm using this as a replacement for https://github.com/Jackett/Jackett +## Project Details + +- **Project Repository:** [https://prowlarr.com/](https://prowlarr.com/) +- **Container Image:** [ghcr.io/hotio/prowlarr](https://hotio.dev/containers/prowlarr/) +- **Reverse Proxy Port:** `9696` + +## Getting Started + +Open http://localhost:9696 in your browser and complete the initial setup wizard: + +1. **Choose your UI language** +2. **Add an indexer** — search or manually configure your preferred trackers/usenet providers +3. **Connect your *arr apps** — go to **Settings → Apps** and add Sonarr, Radarr, Lidarr, etc. Prowlarr will automatically sync all configured indexers to them +4. If you're migrating from Jackett, Prowlarr can import your existing indexer configs during setup + +### Download flow + +Prowlarr does not handle downloads. It only provides indexer search results to your *arr apps — they in turn send downloads to qBittorrent, SABnzbd, etc. + +## Environment Variable Notes + +| Variable | Description | +|---|---| +| `PROWLARR_IMAGE` | Container image (default: `ghcr.io/hotio/prowlarr:release`) | +| `PROWLARR_RESTART` | Restart policy (default: `unless-stopped`) | +| `PROWLARR_PORT` | Published port for the web UI (default: `9696`) | +| `VOL_PATH` | Base path for persistent data volumes (default: `/data`) | + +## Volume Notes + +| Volume | Purpose | +|---|---| +| `${VOL_PATH}/prowlarr/config` | Indexer configurations, app sync settings, database | + +## Network Notes + +Requires an external `proxy` network. Create it once with: + +```bash +docker network create proxy +``` + +## Docker Run + +```bash +docker run -d \ + --name=prowlarr \ + -e PUID=1000 \ + -e PGID=1000 \ + -e UMASK=002 \ + -p 9696:9696 \ + -v ${VOL_PATH:-/data}/prowlarr/config:/config \ + --network proxy \ + --restart unless-stopped \ + ghcr.io/hotio/prowlarr:release +``` + +## Dockhand Stack, Deploy from Git + +- **Cookbooks Repository** +- **stackname:** prowlarr_dev +- **Compose file path:** prowlarr_dev/compose.yaml +- **Additional env file (optional):** prowlarr_dev/sample.env + +Load `prowlarr_dev/sample.env` into the Environment variables in Dockhand, then create the Stack. diff --git a/prowlarr_dev/compose.yaml b/prowlarr_dev/compose.yaml new file mode 100644 index 0000000..ed4a0fe --- /dev/null +++ b/prowlarr_dev/compose.yaml @@ -0,0 +1,18 @@ +services: + prowlarr: + image: ${PROWLARR_IMAGE:-ghcr.io/hotio/prowlarr:release} + restart: ${PROWLARR_RESTART:-unless-stopped} + volumes: + - ${VOL_PATH:-/data}/prowlarr/config:/config + environment: + - PUID=1000 + - PGID=1000 + - UMASK=002 + ports: + - "${PROWLARR_PORT:-9696}:9696" + networks: + - proxy + +networks: + proxy: + external: true diff --git a/prowlarr_dev/docker-compose.yml b/prowlarr_dev/docker-compose.yml deleted file mode 100644 index af60b0a..0000000 --- a/prowlarr_dev/docker-compose.yml +++ /dev/null @@ -1,13 +0,0 @@ -services: - prowlarr: - image: ${PROWLARR_IMAGE} - restart: unless-stopped - environment: - - PUID=1000 - - PGID=1000 - - UMASK=002 - - TZ=${TZ} - volumes: - - "${VOL_CONFIG_PATH:-./data/prowlarr/config}:/config" - ports: - - 9696:9696 diff --git a/prowlarr_dev/sample.env b/prowlarr_dev/sample.env index 1845911..1afb1bc 100644 --- a/prowlarr_dev/sample.env +++ b/prowlarr_dev/sample.env @@ -1,4 +1,3 @@ # Prowlarr -VOL_PATH=./data/prowlarr/config +VOL_PATH=/data PROWLARR_IMAGE=ghcr.io/hotio/prowlarr:release -TZ="America/Vancouver" \ No newline at end of file