Local stack
Choose how you run cellp on a machine:
| Path | When |
|---|---|
| cellp dev | Product loop: no Docker, embedded S3, one command |
./dev/scripts/up.sh | Contributor stack: Docker RustFS + host cellpd (this page) |
| Docker Compose | Production-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
cp dev/.env.example dev/.env # first time
./dev/scripts/up.sh
./dev/scripts/health.shCopying .env is required. Do not hand-edit files under dev/data/; use ./dev/scripts/reset.sh if the registry is wedged.
Ports
| Port | Service |
|---|---|
| 8787 | Gateway (preview + prod HTTP) |
| 8790 | REST API + Prometheus /metrics |
| 8792+ | celld — one process per ready version, ports increment |
| 5190 | Dashboard Vite dev server (cd web && pnpm run dev) |
| 9000 / 19000 | RustFS S3 (see dev/.env.example) |
| 9001 | RustFS console |
Dev defaults: CELLP_DEPLOY_TOKEN and CELLP_ADMIN_TOKEN are dev-local-token.
Useful scripts
| Script | What it does |
|---|---|
up.sh / down.sh | Start / stop the stack |
health.sh | Probe every component (use this as your green light) |
ingress-host-init.sh | Unified Host mode: local or magic — dev/INGRESS-HOST.md |
reset.sh | Wipe dev/data/ |
simulate-cd.sh <project> <version> | Fake a CI deploy |
seed-commerce-store.sh | Commerce example + D1 seed |
seed-demo.sh | Bindings playground (demo-app) |
logs.sh | Tail logs |
gc.sh | Registry GC (old jobs / destroyed versions) |
Local CD
./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
# terminal 1
./dev/scripts/up.sh
# terminal 2
pnpm install && pnpm --filter cellp-dashboard dev
# http://127.0.0.1:5190The Dashboard only calls :8790. It never talks to celld or S3.
When stuck
./dev/scripts/logs.sh
./dev/scripts/down.sh
./dev/scripts/reset.sh
./dev/scripts/up.shMore operator detail lives in the repo: dev/README.md.