FROM node:22-alpine AS builder WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci --registry=https://registry.npmmirror.com/ --no-audit --no-fund COPY . . RUN npm run build FROM node:22-alpine WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci --omit=dev --registry=https://registry.npmmirror.com/ --no-audit --no-fund COPY --from=builder /app/dist ./dist COPY src/server ./src/server COPY src/shared ./src/shared COPY tsconfig.json ./ EXPOSE 3001 ENV NODE_ENV=production ENV SERVER_PORT=3001 ENV EXTERNAL_API_BASE=https://lnh2e.com # JWT_SECRET 不再写入镜像:镜像层里的默认密钥等同于公开密钥,任何人可离线伪造令牌。 # 必须在运行环境注入(至少 32 字符),缺失时服务会拒绝启动(见 src/server/config.ts)。 CMD ["npm", "run", "start"]