This page covers what differs per provider. The deployment itself is the same everywhere — follow Docker for a single node or Kubernetes for a cluster.
Railway
One-click deployment with automatic PostgreSQL provisioning.
After deployment, set in the Railway dashboard:
BETTER_AUTH_SECRET,ENCRYPTION_KEY,INTERNAL_API_SECRET(auto-generated by the template)- An AI provider key such as
OPENAI_API_KEY - Your custom domain under Settings → Networking, then
NEXT_PUBLIC_APP_URLto match
The Railway template deploys the app services but not the cron service, so scheduled workflows and polling triggers stay idle. Add a Railway cron service calling the endpoints in Background Jobs, or deploy with Docker Compose instead.
VPS
DigitalOcean, EC2, Azure VM, Hetzner, or any Linux box. Size it from the requirements table — 16 GB RAM is the practical floor for a team install, because memory rather than CPU is what bounds concurrent workflow executions.
Install Docker via get.docker.com, then follow the Docker guide, which covers secrets, the compose stack, and TLS.
Managed Kubernetes
EKS, AKS, and GKE each have a tuned example values file in the chart. See Kubernetes for the install and Networking for the load-balancer specifics — notably GKE's 30-second websocket timeout and its ManagedCertificate requirement.
Managed PostgreSQL
Recommended for any production deployment. The requirement is pgvector.
| Service | Notes |
|---|---|
| AWS RDS / Aurora | Enable the vector extension |
| GCP Cloud SQL | Enable the vector extension |
| Azure Database for PostgreSQL | Enable the vector extension |
| Supabase / Neon | pgvector available by default |
DATABASE_URL="postgresql://user:pass@host:5432/simstudio?sslmode=require"For the Helm chart, disable the bundled Postgres and use externalDatabase — see Kubernetes.