Skip to content

Local stack

Choose how you run cellp on a machine:

PathWhen
cellp devProduct loop: no Docker, embedded S3, one command
./dev/scripts/up.shContributor stack: Docker RustFS + host cellpd (this page)
Docker ComposeProduction-shaped VM — Self-hosting

The dev/ tree is a full cellp on one laptop: RustFS, cellpd (API + gateway), celld, and offshoot. For a component diagram and default ports, see Architecture at a glance.

Bring it up

bash
cp dev/.env.example dev/.env   # first time
./dev/scripts/up.sh
./dev/scripts/health.sh

Copying .env is required. Do not hand-edit files under dev/data/; use ./dev/scripts/reset.sh if the registry is wedged.

Ports

PortService
8787Gateway (preview + prod HTTP)
8790REST API + Prometheus /metrics
8792+celld — one process per ready version, ports increment
5190Dashboard Vite dev server (cd web && pnpm run dev)
9000 / 19000RustFS S3 (see dev/.env.example)
9001RustFS console

Dev defaults: CELLP_DEPLOY_TOKEN and CELLP_ADMIN_TOKEN are dev-local-token.

Useful scripts

ScriptWhat it does
up.sh / down.shStart / stop the stack
health.shProbe every component (use this as your green light)
ingress-host-init.shUnified Host mode: local or magicdev/INGRESS-HOST.md
reset.shWipe dev/data/
simulate-cd.sh <project> <version>Fake a CI deploy
seed-commerce-store.shCommerce example + D1 seed
seed-demo.shBindings playground (demo-app)
logs.shTail logs
gc.shRegistry GC (old jobs / destroyed versions)

Local CD

bash
./dev/scripts/simulate-cd.sh demo-app v-test1
curl -sf http://127.0.0.1:8790/v1/projects/demo-app/versions/v-test1 \
  -H "Authorization: Bearer dev-local-token" | jq .status
# "ready"

curl -sf -H "Host: demo-app.ingress.local" http://127.0.0.1:8787/health
# or open preview_url from GET …/versions/v-test1 (includes :8787 in dev)

Ingress setup: dev/INGRESS-HOST.md (./dev/scripts/ingress-host-init.sh).

What is mock vs real

On a laptop, some gateway behavior may be simulated so you can iterate without a full production offshoot-on-S3 setup. Functionally you still:

  • POST versions
  • Get preview URLs
  • Inspect D1/KV in the Dashboard

Full production offshoot on RustFS (App + Data branches stored in S3) is what you get with Self-hosting / Docker Compose, not the simplified laptop contributor path. For day-to-day product work, cellp dev or this local stack is the right default.

Dashboard alongside the stack

bash
# terminal 1
./dev/scripts/up.sh

# terminal 2
pnpm install && pnpm --filter cellp-dashboard dev
# http://127.0.0.1:5190

The Dashboard only calls :8790. It never talks to celld or S3.

When stuck

bash
./dev/scripts/logs.sh
./dev/scripts/down.sh
./dev/scripts/reset.sh
./dev/scripts/up.sh

More operator detail lives in the repo: dev/README.md.

Self-hosted Workers control plane. Not affiliated with Cloudflare or Vercel.