dograh/deploy/helm/dograh/Chart.yaml
Abhishek 88f4477edb
feat: add Helm chart for Kubernetes deployment (#365)
* feat: add Helm chart for Kubernetes deployment

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Replace bundled Bitnami subcharts with in-chart manifests on official images

The Bitnami catalog removed all versioned image tags from docker.io/bitnami in
Aug 2025 (old images frozen in bitnamilegacy, maintained catalog now behind a
Broadcom subscription), so the bundled postgresql/redis/minio subcharts no
longer pull. Replace them with plain in-chart manifests built on official
upstream images, keeping the internal/all-in-one path fully self-contained and
free of third-party chart packaging that can disappear:

- internal-postgres.yaml: pgvector/pgvector:pg17 — upstream Postgres plus the
  `vector` extension the migrations require. POSTGRES_USER=dograh is the initdb
  superuser, so CREATE EXTENSION vector succeeds.
- internal-redis.yaml: redis:7.4-alpine, password-protected, AOF persistence.
- internal-minio.yaml: minio/minio, root creds shared with the app via a single
  secret (can't drift); the app auto-creates its bucket.

Service/secret names are unchanged (<rel>-postgresql, <rel>-redisinternal-master,
<rel>-minio) so the app wiring is untouched. Dep passwords are generated once and
persisted across upgrades via lookup. Drop the Chart.yaml dependencies,
Chart.lock, and the `helm dependency` step; the internal manifests gate on the
mode toggles (database.mode=internal, etc.).

Also fixes surfaced by smoke-testing on a live EKS cluster:
- Dockerfile: ship the per-service run_*.sh entrypoints the chart invokes.
- migrate-job: run as a post-install/pre-upgrade hook (the bundled Postgres does
  not exist during pre-install) with a wait-for-postgres init container.
- backend env: declare POSTGRES_PASSWORD/REDIS_PASSWORD before the DATABASE_URL/
  REDIS_URL that interpolate them (Kubernetes only expands back-references).
- worker liveness probes: pgrep isn't in the slim runtime image; check
  /proc/1/cmdline instead (each worker execs its process as PID 1).
- UI: set HOSTNAME=0.0.0.0 so Next.js standalone doesn't bind to the k8s-injected
  pod name (which maps to the pod IP only, breaking port-forward/loopback).

Verified end-to-end on EKS 1.36: all pods Ready, migrations applied (pgvector
extension + 27 tables), UI login page and web API served via port-forward.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-07-03 12:39:39 +05:30

37 lines
1.2 KiB
YAML

apiVersion: v2
name: dograh
description: |
Dograh — open-source voice AI platform. Deploys the FastAPI backend
(decomposed into web, ARQ worker, ARI manager singleton, and campaign
orchestrator singleton), the Next.js UI, and coturn for WebRTC media
relay. Optional bundled PostgreSQL, Redis, and MinIO via subcharts.
type: application
# version: chart version. Bump for any chart change.
# appVersion: Dograh application version. Tracks the image tag.
version: 0.1.0
appVersion: "0.1.0"
kubeVersion: ">=1.28.0-0"
keywords:
- voice-ai
- webrtc
- telephony
- fastapi
home: https://dograh.com
sources:
- https://github.com/dograh-hq/dograh
maintainers:
- name: Dograh
# The bundled stateful deps (PostgreSQL, Redis, MinIO) for the internal/all-in-one
# modes are plain in-chart manifests (templates/internal-*.yaml) built on official
# upstream images — NOT subcharts. This avoids depending on third-party chart
# packaging/registries that can change or disappear (as the Bitnami catalog did in
# Aug 2025). Production deployments should use the external/managed modes
# (database.mode=external, redis.mode=external, storage.mode=s3|externalMinio).
#
# dependencies: []