合并应用宝 Worker 容器
This commit is contained in:
+23
-6
@@ -10,7 +10,17 @@ RUN npm config set registry https://registry.npmmirror.com && \
|
||||
COPY web/frontend/ ./
|
||||
RUN npm run build
|
||||
|
||||
# ===== 阶段2: Python 运行时 =====
|
||||
# ===== 阶段2: 构建应用宝 Worker 的 Node 依赖 =====
|
||||
FROM node:20-slim AS yyb-node-builder
|
||||
|
||||
WORKDIR /build
|
||||
COPY services/yyb-worker/package.json services/yyb-worker/package-lock.json ./
|
||||
# 优先 npmmirror,失败时回退官方 registry,避免国内构建时依赖下载中断。
|
||||
RUN npm config set registry https://registry.npmmirror.com && \
|
||||
npm ci --omit=dev || \
|
||||
(npm config set registry https://registry.npmjs.org && npm ci --omit=dev)
|
||||
|
||||
# ===== 阶段3: Python 运行时 =====
|
||||
FROM python:3.12-slim AS runtime
|
||||
|
||||
ARG USE_CHINA_MIRRORS=true
|
||||
@@ -61,11 +71,17 @@ COPY utils/ ./utils/
|
||||
COPY web/backend/ ./web/backend/
|
||||
COPY scripts/ ./scripts/
|
||||
|
||||
# 将应用宝 Worker 合并进同一应用镜像;其 Python 依赖已纳入项目 uv.lock。
|
||||
COPY services/yyb-worker/runtime/ ./services/yyb-worker/runtime/
|
||||
COPY --from=yyb-node-builder /build/node_modules ./services/yyb-worker/runtime/node_modules
|
||||
COPY docker-entrypoint.sh ./docker-entrypoint.sh
|
||||
|
||||
# 复制前端构建产物
|
||||
COPY --from=frontend-builder /build/dist ./web/frontend/dist
|
||||
|
||||
# 创建数据和日志目录
|
||||
RUN mkdir -p /app/data /app/logs
|
||||
RUN mkdir -p /app/data /app/logs /app/data/yyb-worker-jobs && \
|
||||
chmod +x /app/docker-entrypoint.sh
|
||||
|
||||
# 环境变量
|
||||
ENV PYTHONUNBUFFERED=1
|
||||
@@ -73,12 +89,13 @@ ENV PYTHONDONTWRITEBYTECODE=1
|
||||
ENV PATH="/app/.venv/bin:$PATH"
|
||||
# 生产镜像默认关闭文件监控重载,避免 data/logs 写入触发重启循环。
|
||||
ENV UVICORN_RELOAD=false
|
||||
ENV YYB_WORKER_URL=http://127.0.0.1:8810
|
||||
|
||||
EXPOSE 8800
|
||||
|
||||
# 健康检查
|
||||
# 健康检查同时覆盖 Web API 与同容器 Worker。
|
||||
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
|
||||
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8800/api/health')" || exit 1
|
||||
CMD python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8800/api/health'); urllib.request.urlopen('http://127.0.0.1:8810/health')" || exit 1
|
||||
|
||||
# 启动命令
|
||||
CMD ["python", "-m", "uvicorn", "web.backend.main:app", "--host", "0.0.0.0", "--port", "8800", "--workers", "1"]
|
||||
# 同一容器内启动 Web 与本机 Worker;入口脚本负责联动退出和信号转发。
|
||||
ENTRYPOINT ["/app/docker-entrypoint.sh"]
|
||||
|
||||
Reference in New Issue
Block a user