mirror of
https://github.com/stardrophere/InsightRadar.git
synced 2026-06-05 23:07:51 +08:00
50 lines
1.5 KiB
Docker
50 lines
1.5 KiB
Docker
# ---------- 阶段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 --index https://pypi.tuna.tsinghua.edu.cn/simple/
|
|
|
|
# 复制后端代码
|
|
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/app/static
|
|
|
|
# 把venv加入PATH
|
|
ENV PATH="/app/.venv/bin:$PATH"
|
|
|
|
# 暴露Uvicorn端口
|
|
EXPOSE 8000
|
|
|
|
# 直接启动Uvicorn,由Uvicorn配合后端框架托管静态文件
|
|
CMD ["python3", "main.py"] |