Files
DPM/backend/Dockerfile
T
Pine 18d28be943 feat: 添加后端部署和API基本检索的Docker Compose配置
- 引入新的`docker-compose.yml`文件,便于后端和MQTT代理(EMQX)的部署。
- 更新多个组件中的API基本检索,使用函数进行动态解析。
- 加强了多个组件中API调用的错误处理和日志记录。
- 优化了AI聊天面板离线场景的回退响应。
- 更新DataScreen和MediaScreen组件中的数据显示和统计,以反映准确的指标。
- 重构MQTT连接逻辑,以支持动态凭证和客户端ID。
2026-08-18 06:50:50 +08:00

61 lines
2.4 KiB
Docker
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.
# 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"
# 系统依赖:libsndfile1soundfile 音频解码)、libgomp1torch)、
# libgl1/libglib2.0-0OpenCV/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"]