# 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: 1. qBittorrent (for downloads) 2. Jackett (for indexers) 3. Sonarr and Radarr (for media management) 4. Overseerr (for request management) ### Basic Installation ```bash # 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 PVCs - `securityContext.PUID/PGID`: User/Group IDs (default: 1000) - `ingress`: Ingress configuration - `resources`: 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: 1. First, install qBittorrent: ```yaml # qbittorrent/values.yaml persistence: downloads: enabled: true size: 100Gi ``` 2. Then configure Sonarr/Radarr to use the existing PVC: ```yaml # 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: ```yaml 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: 1. **Jackett**: - Access the Jackett UI and add your preferred indexers - Note down the API key and indexer URLs for Sonarr/Radarr 2. **qBittorrent**: - Access the WebUI (default credentials: admin/adminadmin) - Configure download paths and settings - Note down the username/password for Sonarr/Radarr 3. **Sonarr/Radarr**: - Add Jackett indexers - Configure qBittorrent as download client - Set up media library paths - Get API keys for Overseerr 4. **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: 1. **PVC Issues**: - Ensure storage class exists - Check PVC status with `kubectl get pvc` 2. **Permission Issues**: - Adjust PUID/PGID to match your media files ownership - Ensure consistent permissions across services 3. **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.