Files
DPM/docker-compose.yml
T

101 lines
3.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================
# OPC 智能园区后端 · Docker Compose 一键部署
#
# 启动: docker compose up -d --build
# 停止: docker compose down
# 查看: docker compose logs -f backend
# 重建: docker compose up -d --build backend
#
# 部署前配置(可选,均可用环境变量覆盖):
# export MQTT_PUBLIC_HOST=192.168.1.50 # 展播端能访问到的 Broker 地址(服务器局域网 IP)
# export EMQX_USER=dpmserver EMQX_PASS=xxxxx
# export DASHSCOPE_API_KEY=sk-xxxx # AI/语音(未配置时 AI 走本地规则引擎)
# export DPM_S2S_ENABLED=0 # 不需要实时语音对话可关闭
#
# 端口:
# · 10085 HTTPAPI + 管理后台 + 媒体)
# · 8765 s2s 实时语音 WebSocketDPM_S2S_ENABLED=1 时)
# · 1883/8083/18083 EMQXMQTT / MQTT-WS / 控制台)
# ============================================================
services:
# ---------- MQTT BrokerEMQX 5.x ----------
emqx:
image: emqx/emqx:5.8
container_name: dpm-emqx
restart: unless-stopped
ports:
- "1883:1883" # MQTT
- "8083:8083" # MQTT over WebSocket(展播端 /api/config 下发)
- "18083:18083" # EMQX Dashboard(可选,账号 admin / public
environment:
EMQX_NAME: dpm-emqx
EMQX_HOST: node.emqx.dpm.local
EMQX_NODE__COOKIE: dpm-emqx-cookie
EMQX_DASHBOARD__DEFAULT_PASSWORD: "${EMQX_DASHBOARD_PASS:-public}"
# 鉴权:禁止匿名,单账号 dpmserver(与 backend/.env 一致)
EMQX_ALLOW_ANONYMOUS: "false"
EMQX_AUTH__USER__1__LOGIN: "${EMQX_USER:-dpmserver}"
EMQX_AUTH__USER__1__PASSWORD: "${EMQX_PASS:-123456}"
volumes:
- emqx_data:/opt/emqx/data
- emqx_log:/opt/emqx/log
healthcheck:
test: ["CMD", "emqx", "ctl", "status"]
interval: 10s
timeout: 5s
retries: 12
start_period: 15s
networks:
- dpm_net
# ---------- 园区后端(FastAPI :10085 + s2s :8765 ----------
backend:
build:
context: .
dockerfile: backend/Dockerfile
image: dpm-backend:latest
container_name: dpm-backend
restart: unless-stopped
depends_on:
emqx:
condition: service_healthy
ports:
- "10085:10085" # API / 管理后台 / 媒体
- "8765:8765" # s2s 实时语音(DPM_S2S_ENABLED=1 时)
environment:
DPM_PORT: "10085"
DPM_MQTT_ENABLED: "1"
MQTT_BROKER_HOST: emqx
MQTT_BROKER_PORT: "1883"
MQTT_USERNAME: "${EMQX_USER:-dpmserver}"
MQTT_PASSWORD: "${EMQX_PASS:-123456}"
# 展播端(Tauri 大屏)经后端 /api/config 获取的 WebSocket 地址:
# 必须填"展播机能访问到的服务器地址",默认 192.168.1.9(同机部署)
DPM_MQTT_WS: "ws://${MQTT_PUBLIC_HOST:-192.168.1.9}:8083/mqtt"
DPM_S2S_ENABLED: "${DPM_S2S_ENABLED:-1}"
DASHSCOPE_API_KEY: "${DASHSCOPE_API_KEY:-}"
volumes:
- dpm_media:/app/backend/media # 媒体资源(上传持久化)
- dpm_knowledge:/app/backend/knowledge # 知识库 park.md(可热更新,删除 kb_index.json 触发重建)
- dpm_data:/app/backend/data.json # 播放列表 / 设置
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://192.168.1.9:10085/api/health', timeout=4).status==200 else 1)"]
interval: 15s
timeout: 5s
retries: 5
start_period: 30s
networks:
- dpm_net
networks:
dpm_net:
driver: bridge
volumes:
emqx_data:
emqx_log:
dpm_media:
dpm_knowledge:
dpm_data: