Skip to content

Vocs

GCP.Website.Vocs deploys a Vocs documentation site to Cloud Run. Static pages are served first, and everything else is rendered by the server.

The build integration ships separately. It only runs at deploy time, so a dev dependency is enough:

Terminal window
pnpm add -D https://pkg.alchemy.run/@alchemy.run/frontend-frameworks/a870ed4

Docker has to be running when you deploy. The image is built on your machine.

alchemy.run.ts
import * as Alchemy from "alchemy";
import * as GCP from "@alchemy.run/gcp";
import * as Effect from "effect/Effect";
export const Docs = GCP.Website.Vocs("Docs");
export default Alchemy.Stack(
"MySite",
{ providers: GCP.providers(), state: GCP.state() },
Effect.gen(function* () {
const site = yield* Docs;
return { url: site.url };
}),
);

Run alchemy deploy. site.url is the Cloud Run service URL.

If vocs.config.* changes outDir, pass the same value:

export const Docs = GCP.Website.Vocs("Docs", {
rootDir: "./docs",
outDir: "build",
});
export const Docs = GCP.Website.Vocs("Docs", {
scaling: { minInstanceCount: 1 },
resources: { limits: { cpu: "1", memory: "1Gi" } },
});

One warm instance means no cold start for the first visitor. See Websites for the other settings.

alchemy dev runs the framework’s dev server with hot reload and creates nothing in the cloud. Wrap the site in Alchemy.remote() to deploy it for real during dev.