2025-01-10 13:46:01 +01:00
2025-01-10 13:45:35 +01:00
2025-01-10 13:45:35 +01:00
2025-01-10 13:45:35 +01:00
2025-01-10 13:45:35 +01:00
2025-01-10 13:45:35 +01:00
2025-01-10 13:46:01 +01:00

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

# 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:
# qbittorrent/values.yaml
persistence:
  downloads:
    enabled: true
    size: 100Gi
  1. 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:

  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.

Description
No description provided
Readme 1.6 MiB
Languages
Smarty 99.4%
Shell 0.6%