Deploy Dispatcharr on PVE LXC and integrate with Jellyfin for live TV channels #50

Closed
opened 2026-04-28 02:17:53 +00:00 by claude-bot · 0 comments
Collaborator

Goal

Run Dispatcharr on PVE as a new LXC container and surface live TV channels inside the Jellyfin app (also on PVE).

Dispatcharr is an open-source IPTV/EPG stream manager. It consolidates M3U playlist sources, matches EPG (electronic program guide) data, and exposes channels to media centers via HDHomeRun emulation or an M3U URL. Jellyfin treats it as a tuner device � no plugins required.


Deployment Plan

1. New LXC on PVE

  • Create an Ubuntu 22.04 LXC on PVE (unprivileged is fine; no GPU passthrough needed)
  • Install Docker inside the LXC (standard apt method � not snap)
  • Assign a static IP (see issue #36 � static IPs for LXCs is already on the backlog)

2. Docker Compose for Dispatcharr

Deploy in AIO (all-in-one) mode. The compose file belongs in the homelab-docker repo so Renovate can track the image and Komodo can deploy it.

services:
  dispatcharr:
    image: ghcr.io/dispatcharr/dispatcharr:latest
    container_name: dispatcharr
    restart: unless-stopped
    ports:
      - "9191:9191"
    environment:
      - DISPATCHARR_ENV=aio
      - REDIS_HOST=localhost
      - CELERY_BROKER_URL=redis://localhost:6379/0
      - DISPATCHARR_LOG_LEVEL=info
    volumes:
      - dispatcharr_data:/data

volumes:
  dispatcharr_data:

Verify against the official docs at implementation time � image tags and env vars may have changed.

3. Configure Dispatcharr

  • Add M3U source(s) in the Dispatcharr UI
  • Set up EPG sources and map channels
  • Confirm channels are visible in the Dispatcharr channel list

4. Connect Jellyfin

  1. In Jellyfin ? Dashboard ? Live TV ? Tuner Devices ? +
  2. Tuner Type: HD HomeRun (recommended) � use the HDHR URL from Dispatcharr's Channels page
    • Or M3U Tuner if HDHR emulation has issues (set simultaneous stream limit to 0; Dispatcharr manages limits)
  3. Add Guide Data: in Jellyfin ? TV Guide ? + ? XMLTV URL from Dispatcharr
  4. Trigger a guide data refresh and verify channels appear in Jellyfin's Live TV section

Considerations

  • Issue #36 dependency (soft): Static IPs aren't set on LXCs yet. Work around by noting the DHCP-assigned IP at setup time and pinning it in the router, or do a quick manual static IP config in the LXC's netplan.
  • Komodo stack: Add a new "dispatcharr" Deploy Stack action to the existing Komodo procedure so webhook deploys cover it automatically.
  • SOPS secrets: AIO mode likely doesn't need secrets at first (no passwords in the default compose). If credentials are added later, follow the existing .env / .env.enc pattern.
  • Renovate: Will auto-open PRs for image updates once the compose file is in the repo.
  • M3U source: You'll need an IPTV provider or local M3U file before channels will show up. Dispatcharr itself doesn't include content � it manages and proxies what you point it at.

When Claude Picks This Up

Before touching any config, run these checks:

1. Proxmox connectivity

ssh root@192.168.1.227 "pct list"

Confirm PVE is reachable and get the current list of LXC IDs. Note the Jellyfin container ID and IP � needed for the Jellyfin integration step.

2. Jellyfin LXC details

ssh root@192.168.1.227 "pct exec <jellyfin_id> -- hostname -I"

Confirm Jellyfin's IP so the Dispatcharr HDHR URL can be verified to be reachable from it.

3. Verify Jellyfin web UI is up

Hit Jellyfin at http://<jellyfin_ip>:8096 to confirm it's healthy before making changes.

4. Check available resources on PVE

ssh root@192.168.1.227 "pvesh get /nodes/pve/status"

Confirm PVE has headroom for another LXC (Dispatcharr + Docker is modest: 1 vCPU, 1�2 GB RAM).

5. Confirm homelab-docker repo state on Nexus

ssh matt@192.168.1.226 "cd /home/matt/repos/homelab-docker && git status && git log --oneline -5"

Ensure the repo is clean before adding the new stack.

## Goal Run [Dispatcharr](https://github.com/dispatcharr/dispatcharr) on PVE as a new LXC container and surface live TV channels inside the Jellyfin app (also on PVE). Dispatcharr is an open-source IPTV/EPG stream manager. It consolidates M3U playlist sources, matches EPG (electronic program guide) data, and exposes channels to media centers via HDHomeRun emulation or an M3U URL. Jellyfin treats it as a tuner device � no plugins required. --- ## Deployment Plan ### 1. New LXC on PVE - Create an Ubuntu 22.04 LXC on PVE (unprivileged is fine; no GPU passthrough needed) - Install Docker inside the LXC (standard apt method � not snap) - Assign a static IP (see issue #36 � static IPs for LXCs is already on the backlog) ### 2. Docker Compose for Dispatcharr Deploy in AIO (all-in-one) mode. The compose file belongs in the `homelab-docker` repo so Renovate can track the image and Komodo can deploy it. ```yaml services: dispatcharr: image: ghcr.io/dispatcharr/dispatcharr:latest container_name: dispatcharr restart: unless-stopped ports: - "9191:9191" environment: - DISPATCHARR_ENV=aio - REDIS_HOST=localhost - CELERY_BROKER_URL=redis://localhost:6379/0 - DISPATCHARR_LOG_LEVEL=info volumes: - dispatcharr_data:/data volumes: dispatcharr_data: ``` > Verify against the [official docs](https://dispatcharr.github.io/Dispatcharr-Docs/installation/) at implementation time � image tags and env vars may have changed. ### 3. Configure Dispatcharr - Add M3U source(s) in the Dispatcharr UI - Set up EPG sources and map channels - Confirm channels are visible in the Dispatcharr channel list ### 4. Connect Jellyfin 1. In Jellyfin ? **Dashboard ? Live TV ? Tuner Devices ? +** 2. **Tuner Type:** HD HomeRun (recommended) � use the HDHR URL from Dispatcharr's Channels page - Or M3U Tuner if HDHR emulation has issues (set simultaneous stream limit to 0; Dispatcharr manages limits) 3. Add Guide Data: in Jellyfin ? **TV Guide ? +** ? XMLTV URL from Dispatcharr 4. Trigger a guide data refresh and verify channels appear in Jellyfin's Live TV section --- ## Considerations - **Issue #36 dependency (soft):** Static IPs aren't set on LXCs yet. Work around by noting the DHCP-assigned IP at setup time and pinning it in the router, or do a quick manual static IP config in the LXC's netplan. - **Komodo stack:** Add a new "dispatcharr" Deploy Stack action to the existing Komodo procedure so webhook deploys cover it automatically. - **SOPS secrets:** AIO mode likely doesn't need secrets at first (no passwords in the default compose). If credentials are added later, follow the existing `.env` / `.env.enc` pattern. - **Renovate:** Will auto-open PRs for image updates once the compose file is in the repo. - **M3U source:** You'll need an IPTV provider or local M3U file before channels will show up. Dispatcharr itself doesn't include content � it manages and proxies what you point it at. --- ## When Claude Picks This Up Before touching any config, run these checks: ### 1. Proxmox connectivity ```bash ssh root@192.168.1.227 "pct list" ``` Confirm PVE is reachable and get the current list of LXC IDs. Note the Jellyfin container ID and IP � needed for the Jellyfin integration step. ### 2. Jellyfin LXC details ```bash ssh root@192.168.1.227 "pct exec <jellyfin_id> -- hostname -I" ``` Confirm Jellyfin's IP so the Dispatcharr HDHR URL can be verified to be reachable from it. ### 3. Verify Jellyfin web UI is up Hit Jellyfin at `http://<jellyfin_ip>:8096` to confirm it's healthy before making changes. ### 4. Check available resources on PVE ```bash ssh root@192.168.1.227 "pvesh get /nodes/pve/status" ``` Confirm PVE has headroom for another LXC (Dispatcharr + Docker is modest: 1 vCPU, 1�2 GB RAM). ### 5. Confirm homelab-docker repo state on Nexus ```bash ssh matt@192.168.1.226 "cd /home/matt/repos/homelab-docker && git status && git log --oneline -5" ``` Ensure the repo is clean before adding the new stack.
matt closed this issue 2026-04-30 12:46:35 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
matt/homelab-docker#50
No description provided.