33 lines
973 B
Docker
33 lines
973 B
Docker
# ============ 阶段一:构建前端(Vue3 + Vite) ============
|
||||
|
|
FROM node:18-slim AS frontend-build
|
|||
|
|
WORKDIR /build
|
|||
|
|
RUN corepack enable
|
|||
|
|
COPY frontend/package.json frontend/pnpm-lock.yaml ./
|
|||
|
|
RUN pnpm install --frozen-lockfile
|
|||
|
|
COPY frontend/ ./
|
|||
|
|
RUN pnpm build
|
|||
|
|
|
|||
|
|
# ============ 阶段二:运行时(Express + better-sqlite3) ============
|
|||
|
|
FROM node:18-slim
|
|||
|
|
ENV NODE_ENV=production \
|
|||
|
|
PORT=3000 \
|
|||
|
|
DATA_DIR=/app/data
|
|||
|
|
|
|||
|
|
WORKDIR /app
|
|||
|
|
RUN corepack enable
|
|||
|
|
|
|||
|
|
# 后端依赖(better-sqlite3 在 node:18 有预编译二进制,无需编译工具链)
|
|||
|
|
COPY backend/package.json backend/pnpm-lock.yaml ./
|
|||
|
|
RUN pnpm install --prod --frozen-lockfile
|
|||
|
|
|
|||
|
|
COPY backend/ ./
|
|||
|
|
# 前端产物托管在 /frontend/dist(server.js 中 distDir 指向 ../frontend/dist)
|
|||
|
|
COPY --from=frontend-build /build/dist /frontend/dist
|
|||
|
|
|
|||
|
|
# 非 root 运行(§3.7 安全:UID 10000)
|
|||
|
|
RUN mkdir -p /app/data && chown -R 10000:10000 /app/data
|
|||
|
|
USER 10000:10000
|
|||
|
|
|
|||
|
|
EXPOSE 3000
|
|||
|
|
CMD ["node", "server.js"]
|