Mediabot — Runbook
Routine Tasks
Check MediaManager health
curl http://192.168.1.113:8000/api/v1/health
Restart the stack
Trigger the Deploy Mediabot workflow in Forgejo. To restart a single container:
ssh [email protected] "pct exec 113 -- docker restart mediamanager"
Adding / Removing trackers via Prowlarr
- Open Prowlarr at
http://192.168.1.113:9696(internal only) - Go to Indexers → Add Indexer
- Search for the tracker and configure credentials if needed
- Prowlarr syncs indexers to MediaManager automatically
To remove a tracker, delete it from the Prowlarr indexer list.
Currently active trackers: Nyaa.si, YTS.
Credential rotation
Rotate database credentials
- Store new values via vault-write workflow: path
mediabot, patchtrue, data{"db_user": "<new>", "db_password": "<new>"} - Trigger Deploy Mediabot workflow to redeploy (Ansible re-templates config with new secrets)
Rotate qBittorrent credentials
- Store via vault-write workflow: path
mediabot, patchtrue, data{"qbit_username": "<new>", "qbit_password": "<new>"} - Trigger Deploy Mediabot workflow to redeploy
Rotate auth token secret
- Store via vault-write workflow: path
mediabot, patchtrue, data{"auth_token_secret": "<new>"} - Trigger Deploy Mediabot workflow to redeploy
Rotate Prowlarr API key
- Regenerate the key in Prowlarr UI (Settings → General → API Key)
- Store via vault-write workflow: path
mediabot, patchtrue, data{"prowlarr_api_key": "<new>"} - Trigger Deploy Mediabot workflow to redeploy
Logs
| Log | Contents | Location | Loki query | Format |
|---|---|---|---|---|
| MediaManager | API requests, download orchestration, search results, errors | Docker (LXC 113) stdout | {job="mediabot", container="mediamanager"} |
Plain text |
| PostgreSQL | DB connections, queries, startup, errors | Docker (LXC 113) stdout | {job="mediabot", container="mediamanager_db"} |
Plain text |
| qBittorrent | Torrent events, peer connections, download progress | Docker (LXC 113) stdout | {job="mediabot", container="qbittorrent"} |
Plain text |
| Prowlarr | Indexer queries, sync events, tracker responses | Docker (LXC 113) stdout | {job="mediabot", container="prowlarr"} |
Plain text |
| OAuth2 Proxy | Auth events for MediaManager web UI | Docker (LXC 119) stdout | {job="infra-apps", container="oauth2-proxy-mediamanager"} |
Plain text |
Notes:
- The OAuth2 proxy runs on LXC 119 (job=infra-apps), the other 4 containers run on LXC 113 (job=mediabot)
- SSH fallback: ssh [email protected] "docker logs mediamanager" (or mediamanager_db, qbittorrent, prowlarr)
Troubleshooting
MediaManager not starting
- Check health endpoint:
curl http://192.168.1.113:8000/api/v1/health - Check logs:
{container="mediamanager"} |= "error"in Loki - Verify PostgreSQL is running:
{container="mediamanager_db"} |= "ready to accept connections" - Confirm config was templated correctly — redeploy via Forgejo workflow to regenerate from Vault secrets
Prowlarr can't reach trackers
- Check Prowlarr logs:
{container="prowlarr"} |= "error"in Loki - Verify DNS resolution from the LXC:
ssh [email protected] "pct exec 113 -- docker exec prowlarr ping -c 1 nyaa.si" - Check if the tracker is down externally
- If using a VPN proxy, verify Gluetun is running (see Gluetun runbook)
qBittorrent not downloading
- Check logs:
{container="qbittorrent"} |= "error"in Loki - Verify qBittorrent WebUI is accessible:
curl -s -o /dev/null -w "%{http_code}" http://192.168.1.113:8080 - Check disk space on LXC 113:
ssh [email protected] "pct exec 113 -- df -h /data" - Verify credentials match Vault: redeploy via Forgejo workflow if credentials were recently rotated
Database connection issues
- Check PostgreSQL logs:
{container="mediamanager_db"}in Loki - Verify the database container is running:
ssh [email protected] "pct exec 113 -- docker ps -f name=mediamanager_db" - If the database won't start, check disk space and PostgreSQL data directory permissions