diff --git a/README.md b/README.md new file mode 100644 index 0000000..63923ee --- /dev/null +++ b/README.md @@ -0,0 +1,170 @@ +# 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. \ No newline at end of file