Skip to content

Helm

The Helm chart is the recommended way to run PlotPress on Kubernetes. It expects:

  • A PersistentVolumeClaim for /var/lib/plotpress (SQLite).
  • A ConfigMap or git-sync sidecar (or both) supplying the workspace at /workspace.
  • A Secret for environment variables referenced by ${VAR} in connections.yaml and plotpress.yaml.
Terminal window
helm repo add plotpress https://octopyth.github.io/plotpress
helm repo update
# values.yaml
image:
tag: v0.1.0
ingress:
enabled: true
className: nginx
hosts:
- host: plotpress.example.com
paths: ["/"]
tls:
- secretName: plotpress-tls
hosts: [plotpress.example.com]
persistence:
enabled: true
size: 5Gi
storageClass: hcloud-volumes
# Workspace can come from a ConfigMap or a git-sync init container.
workspace:
source: gitSync
gitSync:
repo: https://github.com/example/plotpress-workspace
branch: main
interval: 60s
env:
WAREHOUSE_PASSWORD:
secretRef:
name: plotpress-secrets
key: warehouse-password
OIDC_CLIENT_SECRET:
secretRef:
name: plotpress-secrets
key: oidc-client-secret
Terminal window
helm install plotpress plotpress/plotpress -n plotpress --create-namespace -f values.yaml
StrategyWhen to use
gitSyncWorkspace lives in its own git repo; init container clones and syncs every interval. The default.
configMapSmall workspaces with no secrets in dashboards. Reload requires a rollout.
pvcYou manage the workspace out-of-band (e.g. mounted from an existing PVC).

The chart runs PlotPress as a Deployment with replicas: 1. SQLite forces single-writer; multi-replica needs Postgres (planned). For now, upgrades are short rolling-restarts (~1s of unavailability).

A HelmRelease example for Flux:

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: plotpress
namespace: plotpress
spec:
interval: 10m
chart:
spec:
chart: plotpress
version: ">=0.1.0 <1.0.0"
sourceRef:
kind: HelmRepository
name: plotpress
namespace: flux-system
valuesFrom:
- kind: ConfigMap
name: plotpress-values
- kind: Secret
name: plotpress-values-secret

The Go backend is small. Reasonable starting point:

resources:
requests:
cpu: 50m
memory: 64Mi
limits:
memory: 256Mi

Most of the cost is the connection pools to your data sources; tune those in connections.yaml rather than at the pod level.