添加Docker部署方案

- 多阶段Dockerfile:第一阶段构建前端(npm),第二阶段Python运行时(uv+opencv)
- docker-compose.yml:单服务,data/logs目录挂载持久化
- deploy.sh一键部署脚本:自动构建+启动+健康检查
- .dockerignore排除不必要文件减小构建上下文
- main.py添加前端静态文件服务(生产环境单端口部署)
- README更新部署文档和代理配置说明
This commit is contained in:
yml2213
2026-06-23 00:54:48 +08:00
parent da2fedd484
commit 93d358f214
6 changed files with 265 additions and 1 deletions
+52
View File
@@ -0,0 +1,52 @@
# ===== 阶段1: 构建前端 =====
FROM node:20-slim AS frontend-builder
WORKDIR /build
COPY web/frontend/package.json web/frontend/package-lock.json* ./
RUN npm ci || npm install
COPY web/frontend/ ./
RUN npm run build
# ===== 阶段2: Python 运行时 =====
FROM python:3.12-slim AS runtime
# 安装 OpenCV 系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
libgl1 \
libglib2.0-0 \
&& rm -rf /var/lib/apt/lists/*
# 安装 uv 用于快速安装依赖
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
WORKDIR /app
# 先复制依赖文件,利用 Docker 缓存层
COPY pyproject.toml uv.lock* ./
RUN uv venv /app/.venv && uv pip install -e .
# 复制项目代码
COPY core/ ./core/
COPY utils/ ./utils/
COPY web/backend/ ./web/backend/
COPY README.md ./
# 复制前端构建产物
COPY --from=frontend-builder /build/dist ./web/frontend/dist
# 创建数据和日志目录
RUN mkdir -p /app/data /app/logs
# 环境变量
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
ENV PATH="/app/.venv/bin:$PATH"
EXPOSE 8000
# 健康检查
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/api/health')" || exit 1
# 启动命令
CMD ["python", "-m", "uvicorn", "web.backend.main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "1"]