2.2 KiB
2.2 KiB
YouTube Downloader (Flask + nginx)
Servizio minimale per scaricare video o solo audio da YouTube tramite interfaccia web. Basato su Flask + yt-dlp dietro nginx, con download disponibili tramite browser.
Stack
- Python 3.11, Flask, gunicorn
- yt-dlp + ffmpeg per download e conversione
- nginx per servire la UI statica e fare proxy verso l'API
- Docker Compose per orchestrare servizi e volume condiviso dei file
Prerequisiti
- Docker + Docker Compose
Configurazione ambiente
Variabili in .env (già fornito un esempio):
| Variabile | Default | Descrizione |
|---|---|---|
WEB_PORT |
8080 | Porta esposta pubblicamente da nginx (UI + API) |
API_PORT |
5000 | Porta interna dell'API Flask (dietro nginx) |
MAX_DURATION_SECONDS |
5400 | Durata massima del video in secondi (default 1h30) |
Avvio rapido
docker compose up --build
Poi apri: http://localhost:8080 (o la WEB_PORT impostata).
Uso
- Inserisci un link YouTube.
- Premi "Carica formati" per vedere risoluzioni/video e formati audio disponibili (yt-dlp).
- Scegli video o solo audio, risoluzione/formato desiderato e avvia "Scarica".
- Il file generato è servito da nginx in
/downloads/<nome-file>e il link è mostrato nell'interfaccia.
API (dietro nginx)
POST /api/infobody:{ "url": "..." }→ restituisce formati video/audio e durata (rispetta limiteMAX_DURATION_SECONDS).POST /api/downloadbody:{ url, mode: "video"|"audio", format_id?, audio_ext? }→ scarica e restituisce{ file, url }con link al file.GET /api/health→ stato servizio.
Volumi e file
- I file scaricati vivono nel volume
downloadsmontato su/downloadsin entrambi i container. Rimangono finché non si rimuove il volume (docker compose down -v).
Note e limiti
- Il limite durata è bloccante: se il video supera
MAX_DURATION_SECONDS, l'API risponde 400. - Non è implementato un sistema di queue o rate limiting: pensato per uso singolo/privato.
- yt-dlp segue le policy di YouTube; l'uso è responsabilità dell'utente.
Pulizia
- Fermare:
docker compose down - Fermare e rimuovere volume download:
docker compose down -v