FROM node:20-alpine

WORKDIR /app

# The npm version bundled with node:20-alpine has a known "Exit handler
# never called!" bug under slow/unreliable networks (common on VPS hosts).
# Upgrading npm first, plus more tolerant retry/timeout settings, avoids it.
RUN npm install -g npm@11 \
  && npm config set fetch-retries 5 \
  && npm config set fetch-retry-mintimeout 20000 \
  && npm config set fetch-timeout 300000

COPY package.json package-lock.json ./
RUN npm ci --omit=dev && node -e "require('express')"

COPY server.js ./
COPY src ./src
COPY public ./public
COPY locales ./locales

RUN chown -R node:node /app
USER node

ENV PORT=3000
EXPOSE 3000

CMD ["node", "server.js"]
