170 lines
4.3 KiB
Markdown
170 lines
4.3 KiB
Markdown
# 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. |