FROM node:22-alpine

# ffmpeg / ffprobe：偵測 360 metadata 與轉檔。
# intel-media-driver / libva-intel-driver：NAS 有 Intel 內顯並把 /dev/dri 掛進來時，可用 VAAPI 硬體轉檔。
# tini：正確回收 ffmpeg 子程序、把 docker stop 的 SIGTERM 轉給 node。
RUN apk add --no-cache ffmpeg intel-media-driver libva-intel-driver tini

WORKDIR /app

ENV NODE_ENV=production \
    PORT=8360 \
    HTTPS_PORT=8443 \
    HOST=0.0.0.0 \
    VIDEO_DIR=/videos \
    CACHE_DIR=/cache \
    SSL_CERT_DIR=/certs

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

COPY server.js config.json ./
COPY lib ./lib
COPY public ./public

VOLUME ["/videos", "/cache"]
EXPOSE 8443

# HEALTHCHECK 走容器內的 HTTP，不受憑證影響（8360 不對外開）。
HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
  CMD wget -qO- http://127.0.0.1:8360/api/config >/dev/null || exit 1

ENTRYPOINT ["tini", "--"]
CMD ["node", "server.js"]
