Skip to content

Commit 38e7ddd

Browse files
committed
fix(website): point railway at the repo-root Dockerfile and rework self-host overview
- Fix railway.toml dockerfilePath, which still referenced the old monorepo website/ path - Add Self-Host vs BYOC diagrams to the self-host overview and align it with the deployed page - Drop the Recommended badge from self-host sidebar platforms - Put Control Plane above Workers in the self-host sidebar
1 parent 95ede69 commit 38e7ddd

3 files changed

Lines changed: 61 additions & 51 deletions

File tree

railway.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
[build]
2-
dockerfilePath = "website/Dockerfile"
3-
watchPatterns = ["/website/**", "/frontend/packages/**", "/examples/**", "/pnpm-lock.yaml"]
2+
dockerfilePath = "Dockerfile"
43

54
[deploy]
65
healthcheckPath = "/health"

src/content/self-host/index.mdx

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,41 +3,60 @@ title: "Self-Host"
33
description: "Run your workers, the control plane, or both on your own infrastructure."
44
---
55

6-
Rivet has two halves, and you can host either one yourself.
6+
## Self-Host vs BYOC
77

8-
- The **control plane** routes, schedules, and persists. It is stateful.
9-
- A **worker** is a process running your code with the Rivet SDK. Workers connect outbound to a control plane.
8+
Rivet provides two deployment models.
109

11-
## Deployment models
10+
**Self-Host**: You manage the complete stack, including your workers, the control plane, and storage. This has higher complexity but enables air-gapped deployments and custom security policies.
1211

13-
| | Control plane: Rivet | Control plane: yours |
14-
| --- | --- | --- |
15-
| **Workers: Rivet** | Fully managed | Not available |
16-
| **Workers: yours** | BYOC | Full self-hosting |
17-
18-
Rivet can run the control plane for you at [dashboard.rivet.dev](https://dashboard.rivet.dev). Running your own workers against it is the middle cell, usually called BYOC, and it is documented in the Workers section below.
19-
20-
<svg viewBox="0 0 760 150" role="img" aria-label="Your backend, running an envoy, connected bidirectionally to the control plane, which is connected bidirectionally to storage." style="width:100%;max-width:760px;height:auto;display:block;margin:2.5rem auto;font-family:system-ui,sans-serif">
21-
<defs><marker id="self-host-overview-arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0 L10 5 L0 10 z" fill="#2E4034"/></marker></defs>
22-
<g stroke="#1b1916" stroke-width="1.4"><rect x="35" y="43" width="180" height="64" rx="7" fill="#ffffff"/><rect x="290" y="43" width="180" height="64" rx="7" fill="#e7ece7"/><rect x="545" y="43" width="180" height="64" rx="7" fill="#ffffff"/></g>
23-
<g text-anchor="middle" fill="#1b1916"><text x="125" y="69" font-size="14" font-weight="600">Worker</text><text x="125" y="89" font-size="12" fill="#56524a">(your code)</text><text x="380" y="81" font-size="14" font-weight="600">Control plane</text><text x="635" y="69" font-size="14" font-weight="600">Storage</text><text x="635" y="89" font-size="12" fill="#56524a">(FS, PG, or FDB)</text></g>
24-
<g stroke="#2E4034" stroke-width="1.4"><line x1="216" y1="75" x2="289" y2="75" marker-start="url(#self-host-overview-arrow)" marker-end="url(#self-host-overview-arrow)"/><line x1="471" y1="75" x2="544" y2="75" marker-start="url(#self-host-overview-arrow)" marker-end="url(#self-host-overview-arrow)"/></g>
12+
<svg viewBox="0 0 760 210" role="img" aria-label="Self-hosted architecture with a worker, the control plane, and storage connected bidirectionally inside your infrastructure." style="width:100%;max-width:760px;height:auto;display:block;margin:2.5rem auto;font-family:system-ui,sans-serif">
13+
<defs><marker id="self-host-infra-arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0 L10 5 L0 10 z" fill="#2E4034"/></marker></defs>
14+
<rect x="20" y="25" width="720" height="160" rx="10" fill="#faf8f3" stroke="#2E4034" stroke-width="1.4" stroke-dasharray="7 6"/>
15+
<text x="42" y="51" font-size="11" font-family="ui-monospace,monospace" font-weight="600" letter-spacing="0.14em" fill="#2E4034">YOUR INFRASTRUCTURE</text>
16+
<g stroke="#1b1916" stroke-width="1.4"><rect x="70" y="82" width="170" height="64" rx="7" fill="#ffffff"/><rect x="295" y="82" width="170" height="64" rx="7" fill="#e7ece7"/><rect x="520" y="82" width="170" height="64" rx="7" fill="#ffffff"/></g>
17+
<g text-anchor="middle" fill="#1b1916"><text x="155" y="108" font-size="14" font-weight="600">Worker</text><text x="155" y="128" font-size="12" fill="#56524a">(your code)</text><text x="380" y="120" font-size="14" font-weight="600">Control plane</text><text x="605" y="120" font-size="14" font-weight="600">Storage</text></g>
18+
<g stroke="#2E4034" stroke-width="1.4"><line x1="241" y1="114" x2="294" y2="114" marker-start="url(#self-host-infra-arrow)" marker-end="url(#self-host-infra-arrow)"/><line x1="466" y1="114" x2="519" y2="114" marker-start="url(#self-host-infra-arrow)" marker-end="url(#self-host-infra-arrow)"/></g>
2519
</svg>
2620

27-
The worker opens the connection outbound to the control plane, so a worker never needs a public URL or an inbound firewall rule. It only needs to reach the control plane.
21+
**BYOC with Rivet Cloud**: You only manage your workers while Rivet Cloud runs the control plane and storage. This typically has lower operational overhead and supports serverless workers.
2822

29-
## Choosing
23+
<svg viewBox="0 0 760 230" role="img" aria-label="BYOC architecture with a worker in your infrastructure connected bidirectionally to the control plane and storage in Rivet Cloud." style="width:100%;max-width:760px;height:auto;display:block;margin:2.5rem auto;font-family:system-ui,sans-serif">
24+
<defs><marker id="byoc-cloud-arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0 L10 5 L0 10 z" fill="#2E4034"/></marker></defs>
25+
<rect x="20" y="25" width="230" height="180" rx="10" fill="#faf8f3" stroke="#2E4034" stroke-width="1.4" stroke-dasharray="7 6"/><rect x="290" y="25" width="450" height="180" rx="10" fill="#faf8f3" stroke="#2E4034" stroke-width="1.4" stroke-dasharray="7 6"/>
26+
<g font-size="11" font-family="ui-monospace,monospace" font-weight="600" letter-spacing="0.14em" fill="#2E4034"><text x="42" y="51">YOUR INFRASTRUCTURE</text><text x="312" y="51">RIVET CLOUD</text></g>
27+
<g stroke="#1b1916" stroke-width="1.4"><rect x="50" y="88" width="170" height="64" rx="7" fill="#ffffff"/><rect x="325" y="88" width="160" height="64" rx="7" fill="#e7ece7"/><rect x="550" y="88" width="155" height="64" rx="7" fill="#ffffff"/></g>
28+
<g text-anchor="middle" fill="#1b1916"><text x="135" y="114" font-size="14" font-weight="600">Worker</text><text x="135" y="134" font-size="12" fill="#56524a">(your code)</text><text x="405" y="126" font-size="14" font-weight="600">Control plane</text><text x="627" y="126" font-size="14" font-weight="600">Storage</text></g>
29+
<g stroke="#2E4034" stroke-width="1.4"><line x1="221" y1="120" x2="324" y2="120" marker-start="url(#byoc-cloud-arrow)" marker-end="url(#byoc-cloud-arrow)"/><line x1="486" y1="120" x2="549" y2="120" marker-start="url(#byoc-cloud-arrow)" marker-end="url(#byoc-cloud-arrow)"/></g>
30+
</svg>
3031

31-
| | Self-host both | BYOC |
32+
| | Self-Host | BYOC with Rivet Cloud |
3233
| --- | --- | --- |
3334
| **You manage** | Workers, control plane, and storage | Workers only |
3435
| **Complexity** | Higher | Lower |
3536
| **Cost** | Higher operational overhead | Usually lower usage-based cost |
3637
| **Serverless workers** | Requires the extra control plane infrastructure | Yes |
37-
| **Air-gapped** | Yes | No |
38-
| **Best for** | Air-gapped environments, strict compliance, custom security policies | Everything else |
38+
| **Air-gapped deployments** | Yes | No |
39+
| **Best for** | Air-gapped environments, strict compliance, custom security policies | All other production deployments |
3940
| **Support** | [Contact sales](/sales) or community | Community, Slack, and email, varying by plan |
4041

42+
Rivet runs the control plane for you at [dashboard.rivet.dev](https://dashboard.rivet.dev). Running your own workers against it is BYOC, documented in the Workers section.
43+
44+
## Architecture
45+
46+
Rivet has 3 core components:
47+
48+
- **Worker**: A process running your code with the Rivet SDK. It connects outbound to the control plane, so it never needs a public URL or an inbound firewall rule.
49+
- **Control plane**: The orchestration service that manages actor lifecycle, routes messages, and serves the API.
50+
- **Storage**: The persistence layer for actor state and the messaging infrastructure for real-time communication.
51+
52+
## Storage backends
53+
54+
- **File system**: Recommended for single-node deployments
55+
- **PostgreSQL**: Recommended for multi-node deployments; production-ready for light-to-moderate workloads, not built for enterprise scale
56+
- **FoundationDB**: Best scalability and performance for production deployments ([requires enterprise](/sales))
57+
58+
See <SelfHostLink to="control-plane/storage">Storage</SelfHostLink> for configuration.
59+
4160
## Next steps
4261

4362
- <SelfHostLink to="control-plane">Run a control plane</SelfHostLink>

src/sitemap/self-host.ts

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
import { faSquareInfo, faClipboardListCheck, faSliders, faServer } from "@rivet-gg/icons";
22
import type { SidebarItem } from "@/lib/sitemap";
3-
import {
4-
CONTROL_PLANE_PAGES,
5-
platformSupport,
6-
platformsFor,
7-
} from "./deployMatrix";
3+
import { CONTROL_PLANE_PAGES, platformsFor } from "./deployMatrix";
84

95
const REFERENCE_PAGES = new Set([
106
"configuration",
@@ -38,10 +34,6 @@ export function deploySidebar(productId: string): SidebarItem[] {
3834
title: platform.shortTitle ?? platform.displayName,
3935
href: `${base}/${role === "worker" ? "workers" : "control-plane"}/${platform.slug}`,
4036
icon: platform.icon,
41-
badge:
42-
platformSupport(productId, role, platform) === "recommended"
43-
? "Recommended"
44-
: undefined,
4537
}));
4638

4739
return [
@@ -56,55 +48,55 @@ export function deploySidebar(productId: string): SidebarItem[] {
5648
],
5749
},
5850
{
59-
title: "Workers",
51+
title: "Control Plane",
6052
pages: [
6153
{
6254
title: "Overview",
63-
href: `${base}/workers`,
55+
href: `${base}/control-plane`,
6456
icon: faSquareInfo,
6557
},
6658
{
6759
title: "Production Checklist",
68-
href: `${base}/workers/production-checklist`,
60+
href: `${base}/control-plane/production-checklist`,
6961
icon: faClipboardListCheck,
7062
},
7163
{
7264
title: "Platforms",
7365
icon: faServer,
7466
collapsible: true,
75-
pages: platformPage("worker"),
67+
pages: platformPage("control-plane"),
68+
},
69+
{
70+
title: "Reference",
71+
icon: faSliders,
72+
collapsible: true,
73+
pages: CONTROL_PLANE_PAGES.filter((page) =>
74+
REFERENCE_PAGES.has(page),
75+
).map((page) => ({
76+
title: PAGE_TITLES[page] ?? page,
77+
href: `${base}/control-plane/${page}`,
78+
})),
7679
},
7780
],
7881
},
7982
{
80-
title: "Control Plane",
83+
title: "Workers",
8184
pages: [
8285
{
8386
title: "Overview",
84-
href: `${base}/control-plane`,
87+
href: `${base}/workers`,
8588
icon: faSquareInfo,
8689
},
8790
{
8891
title: "Production Checklist",
89-
href: `${base}/control-plane/production-checklist`,
92+
href: `${base}/workers/production-checklist`,
9093
icon: faClipboardListCheck,
9194
},
9295
{
9396
title: "Platforms",
9497
icon: faServer,
9598
collapsible: true,
96-
pages: platformPage("control-plane"),
97-
},
98-
{
99-
title: "Reference",
100-
icon: faSliders,
101-
collapsible: true,
102-
pages: CONTROL_PLANE_PAGES.filter((page) =>
103-
REFERENCE_PAGES.has(page),
104-
).map((page) => ({
105-
title: PAGE_TITLES[page] ?? page,
106-
href: `${base}/control-plane/${page}`,
107-
})),
99+
pages: platformPage("worker"),
108100
},
109101
],
110102
},

0 commit comments

Comments
 (0)