FROM node:20-alpine AS builder

WORKDIR /app

COPY package*.json ./
RUN npm ci

COPY . .
RUN npm run build

FROM node:20-alpine AS runner

WORKDIR /app

ENV NODE_ENV=production
ENV VIDEO_PROCESSING_FFMPEG_PATH=/usr/bin/ffmpeg
ENV NODE_OPTIONS=--enable-source-maps

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.edge.kernel.org/g' /etc/apk/repositories \
  && apk update \
  && apk add --no-cache ffmpeg tini

COPY package*.json ./
RUN npm ci --omit=dev \
  && npm cache clean --force

COPY --from=builder --chown=node:node /app/dist ./dist
RUN mkdir -p /app/uploads \
  && chown -R node:node /app/uploads

USER node

EXPOSE 4000

HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
  CMD wget -q -O /dev/null http://127.0.0.1:4000/api/v1/health || exit 1

ENTRYPOINT ["/sbin/tini", "--"]
CMD ["node", "dist/main.js"]
