A comprehensive media management and automation stack for your homelab environment. This stack includes tools for media organization, downloading, and streaming.
- Sonarr: TV show management and automation
- Radarr: Movie management and automation
- Prowlarr: Indexer management for Sonarr and Radarr
- Seerr: Media request management
- Jellyfin: Media streaming server
- Cinerr: Media browser for library discovery
- Medialyze: Media browser for library discovery
- qBittorrent: Torrent client with Vuetorrent UI
- FlareSolverr: Cloudflare bypass solution
- Byparr: Cloudflare bypass solution
- AW Downloader: Automated anime downloading and management
This stack requires a .env file for configuration. A complete and recommended set of variables can be found in the .env.example file.
To get started:
-
Copy the
.env.examplefile to.env:cp .env.example .env
-
Open the
.envfile and edit the variables to match your environment.
Key variables include:
DOCKER_DATA_BASEFOLDER: The absolute path for storing persistent data.DOCKER_MEDIA_BASEFOLDER: The absolute path for your media files.SONARR_API_KEY: Your API key for Sonarr.
| Service | Internal Port | Access Pattern | Description |
|---|---|---|---|
| Sonarr | 8989 |
http://sonarr:8989 |
TV show management. |
| Radarr | 7878 |
http://radarr:7878 |
Movie management. |
| Prowlarr | 9696 |
http://prowlarr:9696 |
Indexer management. |
| qBittorrent | 6881, 6881/udp |
http://qbittorrent:8003 |
Torrent client and web UI; torrent ports are mapped on host. |
| Jellyfin | 8096 |
http://jellyfin:8096 |
Media streaming. |
| Seerr | 5055 |
http://seerr:5055 |
Media requests. |
| Cinerr | 8080 |
http://cinerr:8080 |
Media library browser. |
| Medialyze | 8080 |
http://medialyze:8080 |
Media library browser. |
| FlareSolverr | 8191 |
http://flaresolverr:8191 |
Cloudflare bypass. |
| Byparr | 8191 |
http://byparr:8191 |
Cloudflare bypass. |
| AW Downloader | 6547 |
http://aw-downloader:6547 |
Anime downloading and management backend. |
Note: Most services are meant to be reached through
npm_network; qBittorrent also publishes its torrent ports on the host for peer connectivity.
| Service | Image |
|---|---|
| AW Downloader | ghcr.io/savvymeat/aw-downloader:latest |
| Cinerr | alexkouzel/cinerr:latest |
| Medialyze | ghcr.io/frederikemmer/medialyze:latest |
| Byparr | ghcr.io/thephaseless/byparr:latest |
| FlareSolverr | ghcr.io/alsd4git/flaresolverr:latest |
| Jellyfin | linuxserver/jellyfin:latest |
| Seerr | ghcr.io/seerr-team/seerr:latest |
| Prowlarr | linuxserver/prowlarr:latest |
| qBittorrent | linuxserver/qbittorrent:latest |
| Radarr | linuxserver/radarr:latest |
| Sonarr | linuxserver/sonarr:latest |
-
Initial Setup:
# Create required directories mkdir -p ${DOCKER_DATA_BASEFOLDER}/{sonarr,radarr,prowlarr,jellyfin,jellyseerr,qbittorrent,aw-downloader,cinerr,medialyze} mkdir -p ${DOCKER_MEDIA_BASEFOLDER}/{tvseries,anime,downloads}
-
Start the Stack:
docker compose up -d
-
Access Services:
- Access services through Nginx Proxy Manager or directly via their container DNS names on
npm_network.
- Access services through Nginx Proxy Manager or directly via their container DNS names on
All services are connected through npm_network for internal access and reverse proxying.
- API Keys: Keep your Sonarr API key secure and don't share it
- Port Exposure: Only expose necessary ports to the internet
- Authentication: Enable authentication on all services
- Updates: Keep all services updated to the latest versions
-
Service Not Starting:
- Check logs:
docker compose logs <service_name> - Verify environment variables
- Check port conflicts
- Check logs:
-
Download Issues:
- Verify qBittorrent configuration
- Check FlareSolverr status
- Verify indexer status in Prowlarr
-
Media Not Showing:
- Check file permissions
- Verify media paths
- Check Sonarr/Radarr configuration