Cloud platforms

Use Docker for a single node or Kubernetes for a cluster. This page covers provider-specific prerequisites and configuration differences.

Railway

The Sim deployment template provides a starting installation. Review its current services and variables before using it for production:

  1. Confirm PostgreSQL has pgvector and that migrations complete.
  2. Confirm the app and realtime services share BETTER_AUTH_SECRET and INTERNAL_API_SECRET.
  3. Retain generated secrets, set API_ENCRYPTION_KEY, and configure durable storage.
  4. Configure your domain under Settings → Networking. Set NEXT_PUBLIC_APP_URL and BETTER_AUTH_URL to that app origin; match NEXT_PUBLIC_SOCKET_URL to the realtime endpoint.
  5. Add a model provider key such as OPENAI_API_KEY and configure email if needed.
  6. Check Redis and the scheduler rather than assuming the template includes them.

Railway Cron Jobs run no more often than every five minutes. They cannot reproduce Sim's bundled minute-level scheduler cadence. Use a continuously running Sim scheduler service or another scheduler supporting the schedules in Background jobs. See Railway's cron requirements.

VPS

Run Compose on a Linux server such as DigitalOcean, EC2, Azure VM, or Hetzner. Use the resource examples as a starting point, then size for your workload.

Install Docker Engine and the Compose plugin using Docker's instructions for your operating system. The shipped file requires Compose 2.24.0 or later. Docker's get.docker.com convenience script is intended for development; use its package installation instructions for production.

Follow Docker for secrets, durable uploads, service startup, and TLS.

Managed Kubernetes

EKS, AKS, and GKE have example values files in the chart's source repository. They contain provider resources and placeholders you must review: storage classes, bucket names, workload identities, certificates, static addresses, and network policy.

Use the pinned example in Kubernetes, then follow Networking for the provider's load balancer. GKE requires the referenced ManagedCertificate and an appropriate backend timeout for WebSockets. The AKS example retains legacy ingress-nginx settings; that controller retired in March 2026. Use a maintained controller already supported by your cluster and its own configuration.

Managed PostgreSQL

An external database must support the vector extension and the migration permissions Sim needs. Availability does not mean the extension is enabled in your database.

ServiceSetup
AWS RDS / Aurora PostgreSQLChoose an engine version with pgvector support and enable vector.
GCP Cloud SQL for PostgreSQLEnable the supported vector extension.
Azure Database for PostgreSQL Flexible ServerAllow vector in azure.extensions, then enable it in the database.
Supabase / NeonEnable vector in the database you use for Sim.

See Cloud SQL extensions, Azure extension allowlisting, and Neon pgvector setup for provider requirements.

An app or source checkout can use a connection string such as:

DATABASE_URL="postgresql://<user>:<password>@<host>:5432/simstudio?sslmode=require"

For Helm, disable bundled PostgreSQL and configure externalDatabase. Production Compose overrides DATABASE_URL with its bundled database connection; changing .env alone does not switch it. An operator-owned Compose configuration must give the same external DSN to the app, realtime, and migrations and adjust their bundled-database dependencies. See Docker configuration.