# Devwebs API and background workers (one image; PROCESS_ROLE picks api, worker or all).
# Build:  docker build -t devwebs-api ./backend
FROM node:22-bookworm-slim AS build
WORKDIR /app
COPY package.json package-lock.json ./
# better-sqlite3 is optional (development/tests only); production uses MySQL, so a failed native build is fine.
RUN npm ci --no-audit --no-fund
COPY tsconfig.json ./
COPY src ./src
RUN npm run build && npm prune --omit=dev --no-audit --no-fund

FROM node:22-bookworm-slim
ENV NODE_ENV=production \
    PORT=4000 \
    STORAGE_DIR=/app/storage \
    LOG_FORMAT=json
WORKDIR /app
COPY --from=build --chown=node:node /app/node_modules ./node_modules
COPY --from=build --chown=node:node /app/dist ./dist
COPY --chown=node:node package.json ./
RUN mkdir -p /app/storage && chown node:node /app/storage
USER node
VOLUME ["/app/storage"]
EXPOSE 4000
# Liveness for the API role (workers have no HTTP port: the compose file overrides this for them).
HEALTHCHECK --interval=30s --timeout=5s --start-period=40s --retries=3 \
  CMD node -e "fetch('http://127.0.0.1:'+(process.env.PORT||4000)+'/api/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
CMD ["node", "dist/server.js"]
