Bounty Submission: Universal One-Click Deployment (Docker + K8s + Tilt) for FinMind#387
Open
sirrodgepodge wants to merge 2 commits intorohitdash08:mainfrom
Open
Conversation
Resolves rohitdash08#144 12 mandatory platform deployment configs: - Railway, Heroku, DigitalOcean (App Platform + Droplet), Render, Fly.io, AWS (ECS Fargate + App Runner), GCP Cloud Run, Azure Container Apps, Netlify, Vercel Kubernetes: - Full Helm chart with ingress/TLS, HPA, ServiceMonitor, sealed-secrets annotations, health probes on all services - Raw kubectl manifests (deploy/k8s/) - Tilt local dev workflow with image matching Tooling: - Interactive deploy script (scripts/deploy.sh) — menu for all 14 paths - Per-platform documentation (docs/deployment/) Existing docker-compose.yml, Dockerfiles, and scripts untouched.
There was a problem hiding this comment.
Pull request overview
This PR adds a “multi-platform deployment” bundle for FinMind, including an interactive deploy launcher, Helm chart + raw Kubernetes helpers, and provider-specific configs/guides for common PaaS/IaaS targets (Render, Fly.io, GCP, AWS, Azure, DigitalOcean, Railway, Netlify, Vercel, Heroku).
Changes:
- Adds deployment configs for multiple platforms (Render/Fly/GCP/AWS/Azure/DO/Railway/Heroku) plus frontend-only configs (Netlify/Vercel).
- Introduces a Helm chart for Kubernetes deployments and a Tiltfile for local K8s workflows.
- Adds a universal interactive deploy script and a set of deployment documentation pages.
Reviewed changes
Copilot reviewed 46 out of 46 changed files in this pull request and generated 19 comments.
Show a summary per file
| File | Description |
|---|---|
vercel.json |
Vercel SPA build + rewrite + caching headers config (frontend-only). |
Tiltfile |
Tilt-based local Kubernetes workflow (image builds + apply manifests + port-forwards). |
scripts/deploy.sh |
Interactive “choose a platform” deploy launcher (mix of execution + instructions). |
scripts/deploy-k8s.sh |
Kubernetes raw-manifest apply script with secrets bootstrapping logic. |
render.yaml |
Render Blueprint for backend (docker) + frontend (static) + Postgres. |
Procfile |
Heroku process definition for backend. |
netlify.toml |
Netlify SPA build + redirect + caching headers config (frontend-only). |
heroku.yml |
Heroku container stack build/run definition for backend. |
docs/deployment/render.md |
Render-specific deployment guide. |
docs/deployment/README.md |
Central deployment landing page describing supported platforms and verification. |
docs/deployment/railway.md |
Railway-specific deployment guide. |
docs/deployment/kubernetes.md |
Kubernetes deployment guide (raw manifests + Helm + Tilt). |
docs/deployment/heroku.md |
Heroku-specific deployment guide (one-click + CLI). |
docs/deployment/gcp.md |
GCP Cloud Run deployment guide (Cloud Build + secrets). |
docs/deployment/flyio.md |
Fly.io deployment guide (scripted + manual). |
docs/deployment/digitalocean.md |
DigitalOcean App Platform + Droplet deployment guide. |
docs/deployment/azure.md |
Azure Container Apps deployment guide (Bicep). |
docs/deployment/aws.md |
AWS ECS CloudFormation + App Runner reference guide. |
deploy/railway/README.md |
Railway quick-start (repo structure + env vars). |
deploy/railway/railway.json |
Railway service configuration (dockerfile build + healthcheck + startCommand). |
deploy/heroku/Procfile |
Duplicate Heroku Procfile under deploy/ directory. |
deploy/heroku/heroku.yml |
Duplicate Heroku container definition under deploy/ directory. |
deploy/heroku/app.json |
Duplicate Heroku app.json under deploy/ directory. |
deploy/helm/finmind/values.yaml |
Helm defaults for backend/frontend/postgres/redis/ingress/secrets/monitoring. |
deploy/helm/finmind/templates/servicemonitor.yaml |
Optional ServiceMonitor for scraping backend /metrics. |
deploy/helm/finmind/templates/secrets.yaml |
Helm Secret template for DB/JWT/Gemini secrets. |
deploy/helm/finmind/templates/redis.yaml |
Redis Deployment + Service for in-cluster cache. |
deploy/helm/finmind/templates/postgres.yaml |
Postgres Deployment + PVC + Service for in-cluster DB. |
deploy/helm/finmind/templates/ingress.yaml |
Ingress template routing to frontend/backend services. |
deploy/helm/finmind/templates/hpa.yaml |
Backend HPA template (autoscaling/v2). |
deploy/helm/finmind/templates/frontend.yaml |
Frontend Deployment + Service template. |
deploy/helm/finmind/templates/configmap.yaml |
Helm ConfigMap for LOG_LEVEL/GEMINI_MODEL/REDIS_URL. |
deploy/helm/finmind/templates/backend.yaml |
Backend Deployment + Service template (init-db + gunicorn + probes). |
deploy/helm/finmind/templates/_helpers.tpl |
Helm helper templates for naming/labels. |
deploy/helm/finmind/Chart.yaml |
Helm chart metadata. |
deploy/gcp/cloudrun-backend.yaml |
Cloud Run (Knative) service manifest reference for backend. |
deploy/gcp/cloudbuild.yaml |
Cloud Build pipeline to build/push images and deploy to Cloud Run. |
deploy/fly/fly.frontend.toml |
Fly.io frontend app definition (build from app/Dockerfile). |
deploy/fly/fly.backend.toml |
Fly.io backend app definition (release command init-db + HTTP checks). |
deploy/fly/deploy.sh |
Fly.io scripted deployment (create Postgres/Redis + deploy + set secrets). |
deploy/droplet/setup.sh |
DigitalOcean Droplet one-click setup (Docker + clone + env + compose up). |
deploy/azure/main.bicep |
Azure Container Apps deployment (backend + frontend + Log Analytics). |
deploy/aws/cloudformation.yaml |
AWS ECS Fargate CloudFormation template (backend + frontend services). |
deploy/aws/apprunner.yaml |
App Runner config reference (YAML-to-JSON guidance). |
app.json |
Root Heroku one-click deploy descriptor (addons + env). |
.do/app.yaml |
DigitalOcean App Platform spec for backend+frontend + PG database. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+11
to
+13
| app: {{ include "finmind.fullname" . }}-backend | ||
| endpoints: | ||
| - port: "8000" |
Comment on lines
+97
to
+101
| spec: | ||
| selector: | ||
| app: {{ include "finmind.fullname" . }}-backend | ||
| ports: | ||
| - port: 8000 |
Comment on lines
+44
to
+49
| command: ["pg_isready", "-U", "finmind"] | ||
| initialDelaySeconds: 5 | ||
| periodSeconds: 10 | ||
| livenessProbe: | ||
| exec: | ||
| command: ["pg_isready", "-U", "finmind"] |
Comment on lines
+14
to
+16
| POSTGRES_PASSWORD: {{ .Values.secrets.postgresPassword | default "finmind" | quote }} | ||
| POSTGRES_DB: {{ .Values.postgres.env.POSTGRES_DB | quote }} | ||
| JWT_SECRET: {{ .Values.secrets.jwtSecret | default "change-me" | quote }} |
| data: | ||
| LOG_LEVEL: {{ .Values.backend.env.LOG_LEVEL | quote }} | ||
| GEMINI_MODEL: {{ .Values.backend.env.GEMINI_MODEL | quote }} | ||
| REDIS_URL: "redis://{{ include "finmind.fullname" . }}-redis:6379/0" |
Comment on lines
+4
to
11
| if [ ! -f deploy/k8s/secrets.yaml ]; then | ||
| echo "WARNING: deploy/k8s/secrets.yaml not found — copying from secrets.example.yaml." | ||
| echo " Edit deploy/k8s/secrets.yaml with real credentials before production use." | ||
| cp deploy/k8s/secrets.example.yaml deploy/k8s/secrets.yaml | ||
| fi | ||
|
|
||
| kubectl apply -f deploy/k8s/namespace.yaml | ||
| kubectl apply -f deploy/k8s/secrets.yaml |
Comment on lines
+68
to
+71
| - path: / | ||
| pathType: Prefix | ||
| service: frontend | ||
| - path: /api |
Comment on lines
+16
to
+19
| - path: /health | ||
| health_check: | ||
| http_path: /health | ||
| initial_delay_seconds: 10 |
Comment on lines
+2
to
+4
| # Deploy with: aws apprunner create-service --cli-input-json file://apprunner.json | ||
| # | ||
| # This YAML is a reference. Convert to JSON for the CLI or use the console. |
| JwtSecret: | ||
| Type: String | ||
| NoEcho: true | ||
| Default: '' |
Author
Demo — Docker Compose full stackRecording of What the recording shows:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

/claim #144
Hey @rohitdash08 — Connected on Discord per the eligibility rules.
What's in here
One-click or one-command deploy paths for all 12 mandatory platforms, plus Helm + Tilt for K8s dev. Nothing existing was touched — no changes to
docker-compose.yml, Dockerfiles, or existing scripts.Platforms
deploy/railway/railway.jsonheroku.yml+app.json(root).do/app.yamldeploy/droplet/setup.shrender.yamldeploy/fly/deploy/aws/cloudformation.yamldeploy/aws/apprunner.yamldeploy/gcp/cloudbuild.yaml+ manifestdeploy/azure/main.bicepnetlify.tomlvercel.jsonKubernetes
Full Helm chart at
deploy/helm/finmind/:values.yamlRaw kubectl path via
deploy/k8s/+scripts/deploy-k8s.sh(handles secrets setup automatically).Tilt
Tiltfileat repo root — builds backend + frontend, applies K8s manifests, sets up port forwarding. Image names match the K8s manifests so Tilt auto-wires everything.Deploy script
bash scripts/deploy.sh— interactive menu that covers all 14 options (12 platforms + Docker Compose + Helm).Docs
Full deployment guide per platform in
docs/deployment/. Each one has prerequisites, step-by-step, and a verification checklist.Runtime acceptance
All deployment paths support:
/healthreachableFiles
46 added, 1 modified (
scripts/deploy-k8s.sh— added secrets setup guard). ~2,200 lines total.Let me know if you want me to walk through anything.