35 lines
781 B
Docker
35 lines
781 B
Docker
# ── 阶段一:构建前端 ──
|
||
FROM node:20-alpine AS frontend-build
|
||
|
||
WORKDIR /app/frontend
|
||
COPY frontend/package.json frontend/package-lock.json* ./
|
||
RUN npm ci
|
||
COPY frontend/ ./
|
||
RUN npm run build-only
|
||
|
||
|
||
# ── 阶段二:运行后端 + 服务前端静态文件 ──
|
||
FROM python:3.12-slim
|
||
|
||
WORKDIR /app
|
||
|
||
# 安装 Python 依赖
|
||
COPY backend/requirements.txt ./requirements.txt
|
||
RUN pip install --no-cache-dir -r requirements.txt
|
||
|
||
# 复制后端代码
|
||
COPY backend/app ./app
|
||
|
||
# 复制前端构建产物到后端静态目录
|
||
COPY --from=frontend-build /app/frontend/dist ./static
|
||
|
||
# 数据目录(SQLite 存储)
|
||
RUN mkdir -p /app/data
|
||
VOLUME /app/data
|
||
|
||
ENV NOVAL_DATA_DIR=/app/data
|
||
|
||
EXPOSE 8000
|
||
|
||
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
|