Dockerfile
Rama main · réplica de lectura del repositorio original.
# syntax=docker/dockerfile:1
FROM node:22-bookworm-slim AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:22-bookworm-slim AS run
# ffmpeg from apt; yt-dlp nightly from pip (Debian's package is years behind YouTube).
# YTDLP_CACHE_BUST must change on each deploy/CI build so this layer is not reused from cache.
ARG YTDLP_CACHE_BUST=manual
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ffmpeg \
ca-certificates \
python3 \
python3-pip \
&& echo "yt-dlp cache bust: ${YTDLP_CACHE_BUST}" \
&& pip3 install --no-cache-dir --break-system-packages --upgrade --pre 'yt-dlp[default]' \
&& yt-dlp --version \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
ENV NODE_ENV=production
ENV HOST=0.0.0.0
ENV PORT=4000
ENV LOUIS_AUDIO_WORK_DIR=/data/audio
# Legacy fallback for older tooling that still reads NUXT_*
ENV NUXT_AUDIO_WORK_DIR=/data/audio
# LAN HTTP (Portainer, NAS). Set true behind HTTPS / a TLS reverse proxy.
ENV LOUIS_COOKIE_SECURE=false
COPY --from=build /app/.output ./.output
COPY --from=build /app/package.json ./package.json
RUN mkdir -p /data/audio
EXPOSE 4000
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
CMD node -e "fetch('http://127.0.0.1:4000/api/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
CMD ["node", ".output/server/index.mjs"]