FROM node:24-alpine AS build WORKDIR /app RUN corepack enable # Toolchain for native modules (better-sqlite3) when no prebuilt binary matches Alpine/musl. RUN apk add --no-cache python3 make g++ COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ RUN pnpm install --frozen-lockfile COPY . . RUN pnpm run build && pnpm prune --prod FROM node:24-alpine AS runtime WORKDIR /app ENV NODE_ENV=production ENV PORT=3800 RUN corepack enable COPY --from=build /app/package.json ./ COPY --from=build /app/node_modules ./node_modules COPY --from=build /app/dist ./dist EXPOSE 3800 HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \ CMD node -e "fetch('http://127.0.0.1:' + (process.env.PORT || 3800) + '/api/health').then((r) => process.exit(r.ok ? 0 : 1), () => process.exit(1))" CMD ["pnpm", "run", "start"]