Skip to content

Hosting platforms ​

The dashboard builds to a static dist/ folder, so it drops onto any host. Two families: static hosts (serve the files) and container hosts (run the Docker image).

Everywhere, the build is the same:

bash
bun install && bun run build      # → dist/

Set VITE_BUNQUEUE_URL to your server's origin (a build-time env var on the platform), or leave it and configure the target from the in-app Settings page. On a static host the browser calls bunqueue directly, so that server needs CORS for your dashboard domain.

Every static host also needs a history-API fallback (serve index.html for unknown paths) or deep links 404. That is the one config each platform below sets.

Static hosts ​

Vercel ​

vercel.json in the repo root:

json
{
  "buildCommand": "bun run build",
  "outputDirectory": "dist",
  "rewrites": [{ "source": "/(.*)", "destination": "/index.html" }]
}

Set VITE_BUNQUEUE_URL under Project Settings, Environment Variables. Deploy with vercel --prod or connect the Git repo.

Netlify ​

netlify.toml in the repo root:

toml
[build]
  command = "bun run build"
  publish = "dist"

[[redirects]]
  from = "/*"
  to = "/index.html"
  status = 200

Cloudflare Pages ​

  • Build command: bun run build
  • Build output directory: dist
  • SPA fallback: add a public/_redirects file (Vite copies it into dist):
/*    /index.html    200

GitHub Pages ​

Served under a repo sub-path, so build with the base path and add a 404.html that mirrors index.html (Pages serves it for unknown routes):

bash
VITE_BASE=/your-repo/ bun run build
cp dist/index.html dist/404.html

Publish dist/ with actions/deploy-pages. This repo already does exactly this for the docs site in .github/workflows/pages.yml.

Render (static site) ​

  • Build command: bun install && bun run build
  • Publish directory: dist
  • Add a rewrite rule: Source /*, Destination /index.html, Action Rewrite.

Container hosts ​

These run the Docker image (Caddy already handles the SPA fallback, so there is nothing extra to configure).

Fly.io ​

bash
fly launch --image ghcr.io/egeominotti/bunqueue-dashboard:latest

Ensure fly.toml has internal_port = 80, then fly deploy. Fly terminates TLS for you.

Railway ​

New project, Deploy from the repo (Railway builds the Dockerfile), or Deploy an image and paste ghcr.io/egeominotti/bunqueue-dashboard:latest. Set the service port to 80.

Google Cloud Run ​

bash
gcloud run deploy bunqueue-dashboard \
  --image ghcr.io/egeominotti/bunqueue-dashboard:latest \
  --port 80 \
  --allow-unauthenticated \
  --region europe-west1

Cloud Run injects TLS and a public URL, and scales to zero when idle.

Want the API proxy and process control? ​

All of the above serve the static build (no control agent, browser talks to bunqueue directly). For a same-origin /api proxy and Server Control, run the all-in-one server on a VM (PM2 / systemd) or as a container, and point these platforms' proxy or your load balancer at it.

Drives a bunqueue server over its public HTTP API plus a local control agent.