From 2cd9137f919cafcf4eaded73f062d3f3ea69e2c5 Mon Sep 17 00:00:00 2001 From: csf123321 Date: Tue, 31 Mar 2026 16:42:29 +0800 Subject: [PATCH] =?UTF-8?q?docker=E9=85=8D=E7=BD=AE=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 18 ++++++++++++++++ backend/.dockerignore | 13 ----------- backend/dockerfile | 31 --------------------------- dockerfile | 50 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+), 44 deletions(-) create mode 100644 .dockerignore delete mode 100644 backend/.dockerignore delete mode 100644 backend/dockerfile create mode 100644 dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..09734ae --- /dev/null +++ b/.dockerignore @@ -0,0 +1,18 @@ +# 前端 +frontend/dist +frontend/node_modules + +# 后端 +backend/.venv +backend/.git +backend/__pycache__ +backend/*.pyc +backend/*.pyo +backend/*.pyd +backend/.pytest_cache +backend/.mypy_cache +backend/.cache +backend/.env +backend/*.log +backend/dist +backend/build \ No newline at end of file diff --git a/backend/.dockerignore b/backend/.dockerignore deleted file mode 100644 index ddec2af..0000000 --- a/backend/.dockerignore +++ /dev/null @@ -1,13 +0,0 @@ -.venv -.git -__pycache__ -*.pyc -*.pyo -*.pyd -.pytest_cache -.mypy_cache -.cache -.env -*.log -dist -build \ No newline at end of file diff --git a/backend/dockerfile b/backend/dockerfile deleted file mode 100644 index 3fc42e6..0000000 --- a/backend/dockerfile +++ /dev/null @@ -1,31 +0,0 @@ -FROM python:3.11-slim AS builder - -WORKDIR /insightradar - -COPY pyproject.toml uv.lock ./ - -RUN --mount=type=cache,target=/root/.cache/uv \ - pip install --no-cache-dir uv && \ - uv sync --frozen --no-dev - -COPY app app -COPY main.py main.py - -#----------------------------------------------- - -FROM python:3.11-slim - -WORKDIR /insightradar - -# 👇 复制虚拟环境 -COPY --from=builder /insightradar/.venv /insightradar/.venv - -COPY app app -COPY main.py main.py - -# 👇 关键:用 venv 里的 python -ENV PATH="/insightradar/.venv/bin:$PATH" - -EXPOSE 8000 - -CMD ["python","main.py"] \ No newline at end of file diff --git a/dockerfile b/dockerfile new file mode 100644 index 0000000..5ad0e92 --- /dev/null +++ b/dockerfile @@ -0,0 +1,50 @@ +# ---------- 阶段1:前端编译(Node打包静态产物) ---------- +FROM node:22-alpine AS frontend-builder + +WORKDIR /frontend + +# 复制前端依赖,利用Docker缓存优化 +COPY frontend/package*.json ./ +RUN npm install --registry=https://registry.npmmirror.com + +# 复制前端代码,编译出静态产物 +COPY frontend/ . +RUN npm run build + +# ---------- 阶段2:后端依赖构建(uv构建虚拟环境) ---------- +FROM python:3.11-slim AS backend-builder + +WORKDIR /backend + +# 安装uv,同步Python依赖 +COPY backend/pyproject.toml backend/uv.lock ./ +RUN --mount=type=cache,target=/root/.cache/uv \ + pip install --no-cache-dir uv && \ + uv sync --frozen --no-dev + +# 复制后端代码 +COPY backend/app ./app +COPY backend/main.py ./ + +# ---------- 阶段3:最终运行镜像(仅Python+Uvicorn,托管前端静态) ---------- +FROM python:3.11-slim + +WORKDIR /app + +# 复制构建好的后端虚拟环境 +COPY --from=backend-builder /backend/.venv /app/.venv +COPY --from=backend-builder /backend/app /app/app +COPY --from=backend-builder /backend/main.py /app/main.py + +# 复制前端编译好的静态产物,放到后端能访问的目录 +# 这里我们把静态文件放到 /app/static 目录 +COPY --from=frontend-builder /frontend/dist /app/static + +# 把venv加入PATH +ENV PATH="/app/.venv/bin:$PATH" + +# 暴露Uvicorn端口 +EXPOSE 8000 + +# 直接启动Uvicorn,由Uvicorn配合后端框架托管静态文件 +CMD ["python3", "main.py"] \ No newline at end of file