4.3 KiB
Media Server Helm Charts
This repository contains a collection of Helm charts for deploying a complete media server stack on Kubernetes. The stack includes:
- Jackett: Index manager/proxy for torrent trackers
- qBittorrent: Torrent client for downloading
- Sonarr: TV shows management and automation
- Radarr: Movies management and automation
- Overseerr: Request management and discovery interface
Prerequisites
- Kubernetes cluster
- Helm 3.x installed
- Storage class available for persistent volumes
- (Optional) Ingress controller if you plan to use ingress
Installation
Each service can be installed independently, but they are designed to work together. Here's the recommended installation order:
- qBittorrent (for downloads)
- Jackett (for indexers)
- Sonarr and Radarr (for media management)
- Overseerr (for request management)
Basic Installation
# Install qBittorrent
helm install qbittorrent ./qbittorrent
# Install Jackett
helm install jackett ./jackett
# Install Sonarr
helm install sonarr ./sonarr
# Install Radarr
helm install radarr ./radarr
# Install Overseerr
helm install overseerr ./overseerr
Configuration
Each chart supports the following common configurations through their respective values.yaml
:
Common Settings
replicaCount
: Number of replicas (default: 1)image.tag
: Container image tag (default: "latest")persistence.*.storageClass
: Storage class for PVCssecurityContext.PUID/PGID
: User/Group IDs (default: 1000)ingress
: Ingress configurationresources
: CPU/Memory limits and requests
Service-Specific Ports
- Jackett: 9117
- qBittorrent: 8080 (WebUI), 6881 (BitTorrent)
- Sonarr: 8989
- Radarr: 7878
- Overseerr: 5055
Example Values
Using Existing Download Directory
To share the download directory between qBittorrent, Sonarr, and Radarr:
- First, install qBittorrent:
# qbittorrent/values.yaml
persistence:
downloads:
enabled: true
size: 100Gi
- Then configure Sonarr/Radarr to use the existing PVC:
# sonarr/values.yaml or radarr/values.yaml
persistence:
downloads:
enabled: true
existingClaim: "qbittorrent-downloads" # Use the PVC created by qBittorrent
Setting Up Ingress
Example ingress configuration for each service:
ingress:
enabled: true
className: nginx
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
hosts:
- host: service-name.example.com
paths:
- path: /
pathType: ImplementExact
tls:
- secretName: service-name-tls
hosts:
- service-name.example.com
Initial Setup
After installing all services, follow these steps:
-
Jackett:
- Access the Jackett UI and add your preferred indexers
- Note down the API key and indexer URLs for Sonarr/Radarr
-
qBittorrent:
- Access the WebUI (default credentials: admin/adminadmin)
- Configure download paths and settings
- Note down the username/password for Sonarr/Radarr
-
Sonarr/Radarr:
- Add Jackett indexers
- Configure qBittorrent as download client
- Set up media library paths
- Get API keys for Overseerr
-
Overseerr:
- Configure Sonarr/Radarr connections using their API keys
- Set up user authentication
Persistence
Each service requires persistent storage:
- Jackett: Configuration data
- qBittorrent: Configuration and downloads
- Sonarr: Configuration and TV shows library
- Radarr: Configuration and movies library
- Overseerr: Configuration data
Make sure your storage class supports the required access modes (ReadWriteOnce by default).
Security
- All services run as non-root with configurable PUID/PGID
- Default credentials should be changed after installation
- Consider using ingress with TLS for secure access
- API keys should be kept secure and not shared
Troubleshooting
Common issues and solutions:
-
PVC Issues:
- Ensure storage class exists
- Check PVC status with
kubectl get pvc
-
Permission Issues:
- Adjust PUID/PGID to match your media files ownership
- Ensure consistent permissions across services
-
Network Issues:
- Verify services can communicate using internal DNS
- Check service and pod status with
kubectl get pods,svc
Contributing
Feel free to submit issues and pull requests for improvements.