Skip to content

Mediabot — Setup

Automated media management stack. Runs on a dedicated Debian LXC (113). MediaManager (FastAPI) handles requests and orchestrates downloads via Prowlarr and qBittorrent. All services run in a single Docker Compose stack behind Caddy at https://media.eva-00.network.

  • GitHub (MediaManager): https://github.com/maxdorninger/MediaManager
  • Prowlarr docs: https://wiki.servarr.com/prowlarr
  • qBittorrent docs: https://github.com/qbittorrent/qBittorrent/wiki

Infrastructure

Host LXC ID IP URL Resources
Debian LXC 113 192.168.1.113 https://media.eva-00.network 4 cores, 4 GB RAM, 50 GB disk

Services in the stack

Service Container Port Notes
MediaManager mediamanager 8000 FastAPI app, exposed via Caddy
PostgreSQL 17 mediamanager_db 5432 Internal only
qBittorrent qbittorrent 8080 Internal WebUI, credentials from Vault
Prowlarr prowlarr 9696 Primary indexer manager
Jackett jackett 9117 Disabled fallback, kept in stack

Observability

Logs

Logs are collected via Grafana Alloy Docker discovery and shipped to Loki.

Query Purpose
{container="mediamanager"} MediaManager application logs
{container="mediamanager"} \|= "error" MediaManager errors only
{container="mediamanager_db"} PostgreSQL logs
{container="qbittorrent"} qBittorrent logs
{container="prowlarr"} Prowlarr logs
{container="jackett"} Jackett logs (disabled, but available)

Access: Grafana → Explore → Loki → Enter query

Health check

curl http://192.168.1.113:8000/api/v1/health

IaC

Artifact Path
Playbook ansible/playbooks/mediabot.yml
Workflow .forgejo/workflows/mediabot.yml
Compose services/mediabot/docker-compose.yml
Config template services/mediabot/config.toml.j2

Note: MediaManager config is templated by Ansible from config.toml.j2 with Vault secrets injected at deploy time.

Secrets

secret/mediabot → db_user, db_password, db_name, qbit_username, qbit_password, auth_token_secret, jackett_api_key, prowlarr_api_key

Library / Folder structure

mediabot writes all libraries to dlbox (/mnt/seedbox on chizuru, bind-mounted into LXC 113 as /dlbox). qBittorrent downloads land in /dlbox/normal/downloads so MediaManager can hardlink into the library paths on the same filesystem.

Library Path (inside LXC 113) Consumer
Anime (TV) /dlbox/normal/tv/anime Shoko (own indexer)
Live Action (TV) /dlbox/normal/tv/live-action Jellyfin TV Shows library
Anime Movies /dlbox/normal/movies/anime Shoko (own indexer)
Movies (General) /dlbox/normal/movies/general Jellyfin Movies library
Torrent downloads /dlbox/normal/downloads qBittorrent working dir

Indexer configuration

Prowlarr is the primary indexer manager. Jackett is disabled but remains deployed as a fallback.

Currently active trackers:

  • Nyaa.si — anime torrents
  • YTS — movie torrents

Trackers are managed via the Prowlarr API or UI, not config files.