feat: 添加后端部署和API基本检索的Docker Compose配置
- 引入新的`docker-compose.yml`文件,便于后端和MQTT代理(EMQX)的部署。 - 更新多个组件中的API基本检索,使用函数进行动态解析。 - 加强了多个组件中API调用的错误处理和日志记录。 - 优化了AI聊天面板离线场景的回退响应。 - 更新DataScreen和MediaScreen组件中的数据显示和统计,以反映准确的指标。 - 重构MQTT连接逻辑,以支持动态凭证和客户端ID。
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
# ============================================================
|
||||
# OPC 智能园区后端(FastAPI + s2s 语音栈)Docker 镜像
|
||||
# 构建: docker build -f backend/Dockerfile -t dpm-backend .
|
||||
# 运行: docker compose up -d --build (推荐,见根目录 docker-compose.yml)
|
||||
# 说明:
|
||||
# · 依赖使用 uv 按 uv.lock 锁定安装(Python 3.12)
|
||||
# · vendor/s2s-cloud(补丁版语音栈)以 --no-deps 方式安装,避免拖入多余依赖
|
||||
# · silero VAD / nltk 数据 / YOLO 模型随镜像打包,运行期不联网下载
|
||||
# · media / knowledge / data.json 挂载为持久卷(数据与知识库可热更新)
|
||||
# ============================================================
|
||||
FROM python:3.12-slim-bookworm
|
||||
|
||||
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||
PYTHONUNBUFFERED=1 \
|
||||
PIP_NO_CACHE_DIR=1 \
|
||||
UV_LINK_MODE=copy \
|
||||
UV_PROJECT_ENVIRONMENT=/opt/venv \
|
||||
PATH="/opt/venv/bin:$PATH"
|
||||
|
||||
# 系统依赖:libsndfile1(soundfile 音频解码)、libgomp1(torch)、
|
||||
# libgl1/libglib2.0-0(OpenCV/ultralytics 图像处理)
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
libsndfile1 \
|
||||
libgomp1 \
|
||||
libgl1 \
|
||||
libglib2.0-0 \
|
||||
curl \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# uv 包管理器(按 lock 锁定版本安装)
|
||||
COPY --from=ghcr.io/astral-sh/uv:0.7.4 /uv /uvx /usr/local/bin/
|
||||
|
||||
WORKDIR /app
|
||||
COPY backend /app/backend
|
||||
|
||||
WORKDIR /app/backend
|
||||
|
||||
# 1) 按 uv.lock 安装全部依赖(不含 dev;不安装项目本身,保持 /app/backend 为源码目录)
|
||||
RUN uv sync --locked --no-dev --no-install-project
|
||||
|
||||
# 2) 安装补丁后的 s2s 语音栈(--no-deps:仅装包体,依赖已由 uv sync 覆盖)
|
||||
RUN uv pip install --no-deps --no-build-isolation -e vendor/s2s-cloud
|
||||
|
||||
# 3) 运行期资源目录(本地缓存随镜像打包,避免运行期联网下载)
|
||||
ENV TORCH_HOME=/app/backend/.torch-cache \
|
||||
NLTK_DATA=/app/backend/nltk_data \
|
||||
YOLO_CONFIG_DIR=/app/backend/.ultralytics \
|
||||
NO_PROXY=* \
|
||||
no_proxy=*
|
||||
|
||||
# 持久卷:媒体资源 / 知识库 / 运行数据
|
||||
VOLUME ["/app/backend/media", "/app/backend/knowledge", "/app/backend/data.json"]
|
||||
|
||||
EXPOSE 10085 8765
|
||||
|
||||
HEALTHCHECK --interval=15s --timeout=5s --start-period=30s --retries=5 \
|
||||
CMD python -c "import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://127.0.0.1:10085/api/health', timeout=4).status==200 else 1)" || exit 1
|
||||
|
||||
CMD ["python", "docker_entry.py"]
|
||||
Reference in New Issue
Block a user