Files
media-charts/README.md
2025-01-13 00:36:44 +01:00

346 lines
8.6 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:
- **Plex**: Media server for streaming your media collection
- **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
- Plex: 32400 (main), 32469 (DLNA), 1900 (DLNA/UDP), 32410-32414 (GDM)
- 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
Each service can be exposed using Kubernetes ingress. Here's a detailed example:
```yaml
ingress:
enabled: true
className: "nginx" # Specify your ingress controller
annotations:
# For automatic HTTPS with cert-manager
cert-manager.io/cluster-issuer: letsencrypt-prod
# If you're using nginx-ingress
nginx.ingress.kubernetes.io/ssl-redirect: "true"
# Add this if you're having issues with paths
nginx.ingress.kubernetes.io/rewrite-target: /
hosts:
- host: jackett.example.com # Replace with your domain
paths:
- path: /
pathType: Prefix # Use Prefix for most cases
tls:
- secretName: jackett-tls
hosts:
- jackett.example.com
```
Common ingress configurations for different controllers:
1. **nginx-ingress**:
```yaml
ingress:
className: "nginx"
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
```
2. **traefik**:
```yaml
ingress:
className: "traefik"
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
```
3. **contour**:
```yaml
ingress:
className: "contour"
annotations:
projectcontour.io/websocket-routes: "/"
```
### Ingress Troubleshooting
If you encounter issues with ingress:
1. **Check ingress controller**:
```bash
# Verify ingress controller is running
kubectl get pods -n ingress-nginx
# Check ingress resource
kubectl get ingress
kubectl describe ingress jackett
```
2. **Common issues and solutions**:
- If paths aren't working, try changing `pathType` to `Prefix`
- For 404 errors, check if the `rewrite-target` annotation is needed
- For SSL/TLS issues, verify cert-manager setup and TLS secret creation
3. **Verify service connectivity**:
```bash
# Test service directly
kubectl port-forward svc/jackett 9117:9117
```
## Initial Setup
After installing all services, follow these steps:
1. **Plex**:
- Get your claim token from https://plex.tv/claim
- Set the claim token in values.yaml:
```yaml
env:
PLEX_CLAIM: "your-claim-token"
```
- For hardware transcoding, enable it in values.yaml:
```yaml
transcoding:
hardware:
enabled: true
intel: true # For Intel GPU
# or
nvidia: true # For Nvidia GPU
```
- Configure your media libraries in the Plex web interface
2. **Jackett**:
- Access the Jackett UI and add your preferred indexers
- Note down the API key and indexer URLs for Sonarr/Radarr
3. **qBittorrent**:
- Access the WebUI (default credentials: admin/adminadmin)
- Configure download paths and settings
- Note down the username/password for Sonarr/Radarr
4. **Sonarr/Radarr**:
- Add Jackett indexers
- Configure qBittorrent as download client
- Set up media library paths
- Get API keys for Overseerr
5. **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.
## Hardware Transcoding
Plex supports hardware transcoding with compatible GPUs:
### Intel GPU
```yaml
transcoding:
hardware:
enabled: true
intel: true
```
### Nvidia GPU
```yaml
transcoding:
hardware:
enabled: true
nvidia: true
```
Note: Hardware transcoding requires:
- Compatible GPU hardware on your Kubernetes nodes
- Proper drivers installed on the host
- Appropriate permissions/security contexts
- Plex Pass subscription
## Using as a Helm Repository
You can serve these charts from your own server. The repository structure is available in the `.packaged` directory.
### Hosting the Repository
1. **Using GitHub Pages**:
- Push the contents of `.packaged` to a GitHub repository
- Enable GitHub Pages in your repository settings
- The repository will be available at `https://<username>.github.io/<repository>`
2. **Using your own web server**:
- Copy the contents of `.packaged` to your web server
- Ensure the files are served with correct MIME types:
- `.tgz` files as `application/x-tar`
- `index.yaml` as `text/yaml` or `application/yaml`
### Adding the Repository to Helm
```bash
# Add the repository (using Gitea raw access)
helm repo add media-charts https://git.mumme-it.de/Felix/media-charts/raw/branch/main/.packaged
# Update the repository cache
helm repo update
# Search available charts
helm search repo media-charts
```
### Repository Source
The source code for these charts is available at:
https://git.mumme-it.de/Felix/media-charts
### Installing Charts from Repository
Instead of installing from local files, you can install directly from the repository:
```bash
# Install Plex
helm install plex media-charts/plex
# Install Jackett
helm install jackett media-charts/jackett
# Install qBittorrent
helm install qbittorrent media-charts/qbittorrent
# Install Sonarr
helm install sonarr media-charts/sonarr
# Install Radarr
helm install radarr media-charts/radarr
# Install Overseerr
helm install overseerr media-charts/overseerr
```
### Updating Charts
To update charts when new versions are released:
```bash
# Update repository cache
helm repo update
# Upgrade a specific chart
helm upgrade plex media-charts/plex
# Or upgrade with custom values
helm upgrade plex media-charts/plex -f my-values.yaml
```