🎃 Add a Helm chart for self-hosted Kubernetes installs
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 40/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- docker, helm, kubernetes, nginx, postgresql
- Lĩnh vực
- ci-cd, devops, documentation, infrastructure
Hướng nghiên cứu
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.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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.
- Ngôn ngữ chính
- TypeScript
- Star
- 856
- Fork
- 82
- Merge trung bình
- 8 giờ 27 phút
- Pull request đã merge (30 ngày)
- 104
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của HelpCode-ai/anythingmcp
-
good first issue hacktoberfest
Độ khó 2/5 Nửa ngày Mức phù hợp với người mới 70/100
HelpCode-ai/anythingmcp#996 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
good first issue hacktoberfest
Độ khó 2/5 Nửa ngày Mức phù hợp với người mới 72/100
HelpCode-ai/anythingmcp#995 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement good first issue hacktoberfest help wanted
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
HelpCode-ai/anythingmcp#982 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
good first issue hacktoberfest
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
HelpCode-ai/anythingmcp#745 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
🐣 Good first issue: contribute a new MCP adapterCó thể làm lại được @7k777 đã nhận 21 ngày trước và không có pull request nào đang mở. Đang mởenhancement good first issue hacktoberfest help wanted
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
HelpCode-ai/anythingmcp#150 · 18 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của HelpCode-ai/anythingmcp
Issue tương tự
-
Bayern feature:Application ready web
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 67/100
digitalfabrik/entitlementcard#3176 ·
Maintainer thường phản hồi trong vòng 7 ngày
-
[BUG] 运行位置的分支列表不自动刷新,外部新建的分支看不到Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
NanmiCoder/cc-haha#1533 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 1 ngày
-
🐛 Bug: Calendar work items cannot be opened on mobileCó thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 75/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 92/100