Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 56 additions & 52 deletions apps/docs/content/docs/en/platform/self-hosting/platforms.mdx
Original file line number Diff line number Diff line change
@@ -1,52 +1,56 @@
---
title: Cloud Platforms
description: Provider-specific notes for running Sim on Railway, a VPS, or managed Kubernetes
---

import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Callout } from 'fumadocs-ui/components/callout'

This page covers what differs per provider. The deployment itself is the same everywhere — follow [Docker](/platform/self-hosting/docker) for a single node or [Kubernetes](/platform/self-hosting/kubernetes) for a cluster.

## Railway

One-click deployment with automatic PostgreSQL provisioning.

[![Deploy on Railway](https://railway.app/button.svg)](https://railway.com/new/template/sim-studio)

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_URL` to match

<Callout type="warn">
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](/platform/self-hosting/background-jobs), or deploy with Docker Compose instead.
</Callout>

## VPS

DigitalOcean, EC2, Azure VM, Hetzner, or any Linux box. Size it from the [requirements table](/platform/self-hosting) — 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](https://get.docker.com), then follow the [Docker guide](/platform/self-hosting/docker), 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](/platform/self-hosting/kubernetes) for the install and [Networking](/platform/self-hosting/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 |

```bash
DATABASE_URL="postgresql://user:pass@host:5432/simstudio?sslmode=require"
```

For the Helm chart, disable the bundled Postgres and use `externalDatabase` — see [Kubernetes](/platform/self-hosting/kubernetes#external-database).
---

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 CRLF conversion breaks formatting check

When CI runs the docs workspace's biome check ., the file-wide CRLF conversion conflicts with the repository's required LF line endings, causing the lint gate to fail. Normalize this file back to LF while retaining the new callout.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

title: Cloud Platforms
description: Provider-specific notes for running Sim on Railway, a VPS, or managed Kubernetes
---

import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Callout } from 'fumadocs-ui/components/callout'

This page covers what differs per provider. The deployment itself is the same everywhere — follow [Docker](/platform/self-hosting/docker) for a single node or [Kubernetes](/platform/self-hosting/kubernetes) for a cluster.

## Railway

One-click deployment with automatic PostgreSQL provisioning.

[![Deploy on Railway](https://railway.app/button.svg)](https://railway.com/new/template/sim-studio)

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_URL` to match

<Callout type="warn">
The template auto-generates `ENCRYPTION_KEY` as a URL-safe secret, but Sim requires a 64-character hex string. If saving Workspace Secrets fails with `ENCRYPTION_KEY must be set to a 64-character hex string` (HTTP 500), regenerate it with `openssl rand -hex 32` and update the variable in the Railway dashboard.
</Callout>

<Callout type="warn">
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](/platform/self-hosting/background-jobs), or deploy with Docker Compose instead.
</Callout>

## VPS

DigitalOcean, EC2, Azure VM, Hetzner, or any Linux box. Size it from the [requirements table](/platform/self-hosting) — 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](https://get.docker.com), then follow the [Docker guide](/platform/self-hosting/docker), 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](/platform/self-hosting/kubernetes) for the install and [Networking](/platform/self-hosting/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 |

```bash
DATABASE_URL="postgresql://user:pass@host:5432/simstudio?sslmode=require"
```

For the Helm chart, disable the bundled Postgres and use `externalDatabase` — see [Kubernetes](/platform/self-hosting/kubernetes#external-database).