Skip to content

Komga

Deploy Komga on Kubernetes using the official gotson/komga Docker image. A media server for comics, mangas, BDs, magazines, and eBooks with a modern web reader, OPDS support, and native apps for iOS and Android.

Both PVCs are required — losing /config destroys your library metadata

Komga uses two separate PVCs: /config for the SQLite database and application state (library index, reading progress, collections, user data) and /data for the physical comic/manga files. Losing /config destroys all library metadata, reading lists, and user accounts. The /data PVC holds the raw files and can be restored from your source collection. Always back up /config.

Key Features

  • No database server — SQLite stored in /config PVC, zero external dependencies
  • Dual PVC architecture/config (metadata) and /data (library files) are separate
  • OPDS support — works with Kybook, Chunky, Moon+ Reader, and other OPDS clients
  • JVM tuning — configurable JVM flags via javaToolOptions (-Xmx, GC options)
  • S3 backup — consistent SQLite export via Alpine backup job (covers /config only)
  • Session timeout — configurable for long-lived mobile client sessions

Installation

HTTPS repository:

helm repo add helmforge https://repo.helmforge.dev
helm repo update
helm install komga helmforge/komga -f values.yaml

OCI registry:

helm install komga oci://ghcr.io/helmforgedev/helm/komga -f values.yaml

Deployment Examples

# values.yaml — Komga basic setup with dual PVC
komga:
  timezone: UTC
  sessionTimeout: '7d' # increase for mobile clients (default 30m is too short)
  javaToolOptions: '-Xmx1g' # limit JVM heap; use javaToolOptions (javaMemory is deprecated)

persistence:
  config:
    enabled: true
    size: 2Gi # SQLite database, thumbnails, app config

  data:
    enabled: true
    size: 100Gi # comic/manga file storage

ingress:
  enabled: true
  ingressClassName: traefik
  hosts:
    - host: komga.example.com
      paths:
        - path: /
          pathType: Prefix
# values.yaml — Production Komga with TLS and tuning
komga:
  timezone: America/Sao_Paulo
  sessionTimeout: '7d'
  javaToolOptions: '-Xms512m -Xmx2g -XX:+UseG1GC'

persistence:
  config:
    enabled: true
    size: 5Gi
    storageClass: longhorn

  data:
    enabled: true
    size: 500Gi
    storageClass: longhorn

resources:
  requests:
    memory: 512Mi
    cpu: 250m
  limits:
    memory: 2Gi
    cpu: '2'

ingress:
  enabled: true
  ingressClassName: traefik
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
  hosts:
    - host: komga.example.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: komga-tls
      hosts:
        - komga.example.com
# values.yaml — Komga with daily S3 backup of /config (SQLite + metadata)
# NOTE: The backup covers /config only (database and thumbnails).
# Comic/manga files in /data must be backed up separately.
komga:
  timezone: UTC
  javaToolOptions: '-Xmx2g'

persistence:
  config:
    enabled: true
    size: 5Gi
  data:
    enabled: true
    size: 500Gi

backup:
  enabled: true
  schedule: '0 2 * * *'
  archivePrefix: komga
  includeLogs: true # include /config/logs in the archive
  s3:
    endpoint: https://s3.amazonaws.com
    bucket: my-komga-backups
    existingSecret: komga-s3-credentials
    existingSecretAccessKeyKey: access-key
    existingSecretSecretKeyKey: secret-key
# values.yaml — Komga with NFS-mounted library (data from existing NFS PVC)
komga:
  timezone: UTC
  sessionTimeout: '7d'
  javaToolOptions: '-Xmx2g'

persistence:
  config:
    enabled: true
    size: 5Gi

  data:
    enabled: false # don't create a new PVC for data
    existingClaim: nfs-komga-library # bind to pre-existing NFS PVC

ingress:
  enabled: true
  ingressClassName: traefik
  hosts:
    - host: komga.example.com
      paths:
        - path: /
          pathType: Prefix

Configuration Reference

Core

ParameterTypeDefaultDescription
nameOverridestring""Override the chart name.
fullnameOverridestring""Override the full release name.
commonLabelsobject{}Extra labels added to all resources.

Image

ParameterTypeDefaultDescription
image.repositorystringdocker.io/gotson/komgaKomga container image.
image.tagstring"1.24.1"Image tag.
image.pullPolicystringIfNotPresentImage pull policy.
imagePullSecretsarray[]Pull secrets for private registries.

Komga Configuration

ParameterTypeDefaultDescription
komga.portinteger25600Container listen port (non-standard).
komga.contextPathstring/Base URL path for reverse proxy subpath hosting (e.g. /komga).
komga.sessionTimeoutstring30mSession timeout. Increase to 7d for mobile clients to avoid frequent logins.
komga.timezonestringUTCTimezone for the container (IANA format, e.g. America/Sao_Paulo).
komga.javaToolOptionsstring""JVM options passed via JAVA_TOOL_OPTIONS (e.g. -Xmx2g -XX:+UseG1GC).
komga.javaMemorystring""Deprecated. Use komga.javaToolOptions instead.
komga.extraEnvarray[]Extra environment variables for the container.
Use javaToolOptions instead of javaMemory

komga.javaMemory is deprecated. Use komga.javaToolOptions which accepts any JVM flag: -Xmx2g, -Xms512m -Xmx2g, -XX:+UseG1GC, etc. For most home lab deployments, -Xmx1g is sufficient; increase to -Xmx2g for large libraries with thumbnails enabled.

Persistence

ParameterTypeDefaultDescription
persistence.config.enabledbooleantrueEnable PVC for /config (SQLite DB, thumbnails, app state).
persistence.config.sizestring2GiConfig PVC size. Increase if thumbnail cache grows large.
persistence.config.storageClassstring""StorageClass for the config PVC.
persistence.config.accessModestringReadWriteOnceConfig PVC access mode.
persistence.config.existingClaimstring""Use an existing PVC for /config.
persistence.data.enabledbooleantrueEnable PVC for /data (comic/manga library files).
persistence.data.sizestring50GiData PVC size. Size according to your library.
persistence.data.storageClassstring""StorageClass for the data PVC.
persistence.data.accessModestringReadWriteOnceData PVC access mode.
persistence.data.existingClaimstring""Use an existing PVC for /data (e.g. NFS PVC).

Service

ParameterTypeDefaultDescription
service.typestringClusterIPService type.
service.portinteger80Service port. Mapped to container port 25600.
service.annotationsobject{}Annotations for the Service.

Ingress

ParameterTypeDefaultDescription
ingress.enabledbooleanfalseEnable an Ingress resource.
ingress.ingressClassNamestringtraefikIngress class name.
ingress.annotationsobject{}Annotations for the Ingress (e.g. cert-manager).
ingress.hostsarray[]Host and path rules.
ingress.tlsarray[]TLS configuration.

Backup

Backup covers /config only — not the library files in /data

The backup CronJob archives /config (SQLite database, thumbnails, logs). The /data directory containing your comic and manga files is not included. Back up the /data PVC separately using Velero, NFS snapshots, or your storage provider’s snapshot mechanism.

ParameterTypeDefaultDescription
backup.enabledbooleanfalseEnable scheduled S3 backup CronJob.
backup.schedulestring"0 2 * * *"Cron schedule.
backup.archivePrefixstringkomgaPrefix for backup archive filenames.
backup.includeLogsbooleantrueInclude the /config/logs directory in the archive.
backup.s3.endpointstring""S3-compatible endpoint URL.
backup.s3.bucketstring""Target bucket name.
backup.s3.existingSecretstring""Existing secret with S3 credentials.
backup.s3.existingSecretAccessKeyKeystringaccess-keyKey for the S3 access key.
backup.s3.existingSecretSecretKeyKeystringsecret-keyKey for the S3 secret key.

Probes

ParameterTypeDefaultDescription
probes.startup.enabledbooleantrueEnable startup probe.
probes.startup.initialDelaySecondsinteger15Startup probe initial delay.
probes.startup.failureThresholdinteger30Startup probe failure threshold.
probes.liveness.enabledbooleantrueEnable liveness probe.
probes.readiness.enabledbooleantrueEnable readiness probe.

Resources and Scheduling

ParameterTypeDefaultDescription
resourcesobject{}CPU and memory requests/limits.
nodeSelectorobject{}Node selector for scheduling.
tolerationsarray[]Tolerations for scheduling.
terminationGracePeriodSecondsinteger30Termination grace period.

Extra

ParameterTypeDefaultDescription
extraVolumesarray[]Extra volumes to attach to the pod.
extraVolumeMountsarray[]Extra volume mounts for the container.
extraManifestsarray[]Extra Kubernetes manifests deployed alongside the chart.

More Information