Docker & GHCR bootstrap

The stack runs from compose recipes in the repo. Clone once, then bring up a recipe with scripts/openfdd_stack_up.sh (it pulls the GHCR images and waits on health).

git clone https://github.com/bbartling/open-fdd.git
cd open-fdd
./scripts/openfdd_stack_up.sh standalone

workspace/ holds site state. See Build recipes for the full recipe/env matrix.

Image channels

image: ghcr.io/bbartling/openfdd-central:${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)

OPENFDD_IMAGE_TAG applies to every stack image at once. See Release channels.

Multi-arch: linux/amd64 and linux/arm64.

docker manifest inspect ghcr.io/bbartling/openfdd-central:nightly

Recipes

Recipe Command Services
standalone ./scripts/openfdd_stack_up.sh standalone mqtt + central + ui + fieldbus
central ./scripts/openfdd_stack_up.sh central mqtt + central + ui
edge ./scripts/openfdd_stack_up.sh edge fieldbus only
csv ./scripts/openfdd_stack_up.sh csv central + ui (no MQTT)

Build locally instead of pulling GHCR:

./scripts/openfdd_stack_up.sh standalone --build

First login & health

cd ~/open-fdd
./scripts/openfdd_health_check.sh
curl -s http://127.0.0.1:8080/api/health | jq '{version, image_tag}'

Open the UI at http://<host>:3000. When OPENFDD_JWT_SECRET is set, sign in with the admin/operator/viewer password from OPENFDD_ADMIN_PASSWORD.

Reach the UI over Tailscale, VPN, or a reverse proxy — not raw public internet.

Never run docker compose down -v. Never delete workspace/.