Files
nr-flow-validator/infra
david 134fd4a0ed audio-bridge: switch /run/dbus + /run/user/0 from bind-mount to tmpfs
The host's /run/dbus/system_bus_socket is the standard dbus socket for
systemd. Bind-mounting the container's socket onto /run/dbus overwrites
the host's socket, breaking dockerd's ability to manage cgroups via
systemd (manifests as 'org.freedesktop.systemd1 was not provided by any
.service files' on subsequent docker run).

Use tmpfs instead — ephemeral container-local sockets that don't conflict
with host services.
2026-07-01 07:22:42 -07:00
..

infra/

Full stack configuration as deployed on the RPi 3B+ at 192.168.81.147.

Layout on host

/root/
├── compose.yaml                       → infra/compose.yaml
├── mosquitto/config/mosquitto.conf    → infra/mosquitto/config/mosquitto.conf
├── zigbee2mqtt/                       → infra/zigbee2mqtt/
│   ├── configuration.yaml             # device pairings + friendly names + groups
│   ├── coordinator_backup.json        # zigbee network key + pan id (recovery)
│   └── state.json                     # per-device persisted state (ON/OFF, etc.)
└── nodered/                           → bind-mount for nodered container's /data
    ├── flows.json                     → generated from ../flows/zigbee-monitor.yaml
    ├── settings.js                    → infra/nodered/settings.js
    └── start.sh                       → infra/nodered/start.sh (patches Dashboard SPA)

Rebuild procedure from a fresh host

  1. Install Docker, docker compose.
  2. Clone this repo, cd infra.
  3. mkdir -p mosquitto/data mosquitto/log (empty dirs for the volume mounts).
  4. docker compose up -d.
  5. Pair zigbee devices (IEEE addresses in zigbee2mqtt/configuration.yaml will be wrong; re-pair or use the existing coordinator_backup.json to rejoin the same network).
  6. just deploy from the repo root to push the Node-RED flow.

Files that drift at runtime

  • nodered/flows.json — managed by the generator, do not hand-edit.
  • nodered/node_modules/@flowfuse/node-red-dashboard/dist/index.html — patched by start.sh at every container start; survives reboots, lost on docker compose down -v.
  • mosquitto/data/ — broker persistence, transient.
  • zigbee2mqtt/database.db — sqlite, transient (regenerated from configuration.yaml + coordinator_backup.json).
  • zigbee2mqtt/state.json — committed so device ON/OFF state survives full rebuilds.