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.
Links
- 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.