# ---- 构建前端 ---- FROM node:24-alpine AS build WORKDIR /app RUN npm install -g pnpm@10.34.7 COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ RUN pnpm install --frozen-lockfile COPY . . RUN pnpm build-only # ---- 运行 ---- FROM node:24-alpine WORKDIR /app ENV NODE_ENV=production \ PORT=3000 \ DATA_DIR=/data RUN npm install -g pnpm@10.34.7 COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ RUN pnpm install --prod --frozen-lockfile && npm uninstall -g pnpm COPY server ./server COPY shared ./shared COPY --from=build /app/dist ./dist VOLUME /data EXPOSE 3000 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s \ CMD wget -qO- http://127.0.0.1:3000/healthz || exit 1 # Node 24 可以直接运行 TypeScript(类型剥离),不需要额外编译 CMD ["node", "--experimental-strip-types", "--disable-warning=ExperimentalWarning", "server/index.ts"]