fix: power outage auto-recovery improvements
Mosquitto: - Change restart: always (was unless-stopped) to survive daemon restarts - Add healthcheck (pub/sub ping) for depends_on conditions - All downstream services use condition: service_healthy Party-lock: - Add MQTT connection retry loop (was crashing on DNS race after restart) Zigbee2mqtt: - Add entrypoint wrapper that auto-applies BLZ bridge patch at startup - Bridge patch no longer needs manual 'just z2m-patch-bridge' after image pulls Mopidy: - Add python3-gi + python3-gi-cairo via apt (fixes 'No module named gi') - Set PYTHONPATH to expose system gi module to Python 3.12
This commit is contained in:
+14
-4
@@ -2,7 +2,7 @@ services:
|
||||
mosquitto:
|
||||
image: eclipse-mosquitto:latest
|
||||
container_name: mosquitto
|
||||
restart: unless-stopped
|
||||
restart: always
|
||||
user: "1883:1883"
|
||||
ports:
|
||||
- "1883:1883"
|
||||
@@ -10,6 +10,12 @@ services:
|
||||
- ./mosquitto/config:/mosquitto/config
|
||||
- ./mosquitto/data:/mosquitto/data
|
||||
- ./mosquitto/log:/mosquitto/log
|
||||
healthcheck:
|
||||
test: ["CMD", "sh", "-c", "timeout 3 mosquitto_sub -p 1883 -t healthcheck -C 1 --quiet & sleep 0.5 && mosquitto_pub -p 1883 -t healthcheck -m ok -r; wait"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 15s
|
||||
|
||||
zigbee2mqtt:
|
||||
image: ghcr.io/pine64/zigbee2mqtt:latest-dev # BLZ fork, NOT koenkk
|
||||
@@ -23,6 +29,7 @@ services:
|
||||
- ./zigbee2mqtt:/app/data
|
||||
devices:
|
||||
- /dev/ttyUSB0:/dev/ttyUSB0
|
||||
entrypoint: ["/app/data/scripts/entrypoint.sh"]
|
||||
environment:
|
||||
TZ: America/Los_Angeles
|
||||
|
||||
@@ -43,7 +50,8 @@ services:
|
||||
container_name: nodered
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- mosquitto
|
||||
mosquitto:
|
||||
condition: service_healthy
|
||||
user: "1000:1000"
|
||||
ports:
|
||||
- "1880:1880"
|
||||
@@ -65,7 +73,8 @@ services:
|
||||
container_name: doorbell-listener
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- mosquitto
|
||||
mosquitto:
|
||||
condition: service_healthy
|
||||
volumes:
|
||||
- ./doorbell-listener/state:/data/doorbell-listener
|
||||
environment:
|
||||
@@ -146,7 +155,8 @@ services:
|
||||
container_name: party-lock
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- mosquitto
|
||||
mosquitto:
|
||||
condition: service_healthy
|
||||
volumes:
|
||||
- ./mosquitto/config:/mosquitto/config
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
|
||||
@@ -14,12 +14,20 @@ RUN apt-get update \
|
||||
libpango-1.0-0 \
|
||||
libpangoft2-1.0-0 \
|
||||
libgirepository-1.0-1 \
|
||||
libgirepository1.0-dev \
|
||||
gir1.2-glib-2.0 \
|
||||
gir1.2-gstreamer-1.0 \
|
||||
gir1.2-gst-plugins-base-1.0 \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
python3-gi \
|
||||
python3-gi-cairo \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Expose the system Python's gi module to Python 3.12 (/usr/local).
|
||||
ENV PYTHONPATH=/usr/lib/python3/dist-packages:${PYTHONPATH}
|
||||
|
||||
RUN pip install --no-cache-dir \
|
||||
"setuptools<80" \
|
||||
Mopidy==3.4.2 \
|
||||
|
||||
@@ -51,7 +51,13 @@ def main():
|
||||
rebuild_acl()
|
||||
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
|
||||
client.on_message = on_message
|
||||
client.connect(MQTT_HOST, MQTT_PORT, 60)
|
||||
while True:
|
||||
try:
|
||||
client.connect(MQTT_HOST, MQTT_PORT, 60)
|
||||
break
|
||||
except Exception as e:
|
||||
print(f"mqtt connect failed: {e}; retrying in 5s", flush=True)
|
||||
time.sleep(5)
|
||||
client.subscribe("party-lock/set", qos=1)
|
||||
client.loop_forever()
|
||||
|
||||
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
node /app/data/scripts/blz-bridge-patch.js
|
||||
|
||||
exec docker-entrypoint.sh "$@"
|
||||
Reference in New Issue
Block a user