Website deployment
Contributor reference for TurboPanel/website. Production traffic is vanilla Next.js 16 (output: 'standalone', node server.js) behind Caddy with Let's Encrypt on alpha.turbopanel.net. This is a stopgap until the marketing site can be a TurboPanel native app.
Prerequisites
- Node.js 26.7.0 or newer (
engines.nodeinpackage.json; CI and the VPS pin the same release) pnpm(seepackageManagerinpackage.json).pnpm-workspace.yamlmustallowBuildsNext native postinstalls (esbuild,sharp, …) or pnpm 12 fails withERR_PNPM_IGNORED_BUILDS.
Local preview
cd ~/website
pnpm install
pnpm dev # http://localhost:19820Co-located dev: turbopanel-website.service runs the same dev server; logs under /var/log/turbopanel/website/. Contributor Vagrant stays on next dev — do not point it at the VPS.
Production build
pnpm build
pnpm check:docs-ssrpnpm build is vanilla next build (Turbopack) and writes a standalone Node server under .next/standalone/.
Deploy (VPS)
GitHub push webhooks rebuild one environment. Payload URL: https://alpha.turbopanel.net/hooks/github.
| Branch | Hostname | Notes |
|---|---|---|
trunk | testing.turbopanel.io | Default development drop |
staging | staging.turbopanel.io | |
live | turbopanel.io | www 301s to the apex |
Two Linux users on the box: alpha owns Caddy, Let's Encrypt (noc@turbopanel.io), and the webhook HMAC secret; website owns the git clones and Next processes. Shared Node lives at /opt/node. Operator scripts and the Caddyfile are in scripts/vps/.
Control-plane URLs and API-reference server labels derive from the request host through src/lib/control-plane-hosts.ts; NEXT_PUBLIC_SITE_URL is injected at build time inside deploy.sh.
Docs content
- MDX under
docs/— Fumadocs (source.config.ts) - Edit links resolve via
src/lib/docs-github.ts(TurboPanel/website, branchtrunk) - Navigation: per-folder
meta.json
Related
Last updated on