Self-hosting

Kubernetes (Helm)

Scale beyond a single host. Install the published Helm chart on any cluster — EKS, GKE, AKS, k3s, OpenShift, or Docker Desktop.

1 min read

Docker Compose runs a single server and engine. The Helm chart runs the same stack with a horizontally scalable engine — it's published as an OCI artifact, so you only need kubectl + helm pointed at your cluster.

Install

Create the required secrets, then install:

kubectl create namespace eddytor

kubectl -n eddytor create secret generic eddytor-secrets \
  --from-literal=EDDYTOR_DATABASE_URL="postgres://user:pass@host:5432/eddytor" \
  --from-literal=EDDYTOR_LOCAL_JWT_SECRET="$(openssl rand -base64 32)" \
  --from-literal=EDDYTOR_ENCRYPTION_KEY="$(openssl rand -base64 32)" \
  --from-literal=EDDYTOR_API_KEY_SECRET="$(openssl rand -base64 32)"

helm upgrade --install eddytor oci://ghcr.io/nordalf/charts/eddytor -n eddytor \
  --set secrets.existingSecret=eddytor-secrets \
  --set config.publicUrl="https://eddytor.example.com" \
  --set ingress.enabled=true --set ingress.host=eddytor.example.com

Ingress, autoscaling (HPA), and PodDisruptionBudgets are on by default. Bring your own Postgres and object store in production. After install, follow the printed NOTES to create the first admin (it runs inside the server pod via kubectl exec), then sign in:

eddytor config set-api-url https://eddytor.example.com
eddytor login

Scale the engine any time:

kubectl -n eddytor scale deploy/eddytor-engine --replicas=5

Trying it locally

No cluster? Stand up a throwaway one with k3d, kind, minikube, or Docker Desktop — then install with bundled Postgres + MinIO on a NodePort:

k3d cluster create eddytor -p "8080:30080@server:0"

kubectl create namespace eddytor
kubectl -n eddytor create secret generic eddytor-secrets \
  --from-literal=EDDYTOR_DATABASE_URL="postgres://eddytor:eddytor@eddytor-postgres:5432/eddytor" \
  --from-literal=EDDYTOR_LOCAL_JWT_SECRET="$(openssl rand -base64 32)" \
  --from-literal=EDDYTOR_ENCRYPTION_KEY="$(openssl rand -base64 32)" \
  --from-literal=EDDYTOR_API_KEY_SECRET="$(openssl rand -base64 32)"

helm install eddytor oci://ghcr.io/nordalf/charts/eddytor -n eddytor \
  --set secrets.existingSecret=eddytor-secrets \
  --set postgres.bundled=true --set minio.bundled=true \
  --set server.service.type=NodePort --set server.service.nodePort=30080
# server reachable at http://localhost:8080
Evaluation only

Bundled single-replica Postgres/MinIO have no HA and no backups. Use external, backed-up datastores and real secrets in production.

Still stuck? We reply fast.

Can't find it? Ask support and a human will answer, usually within a few hours.