Install on server
Lean path: a PHP DocumentRoot that points at the kernel public/ folder, with one site tree and DROPBITS_SITE set for that vhost. Full recipe and flags: repository docs/DEPLOY.md.
What you need
- PHP 8.2+ with
pdo_sqliteandzip(Apache/mod_rewriteor equivalent front controller) - An install tree whose DocumentRoot is
…/public(kernel front controller) - Per-site env:
DROPBITS_SITE=<id>; for public hosts usuallyDROPBITS_LIVE=1(via.htaccessSetEnvwhenHTACCESS_LIVE=1in deploy)
First-time shape
- Place the kernel (
dropbits/) on the host sopublic/index.phpis the vhost root. - Create
sites/<id>/(themes,data/, optional assets) — start fromsites/minimal/or Site directory layout. - Register the site in the install registry (
sites.production.json/ installsites.json). - Seed content once on the install (migrate + seed or restore) — not on every deploy.
- Set live knobs only when ready (
livein registry,site_meta.live,HTACCESS_LIVE).
Routine updates after that: Content-owned deploy and Upgrade a deployed site — code + migrate; never re-upload site.db / uploads by default.
Same-host helper (operators)
On a developer host that already has the checkout and host-local ./deploy / scripts/install-site.sh:
cp dropbits/sites/_template/deploy.env.example dropbits/sites/<id>/deploy.env
# edit LOCAL_INSTALL_ROOT, HTACCESS_LIVE=1, CONTENT_OWNED=1
./deploy <id> --dry-run
./deploy <id>
Private customer trees stay out of tracked sites.json — use sites.local.json for dev overlays.
Fail-safe
If code is newer than the install schema, the site returns 503 upgrade_required until you run bin/site migrate on that install. That is intentional — run migrate after shipping code (Upgrade a deployed site).