# --- builder: install deps (better-sqlite3 needs build toolchain) --- FROM node:20-alpine AS builder WORKDIR /app RUN apk add --no-cache python3 make g++ COPY package.json ./ RUN npm install --omit=dev --no-audit --no-fund # --- runtime --- FROM node:20-alpine WORKDIR /app ENV NODE_ENV=production \ PORT=3000 \ DB_PATH=/data/raycer.sqlite RUN addgroup -S app && adduser -S app -G app && \ mkdir -p /data && chown -R app:app /data COPY --from=builder /app/node_modules ./node_modules COPY --chown=app:app package.json ./ COPY --chown=app:app src ./src USER app EXPOSE 3000 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD wget -qO- http://127.0.0.1:3000/api/health || exit 1 CMD ["node", "src/server.js"]