🎃 Add a Helm chart for self-hosted Kubernetes installs
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 40/100
- Issue-Typ
- Feature
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- docker, helm, kubernetes, nginx, postgresql
- Bereich
- ci-cd, devops, documentation, infrastructure
Rechercherichtung
Start with docker-compose.yml and start.sh for the environment variables and start modes, then Dockerfile:108-181 for the user, ports and healthcheck. Build the chart under deploy/helm/anythingmcp/ and check the probes against /health in health.controller.ts. Done when helm lint and helm template pass kubeconform -strict for both values files and the CI job is green. Claim the issue by comment first, since the issue suggests splitting the work.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Part of the October Challenge #997.
Why
Teams that run everything on Kubernetes cannot use docker compose up. Today they translate docker-compose.yml into manifests themselves and have to work out which paths go to which port, what the secrets must look like and how long the app needs to boot. A Helm chart is the usual way to install a self-hosted service on Kubernetes (n8n, Grafana and Keycloak ship one). The repository has no Helm or Kubernetes files, and the docs do not mention Kubernetes.
Self-hosted vs Cloud
- Self-hosted: a new install method for self-hosted instances, Community and Business alike. Licence and edition logic is unchanged and the chart says nothing about editions. The chart does not set
DEPLOYMENT_MODE, so instances stay self-hosted (docs/deployment.md:353). - Cloud (
DEPLOYMENT_MODE=cloud): not affected. AnythingMCP Cloud runs on Docker Compose with a blue/green release script (docker-compose.cloud.yml,deploy/cloud/release.sh), not on Kubernetes. Do not change anything underdeploy/cloud/or the compose files. - Who can use it: whoever operates the cluster. App roles are untouched: on a fresh install the first account registered becomes the admin of a new organization (
auth.controller.ts:490).
What to build
Chart at deploy/helm/anythingmcp/ with Chart.yaml (apiVersion v2, appVersion = the root package.json version, chart version starting at 0.1.0), a commented values.yaml, values.schema.json, templates/ and a README.md. No subchart dependencies.
- App Deployment:
- Image
helpcodeai/anythingmcp, tag defaulting toappVersion. Check the version tag format published on Docker Hub and never default tolatest. The image islinux/amd64only (docker-publish.yml:80); say so in the README. - Default command (
./start.sh, both processes in one pod; migrations run at start). Container ports3000(UI) and4000(API/MCP), oneServicewith both. replicaCount: 1. Document that more replicas need Redis (REDIS_URL) for shared rate limits, and sticky sessions ifMCP_STATEFUL_SESSIONSis enabled, because stateful MCP sessions live in process memory (mcp-servers/mcp-session.manager.ts).- Probes: a
startupProbeonGET /health:4000that allows at least 180 s (boot loads the whole catalog; the Dockerfile uses a 120 s start period,Dockerfile:168-178); readiness on/health; liveness on a TCP check of port 4000, because/healthalso checks the database (health.controller.ts:74-80) and a database outage should not restart the pod. securityContext:runAsNonRoot, uid/gid 1001 (Dockerfile:125,:164),allowPrivilegeEscalation: false, capabilities dropped; anemptyDirat/app/diagnostics(HEAP_SNAPSHOT_DIR,Dockerfile:154). If you can makereadOnlyRootFilesystem: truework with a fewemptyDirmounts, do it and list the paths; otherwise say what blocked it.- Resources with defaults, and
NODE_MAX_OLD_SPACE_MB(read bystart.sh) set below the memory limit.
- Image
- Configuration:
NODE_ENV=production,PORT=4000, andSERVER_URL,FRONTEND_URL,CORS_ORIGIN,NEXT_PUBLIC_API_URLall derived from onepublicUrlvalue (CORS_ORIGINis mandatory in production,main.ts:215-235).MCP_AUTH_MODE(defaultlegacy, as indocker-compose.yml),MCP_ALLOW_ANONYMOUS=false,ALLOW_OPEN_REGISTRATION=false, optionalREDIS_URL, plusextraEnv/extraEnvFromfor everything else (SMTP, KG LLM, SSO). - Secrets:
JWT_SECRET,ENCRYPTION_KEY,MCP_API_KEYand the database password, either fromexistingSecretor generated by the chart. Generated values must survivehelm upgrade(read the existing Secret withlookup, annotatehelm.sh/resource-policy: keep): a newENCRYPTION_KEYmakes every stored connector credential unreadable. At least 32 characters; the backend refuses placeholder-looking values (common/secrets.util.ts:48-66), sovalues.yamlmust not ship example secrets. - Database:
postgresql.enabled: true(default) deploys onepostgres:17-alpineStatefulSet with a PVC, for evaluation and small installs.externalDatabase.urlorexternalDatabase.existingSecretfor production, which disables the bundled one. - Ingress (disabled by default): one host; the backend paths to port 4000 and everything else to 3000. Use the same list as the Cloud Caddyfile (
deploy/cloud/Caddyfile:88-123):/api,/health,/mcp,/.well-known,/auth,/sso,/authorize,/callback,/token,/register,/userinfo. Explicit routing matters: the frontend's own rewrites to the backend are baked in at build time tohttp://localhost:4000(packages/frontend/next.config.ts:5, note indocker-compose.cloud.yml:209-214).ingressClassName, TLS and annotations come from values; document for ingress-nginxproxy-buffering: "off"and a read timeout of at least 120 s, because MCP responses can be streamed and tool calls can take a while. NOTES.txt: the URL, "open it and register the first user", and a reminder to back upENCRYPTION_KEYtogether with the database (docs/operations/backup-restore.md).- CI: a job in
.github/workflows/ci.ymlthat runshelm lint, andhelm templatepiped tokubeconform -strictfor the default values and for an external-database + ingress values file. Changes under.github/get extra review, so keep the workflow diff small. - Docs: a "Kubernetes (Helm)" section in
docs/deployment.mdafter "Production Deployment" (:159), linking the chart README.
Where to look
docker-compose.yml: the app's environment variables and defaults.start.sh:all/backend/frontendmodes, migrations at start,NODE_MAX_OLD_SPACE_MB.Dockerfile:108-181: runtime user, ports, diagnostics directory, healthcheck and why its start period is long.docs/deployment.md:202-246(path routing behind a proxy),:338-363(environment variables).deploy/cloud/Caddyfile:84-123: complete list of backend-owned paths.docker-compose.cloud.yml:203-216: why the frontend cannot proxy to a separate backend.packages/backend/src/common/secrets.util.ts: secret validation at startup.packages/backend/src/health/health.controller.ts:74-80: what/healthchecks.packages/backend/src/mcp-servers/mcp-session.manager.ts: in-memory stateful sessions.
Acceptance criteria
-
helm lintpasses;helm templateoutput for both values files passeskubeconform -strict. - On kind or minikube:
helm install→ pod Ready → UI reachable → first user registered → a connector created →tools/liston/mcp/<serverId>answers with an MCP API key (commands and output in the PR, secrets redacted). -
helm upgradewithout value changes keepsJWT_SECRETandENCRYPTION_KEY: after the upgrade, existing sessions stay valid and connector credentials still decrypt. - The pod runs as non-root; no secret value appears in a ConfigMap or in
values.yamldefaults. - The CI job is green;
docs/deployment.mdand the chart README are written.
Out of scope
- Publishing the chart (Helm repository, OCI registry, Artifact Hub): maintainers decide after merge.
- Separate Deployments for frontend and backend (
./start.sh backend|frontend), autoscaling, multi-replica support. - Bundling Redis or the MOTIS service used by the Deutsche Bahn connector.
- Operators, Kustomize, Terraform.
- Any change to
deploy/cloud/, the compose files or the Dockerfile.
Size
L (several days, may be split: app Deployment, Secret and external database first; bundled Postgres, Ingress and CI second).
How to claim
Comment "I'd like to work on this" and we'll assign you. Rules in #997.
- Vorherrschende Sprache
- TypeScript
- Sterne
- 856
- Forks
- 82
- Ø Merge
- 8 Std. 27 Min.
- Gemergte PRs (30 T.)
- 104
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus HelpCode-ai/anythingmcp
-
good first issue hacktoberfest
Schwierigkeit 2/5 Ein halber Tag Anfängerfreundlichkeit 70/100
HelpCode-ai/anythingmcp#996 ·
Maintainer antworten meist innerhalb von 1 Tag
-
good first issue hacktoberfest
Schwierigkeit 2/5 Ein halber Tag Anfängerfreundlichkeit 72/100
HelpCode-ai/anythingmcp#995 ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement good first issue hacktoberfest help wanted
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
HelpCode-ai/anythingmcp#982 ·
Maintainer antworten meist innerhalb von 1 Tag
-
good first issue hacktoberfest
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
HelpCode-ai/anythingmcp#745 ·
Maintainer antworten meist innerhalb von 1 Tag
-
🐣 Good first issue: contribute a new MCP adapterEvtl. wieder frei @7k777 hat das vor 21 Tagen übernommen, und es ist kein Pull Request offen. Offenenhancement good first issue hacktoberfest help wanted
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
HelpCode-ai/anythingmcp#150 · 18 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in HelpCode-ai/anythingmcp
Ähnliche Issues
-
area:tui enhancement platform:macos
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 66/100
anthropics/claude-code#101490 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 66/100
netlify/netlify-mcp#75 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
atlassian-labs/compiled#1960 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
pnp/cli-microsoft365#7639 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
nextjs-tracking
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
cloudflare/vinext#3887 ·
Maintainer antworten meist innerhalb von 1 Tag