Skip to content

Deploying with Docker

The repository’s Dockerfile bundles the coordinator and editor into one image; either process dying kills the container so a restart policy can recover it.

Terminal window
docker build -t flowbun:demo .
# or: podman build -t flowbun:demo .

Run it with data/ bind-mounted — wiring and blocks stay editable and persist across container restarts; nothing under data/ is baked into the image:

Terminal window
docker run -d --name flowbun-demo \
-p 4200:4200 -p 8787:8787 \
-v "$(pwd)/data:/app/data" \
--env-file .env \
flowbun:demo

Then open http://<host>:4200 — including from another machine on the LAN; the editor derives the coordinator’s websocket address from whatever host the browser used to reach the page.

The repo’s docker-compose.yml wires up the same ports, bind-mount, and .env:

Terminal window
docker compose up -d --build
  • FLOWBUN_DRY_RUN=true is the image’s baked-in default — a container started with no other configuration can never make a real Home Assistant write.
  • No login is required by default, matching the single-household-LAN case. If the container is reachable beyond your own LAN, set FLOWBUN_AUTH_USERNAME/FLOWBUN_AUTH_PASSWORD in .env to turn on the built-in JWT session auth before exposing it further.

The chat panel needs a one-time interactive login:

Terminal window
./scripts/setup-claude-auth.sh

Follow the printed URL, then copy the resulting token into .env as CLAUDE_CODE_OAUTH_TOKEN and docker compose up -d to restart. Without it, the chat panel responds with a clear “not authenticated yet” message rather than hanging.