FROM node:20-alpine AS builder # Build deps for native modules (better-sqlite3 needs python3/make/g++ on musl) RUN apk add --no-cache python3 make g++ WORKDIR /app COPY package*.json tsconfig.json ./ RUN npm ci COPY src/ ./src/ COPY prisma/ ./prisma/ RUN npx prisma generate RUN npm run build FROM node:20-alpine # Runtime libs for native modules RUN apk add --no-cache libstdc++ RUN addgroup -S mcp && adduser -S mcp -G mcp WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/prisma ./prisma COPY package.json ./ RUN mkdir -p /app/data && chown -R mcp:mcp /app/data USER mcp EXPOSE 8811 HEALTHCHECK --interval=30s --timeout=10s --start-period=15s \ CMD wget -qO- http://localhost:8811/health || exit 1 CMD ["node", "dist/server.js"]