diff --git a/Dockerfile b/Dockerfile index 92ec9dd..506480b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,21 +1,28 @@ -# 使用 Node 基础镜像 +# ========== 阶段1:构建前端 ========== FROM node:18-alpine AS builder -WORKDIR /app -COPY package*.json pnpm-lock.yaml ./ -RUN npm install -g pnpm && pnpm install --frozen-lockfile +RUN npm install -g pnpm -# 复制源码并构建 +WORKDIR /app + +# 先拷贝依赖文件,利用 Docker 缓存层 +COPY package.json pnpm-lock.yaml ./ +RUN pnpm install --frozen-lockfile + +# 拷贝源码并构建 COPY . . RUN pnpm run build -# 生产阶段:只复制必要文件 -FROM node:18-alpine +# ========== 阶段2:生产运行 ========== +FROM node:18-alpine AS runner + +RUN npm install -g pnpm WORKDIR /app -# 只拷贝生产需要的文件,保持镜像最小 -COPY package.json package-lock.json pnpm-lock.yaml ./ -RUN npm ci --omit=dev && npm cache clean --force + +# 只拷贝生产需要的文件 +COPY package.json pnpm-lock.yaml ./ +RUN pnpm install --frozen-lockfile --prod && pnpm store prune # 拷贝 Express 服务代码 COPY server/ ./server/ @@ -23,13 +30,9 @@ COPY server/ ./server/ # 从构建阶段拷贝前端产物 COPY --from=builder /app/dist ./dist +EXPOSE 3001 -# 暴露端口(与 Express 监听端口一致) -EXPOSE 3000 - -# 环境变量 ENV NODE_ENV=production ENV VITE_SERVICE_PORT=3000 -# 启动 Express 服务(使用 pnpm start 或 node server/index.js) -CMD ["pnpm", "start"] \ No newline at end of file +CMD ["node", "server/index.js"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 07989c2..991853c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -version: '3.8' - services: app: build: