Streaming Setup

My streaming setup is fairly simple and automated. It’s currently made up of Jellyfin for streaming, qBittorrent for downloading, and the *arr suite (prowlarr, sonarr, radarr, and lidarr) for finding torrents.

The script that I use is below. I chose to name it streamarr.sh to pay homage to the work horses of the setup. I thought about creating a git repo to track changes I make to it, but that seems a bit overkill for something that is only used once every year or longer.

#!/usr/bin/env bash

PUID=0
PGID=0
TZ=America/Belize
APPS="${HOME}"/apps
ANIME=/mnt/media/anime
SHOWS=/mnt/media/shows
MOVIES=/mnt/media/movies
MUSIC=/mnt/media/music

create_pod () {
  podman pod create \
    --name=streamarr \
    -p 8096:8096 `#jellyfin http` \
    -p 8920:8920 `#jellyfin https` \
    -p 7359:7359/udp `#jellyfin network discovery` \
    -p 1900:1900/udp `#jellyfin DNLA discovery` \
    -p 8080:8080 `#qbittorrent webui` \
    -p 6881:6881 `#qbittorrent extra` \
    -p 6881:6881/udp `#qbittorrent extra` \
    -p 9696:9696 `#prowlarr` \
    -p 8989:8989 `#sonarr` \
    -p 7878:7878 `#radarr` \
    -p 8686:8686 `#lidarr`
}

run_jellyfin () {
  podman run -d \
    --pod=streamarr \
    --name=jellyfin \
    --restart=unless-stopped \
    -e PUID="${PUID}" \
    -e PGID="${PGID}" \
    -e TZ="${TZ}" \
    --device=/dev/dri:/dev/dri \
    -v "${APPS}"/jellyfin/config:/config:Z \
    -v "${SHOWS}":/data/tvshows:z \
    -v "${MOVIES}":/data/movies:z \
    -v "${ANIME}":/data/anime:z \
    -v "${MUSIC}":/data/music:z \
    lscr.io/linuxserver/jellyfin:latest
}

run_qbittorrent () {
  podman run -d \
    --pod=streamarr \
    --name=qbittorrent \
    --restart=unless-stopped \
    -e PUID="${PUID}" \
    -e PGID="${PGID}" \
    -e TZ="${TZ}" \
    -e WEBUI_PORT=8080 \
    -e TORRENTING_PORT=6881 \
    -v "${APPS}"/qbittorrent/config:/config:Z \
    -v "${APPS}"/downloads:/downloads:z \
    lscr.io/linuxserver/qbittorrent:latest
}

run_prowlarr () {
  podman run -d \
    --pod=streamarr \
    --name=prowlarr \
    --restart=unless-stopped \
    -e PUID="${PUID}" \
    -e PGID="${PGID}" \
    -e TZ="${TZ}" \
    -v "${APPS}"/prowlarr/config:/config:Z \
    lscr.io/linuxserver/prowlarr:latest
}

run_sonarr () {
  podman run -d \
    --pod=streamarr \
    --name=sonarr \
    --restart=unless-stopped \
    -e PUID="${PUID}" \
    -e PGID="${PGID}" \
    -e TZ="${TZ}" \
    -v "${APPS}"/sonarr/config:/config:Z \
    -v "${SHOWS}":/tv:z \
    -v "${APPS}"/downloads:/downloads:z \
    lscr.io/linuxserver/sonarr:latest
}

run_radarr () {
  podman run -d \
    --pod=streamarr \
    --name=radarr \
    --restart=unless-stopped \
    -e PUID="${PUID}" \
    -e PGID="${PGID}" \
    -e TZ="${TZ}" \
    -v "${APPS}"/radarr/config:/config:Z \
    -v "${MOVIES}":/movies:z \
    -v "${APPS}"/downloads:/downloads:z \
    lscr.io/linuxserver/radarr:latest
}

run_lidarr () {
  podman run -d \
    --pod=streamarr \
    --name=lidarr \
    --restart=unless-stopped \
    -e PUID="${PUID}" \
    -e PGID="${PGID}" \
    -e TZ="${TZ}" \
    -v "${APPS}"/lidarr/config:/config:Z \
    -v "${MUSIC}":/music:z \
    -v "${APPS}"/downloads:/downloads:z \
    lscr.io/linuxserver/lidarr:latest
}

main () {
  mkdir -p "${APPS}"/downloads
  mkdir -p "${APPS}"/{jellyfin,qbittorrent,prowlarr,sonarr,radarr,lidarr}/config
  create_pod
  run_jellyfin
  run_qbittorrent
  run_prowlarr
  run_sonarr
  run_radarr
  run_lidarr
}

main

This site uses Just the Docs, a documentation theme for Jekyll.