Files
NewTube/docker-compose/docker-compose.local.yml
T
bruno df53445efe feat(oauth): import favoris/abos Google (YouTube) et Twitch vers abonnements/likes
- Backend: server/oauth.mjs (auth URL, echange code, refresh, fetch
  subscriptions/likes Google, follows Twitch), table oauth_connections
  + migration, routes /api/oauth/:provider/{url,callback,preview,import},
  /api/oauth/{status,connections}
- Front: /library/import (connect, preview, import), service
  oauth-import, lien depuis Abonnements
- Config: GOOGLE_CLIENT_ID/SECRET/REDIRECT_URI, TWITCH_REDIRECT_URI,
  OAUTH_APP_BASE_URL documentes (.env.example, docker-compose),
  passthrough docker-compose.local.yml, roadmap README cochee
2026-09-26 18:47:02 -04:00

57 lines
2.4 KiB
YAML

# Installation locale — build de l'image depuis le repo, pas de registre.
# Usage: docker compose -f docker-compose/docker-compose.local.yml up -d --build
# Variables d'env lues dans docker-compose/.env (même répertoire).
services:
newtube:
build:
context: ..
dockerfile: docker/Dockerfile.origi
image: newtube-angular:latest
container_name: newtube
ports:
# Hôte 4200 -> conteneur 4000 (4000 reste libre pour le serveur de dev local)
- "${HOST_PORT:-4200}:4000"
environment:
- PORT=${PORT:-4000}
- NODE_ENV=${NODE_ENV:-production}
- JWT_SECRET=${JWT_SECRET:-dev-secret-change-me}
- ACCESS_TTL_MIN=${ACCESS_TTL_MIN:-15}
- REFRESH_TTL_DAYS=${REFRESH_TTL_DAYS:-2}
- REMEMBER_TTL_DAYS=${REMEMBER_TTL_DAYS:-30}
- YT_CACHE_TTL_MS=${YT_CACHE_TTL_MS:-1800000}
- GEMINI_API_KEY=${GEMINI_API_KEY}
- YOUTUBE_API_KEY=${YOUTUBE_API_KEY}
- YOUTUBE_API_KEYS=${YOUTUBE_API_KEYS}
- VIMEO_ACCESS_TOKEN=${VIMEO_ACCESS_TOKEN}
- TWITCH_CLIENT_ID=${TWITCH_CLIENT_ID}
- TWITCH_CLIENT_SECRET=${TWITCH_CLIENT_SECRET}
- TWITCH_REDIRECT_URI=${TWITCH_REDIRECT_URI}
- GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}
- GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET}
- GOOGLE_REDIRECT_URI=${GOOGLE_REDIRECT_URI}
- OAUTH_APP_BASE_URL=${OAUTH_APP_BASE_URL:-http://localhost:4200}
- HOST_PORT=${HOST_PORT:-4200}
- DOWNLOAD_PROVIDERS=${DOWNLOAD_PROVIDERS:-youtube,dailymotion,twitch,peertube,odysee,rumble}
- DOWNLOAD_MAX_CONCURRENT=${DOWNLOAD_MAX_CONCURRENT:-2}
# --- YouTube hybride (Steps 17-18) : innertube > scrape yt-dlp > API ---
- YT_SEARCH_MODE=${YT_SEARCH_MODE:-innertube-first}
- YT_SCRAPE_TTL_MS=${YT_SCRAPE_TTL_MS:-1800000}
- YT_DLP_TIMEOUT_MS=${YT_DLP_TIMEOUT_MS:-20000}
- YT_INNERTUBE_GL=${YT_INNERTUBE_GL:-FR}
- YT_INNERTUBE_HL=${YT_INNERTUBE_HL:-fr}
- YT_TRANSCRIPT_SOURCE=${YT_TRANSCRIPT_SOURCE:-innertube-first}
- YT_RELATED_TTL_MS=${YT_RELATED_TTL_MS:-3600000}
- YT_COOKIES_FILE=${YT_COOKIES_FILE:-}
- YT_PO_TOKEN=${YT_PO_TOKEN:-}
- YT_EGRESS_PROXY=${YT_EGRESS_PROXY:-}
- TZ=${TZ:-America/Montreal}
volumes:
# SQLite : volume nommé (locking FS bind monté Windows peu fiable)
- newtube-db:/app/db
# Téléchargements : bind sur le repo, accessibles depuis Windows
- ../tmp/downloads:/app/tmp/downloads
restart: unless-stopped
volumes:
newtube-db: