Docker & GHCR bootstrap
One-liner (no git clone on device)
curl -fsSL -o /tmp/openfdd_rust_edge_bootstrap.sh \
https://github.com/bbartling/open-fdd/raw/refs/heads/master/scripts/openfdd_rust_edge_bootstrap.sh
OPENFDD_IMAGE_TAG=nightly bash /tmp/openfdd_rust_edge_bootstrap.sh --start
This creates ~/open-fdd/ with compose, scripts, and workspace/ for site state.
Image channels
image: ghcr.io/bbartling/openfdd-edge-rust:${OPENFDD_IMAGE_TAG:-nightly}
| Channel | Tag | Use |
|---|---|---|
| Nightly | nightly |
Default for dev and new installs |
| Beta | beta or 3.3.0-beta.N |
After maintainer promotion |
| Stable | latest or 3.3.0 |
Production (when published) |
See Release channels.
Multi-arch: linux/amd64 and linux/arm64. Optional platform check:
OPENFDD_IMAGE_TAG=nightly ./scripts/openfdd_rust_check_ghcr_platform.sh
Compose profiles
From docker/compose.edge.rust.yml:
| Profile | Use |
|---|---|
desktop-json-csv |
Bridge only — CSV/JSON workflows on a workstation |
full-edge |
Bridge + BACnet commission + Haystack gateway |
caddy-http / caddy-tls |
Reverse proxy in front of the bridge |
mcp-sidecar |
Optional openfdd-mcp stdio sidecar for external agents |
Examples:
# Full OT edge
export OPENFDD_COMPOSE_ROOT=~/open-fdd
export OPENFDD_IMAGE_TAG=nightly
docker compose -f docker/compose.edge.rust.yml --profile full-edge up -d
# Desktop CSV / JSON mode
docker compose -f docker/compose.edge.rust.yml --profile desktop-json-csv up -d
Bootstrap flags
| Flag | Purpose |
|---|---|
--start |
Pull image and start compose |
--image-tag TAG |
Pin GHCR tag (nightly, beta, semver, sha-*) |
--platform auto\|linux/amd64\|linux/arm64 |
Pull platform |
--root PATH |
Install root (default ~/open-fdd) |
--restart |
compose up -d --force-recreate |
Layout after bootstrap
~/open-fdd/
docker-compose.yml
workspace/
auth.env.local # integrator password — chmod 600, never commit
data.env.local
bacnet/commissioning/commission.env
data/historian/ # Arrow / Feather partitions
data/drivers/
scripts/
openfdd_rust_site_backup.sh
openfdd_rust_site_update.sh
openfdd_rust_edge_validate.sh
First login & health
cd ~/open-fdd
./scripts/openfdd_rust_edge_validate.sh
curl -s http://127.0.0.1:8080/api/health | jq '{version, image_tag}'
Open http://127.0.0.1:8080 — sign in with the integrator user from workspace/auth.env.local.
Default bind is 127.0.0.1:8080. Reach the UI over Tailscale, VPN, or a reverse proxy — not raw public internet.
Never run docker compose down -v. Never delete workspace/.