Initial commit: FarmBox edge stack (ESP32 firmware + MQTT bridge + sync agent)
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
version: '3.8'
|
||||
|
||||
# ╔═══════════════════════════════════════════════════════╗
|
||||
# ║ FarmBox — локальный стек ║
|
||||
# ║ Разворачивается на Mini PC / RPi на ферме ║
|
||||
# ║ Работает полностью без интернета ║
|
||||
# ╚═══════════════════════════════════════════════════════╝
|
||||
|
||||
services:
|
||||
|
||||
# ─── MQTT брокер — принимает данные от всех датчиков ───
|
||||
mosquitto:
|
||||
image: eclipse-mosquitto:2.0
|
||||
container_name: farmbox-mqtt
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "1883:1883" # MQTT (датчики)
|
||||
- "9001:9001" # WebSocket (браузер)
|
||||
volumes:
|
||||
- ./mosquitto/mosquitto.conf:/mosquitto/config/mosquitto.conf
|
||||
- mosquitto-data:/mosquitto/data
|
||||
- mosquitto-logs:/mosquitto/log
|
||||
networks:
|
||||
- farmbox-net
|
||||
|
||||
# ─── InfluxDB — хранение временных рядов датчиков ───
|
||||
influxdb:
|
||||
image: influxdb:2.7
|
||||
container_name: farmbox-influx
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8086:8086"
|
||||
environment:
|
||||
- DOCKER_INFLUXDB_INIT_MODE=setup
|
||||
- DOCKER_INFLUXDB_INIT_USERNAME=farmbox
|
||||
- DOCKER_INFLUXDB_INIT_PASSWORD=farmbox2024
|
||||
- DOCKER_INFLUXDB_INIT_ORG=farm
|
||||
- DOCKER_INFLUXDB_INIT_BUCKET=sensors
|
||||
- DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=farmbox-super-secret-token
|
||||
volumes:
|
||||
- influxdb-data:/var/lib/influxdb2
|
||||
networks:
|
||||
- farmbox-net
|
||||
|
||||
# ─── Node-RED — автоматизация и логика правил ───
|
||||
nodered:
|
||||
image: nodered/node-red:3.1
|
||||
container_name: farmbox-nodered
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "1880:1880"
|
||||
environment:
|
||||
- TZ=Europe/Moscow
|
||||
volumes:
|
||||
- nodered-data:/data
|
||||
- ./nodered/flows.json:/data/flows.json
|
||||
depends_on:
|
||||
- mosquitto
|
||||
- influxdb
|
||||
networks:
|
||||
- farmbox-net
|
||||
|
||||
# ─── Grafana — дашборды и графики ───
|
||||
grafana:
|
||||
image: grafana/grafana:10.3.0
|
||||
container_name: farmbox-grafana
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3001:3000"
|
||||
environment:
|
||||
- GF_SECURITY_ADMIN_USER=admin
|
||||
- GF_SECURITY_ADMIN_PASSWORD=farm2024
|
||||
- GF_SERVER_ROOT_URL=http://localhost:3001
|
||||
- GF_USERS_ALLOW_SIGN_UP=false
|
||||
volumes:
|
||||
- grafana-data:/var/lib/grafana
|
||||
- ./grafana/provisioning:/etc/grafana/provisioning
|
||||
depends_on:
|
||||
- influxdb
|
||||
networks:
|
||||
- farmbox-net
|
||||
|
||||
# ─── IoT Bridge — мост MQTT → PostgreSQL + farm-cmms ───
|
||||
iot-bridge:
|
||||
image: node:20-alpine
|
||||
container_name: farmbox-iot-bridge
|
||||
restart: unless-stopped
|
||||
working_dir: /app
|
||||
command: node bridge.js
|
||||
volumes:
|
||||
- ./iot-bridge:/app
|
||||
environment:
|
||||
- MQTT_HOST=mosquitto
|
||||
- MQTT_PORT=1883
|
||||
- INFLUX_URL=http://influxdb:8086
|
||||
- INFLUX_TOKEN=farmbox-super-secret-token
|
||||
- INFLUX_ORG=farm
|
||||
- INFLUX_BUCKET=sensors
|
||||
- FARM_CMMS_URL=http://host.docker.internal:3005
|
||||
- FARM_CMMS_TOKEN=farmbox-iot-internal-token
|
||||
- TZ=Europe/Moscow
|
||||
depends_on:
|
||||
- mosquitto
|
||||
- influxdb
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
networks:
|
||||
- farmbox-net
|
||||
|
||||
# ─── Sync Agent — синхронизация с облаком ───
|
||||
sync-agent:
|
||||
image: node:20-alpine
|
||||
container_name: farmbox-sync
|
||||
restart: unless-stopped
|
||||
working_dir: /app
|
||||
command: node sync.js
|
||||
volumes:
|
||||
- ./sync-agent:/app
|
||||
- sync-queue:/app/queue
|
||||
environment:
|
||||
- LOCAL_CMMS_URL=http://host.docker.internal:3005
|
||||
- CLOUD_CMMS_URL=https://to.zeroday.su
|
||||
- SYNC_INTERVAL_SEC=30
|
||||
- FARM_ID=${FARM_ID:-farm_001}
|
||||
- FARM_NAME=${FARM_NAME:-Ферма 1}
|
||||
- SYNC_TOKEN=${SYNC_TOKEN:-changeme}
|
||||
- TZ=Europe/Moscow
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
networks:
|
||||
- farmbox-net
|
||||
|
||||
# ─── Тома для хранения данных ───
|
||||
volumes:
|
||||
mosquitto-data:
|
||||
mosquitto-logs:
|
||||
influxdb-data:
|
||||
nodered-data:
|
||||
grafana-data:
|
||||
sync-queue:
|
||||
|
||||
# ─── Внутренняя сеть ───
|
||||
networks:
|
||||
farmbox-net:
|
||||
driver: bridge
|
||||
Reference in New Issue
Block a user