52 lines
2.8 KiB
Docker
52 lines
2.8 KiB
Docker
FROM node:lts-alpine
|
|
|
|
WORKDIR /app
|
|
|
|
# Version du plugin PO token (bgutil) : doit correspondre à l'image du service bgutil-provider (docker-compose.yml)
|
|
ARG BGUTIL_VERSION=2.0.1
|
|
|
|
# 1. Installer les dépendances système requises
|
|
# python3 : indispensable pour faire tourner yt-dlp (version zipimport, auto-actualisable avec -U)
|
|
# ffmpeg : seek YouTube (décodage du flux) et certains formats
|
|
# curl : pour télécharger yt-dlp et le plugin bgutil
|
|
RUN apk add --no-cache bash python3 ffmpeg curl
|
|
|
|
# 2. Installer yt-dlp (dernière version officielle, build zipimport : inclut yt-dlp-ejs pour les défis JS)
|
|
# On le place dans /usr/local/bin pour qu'il soit accessible globalement dans le PATH
|
|
RUN curl -fL https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp && \
|
|
chmod a+rx /usr/local/bin/yt-dlp
|
|
|
|
# 3. Plugin bgutil : yt-dlp obtient des PO tokens auprès du service bgutil-provider
|
|
# (/etc/yt-dlp/plugins/ est lu par yt-dlp, les archives .zip y sont acceptées telles quelles)
|
|
RUN mkdir -p /etc/yt-dlp/plugins && \
|
|
curl -fL "https://github.com/Brainicism/bgutil-ytdlp-pot-provider/releases/download/${BGUTIL_VERSION}/bgutil-ytdlp-pot-provider.zip" \
|
|
-o /etc/yt-dlp/plugins/bgutil-ytdlp-pot-provider.zip
|
|
|
|
# 4. Installation des dépendances Node.js
|
|
# youtube-dl-exec téléchargerait un second yt-dlp (build glibc, inutilisable sous Alpine) : inutile, celui du PATH est utilisé
|
|
ENV YOUTUBE_DL_SKIP_DOWNLOAD=true
|
|
COPY package*.json ./
|
|
RUN npm install
|
|
|
|
# 5. Copie du reste du code
|
|
# Voir .dockerignore : node_modules (binaires Windows), data/ (token, cookies, comptes), logs/ et .git
|
|
# ne sont PAS copiés dans l'image. data/ est fourni par le volume monté sur /app/data (docker-compose.yml) :
|
|
# config.json doit y être déposé avant le premier démarrage, sinon le bot crée une config vide et s'arrête.
|
|
# data/youtube/ (cookies YouTube, réglages, cache de yt-dlp) est créé au démarrage dans ce même volume.
|
|
COPY . .
|
|
# logs/ n'est plus copié : loguix crée son dossier de façon asynchrone et ouvre son fichier aussitôt,
|
|
# le dossier doit donc exister au démarrage (même sans volume monté sur /app/logs)
|
|
RUN mkdir -p /app/logs /app/data
|
|
|
|
EXPOSE 4000
|
|
|
|
# État de santé : route HTTP /health du serveur (port 4000, celui exposé ci-dessus)
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=60s --retries=3 \
|
|
CMD wget -qO- http://127.0.0.1:4000/health > /dev/null || exit 1
|
|
|
|
# Mise à jour de yt-dlp à chaque démarrage : une version obsolète provoque des erreurs 403
|
|
# (le bot la refait ensuite toutes les 24 h et après une série d'échecs, voir src/youtube/ytdlp.js)
|
|
# exec : node remplace sh et devient PID 1 (il reçoit SIGTERM pour un arrêt propre).
|
|
# Plus de nodemon en production : un crash termine le process et Docker relance le conteneur (restart: unless-stopped).
|
|
CMD ["sh", "-c", "yt-dlp -U || true; exec node src/main.js"]
|