diff --git a/.dockerignore b/.dockerignore index 14de69c..3791c3a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,6 @@ # Dépendances node_modules +**/node_modules npm-debug.log # Fichiers de build diff --git a/docker-compose.yml b/docker-compose.yml index e1003ab..63be013 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -55,8 +55,8 @@ services: # Rendu des Reels vidéo : remotion (sous-titres animés, identique à # l'aperçu) ou ffmpeg (plus rapide, sous-titres classiques) REEL_RENDERER: ${REEL_RENDERER:-remotion} - # Onglets Chromium en parallèle pour Remotion (défaut : moitié des cœurs) - RENDER_CONCURRENCY: ${RENDER_CONCURRENCY:-} + # Service de rendu Remotion (conteneur Node dédié, même clé que FFmpeg) + REMOTION_RENDERER_URL: http://remotion-renderer:8100 networks: - internal - nginx_default @@ -70,6 +70,27 @@ services: - logos_uploads:/app/uploads/logos - stories_uploads:/app/uploads/stories + # Rendu Remotion des Reels (sous-titres animés, logo, effet de fin) + remotion-renderer: + build: + context: . + dockerfile: remotion-service/Dockerfile + image: socialflow-remotion-renderer:latest + pull_policy: build + container_name: socialflow-remotion + restart: unless-stopped + environment: + API_KEY: ${FFMPEG_API_KEY:-socialflow-secret-ffmpeg-key} + PORT: 8100 + # Onglets Chromium par rendu (défaut : moitié des cœurs) + RENDER_CONCURRENCY: ${RENDER_CONCURRENCY:-} + MAX_PARALLEL_RENDERS: 1 + shm_size: 1gb + networks: + - internal + expose: + - "8100" + # Service FFmpeg dédié ffmpeg-api: build: diff --git a/scripts/prebundle-remotion.mjs b/scripts/prebundle-remotion.mjs deleted file mode 100644 index cd10ecb..0000000 --- a/scripts/prebundle-remotion.mjs +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env node -// Pré-bundle des compositions Remotion pendant le build Docker : le cache -// Webpack est chaud, le premier rendu d'un utilisateur démarre plus vite. -// Même configuration que server/services/reels/remotionRenderer.ts. -import path from "node:path"; -import { fileURLToPath } from "node:url"; -import { bundle } from "@remotion/bundler"; - -const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); - -bundle({ - entryPoint: path.join(root, "client/src/remotion/index.ts"), - webpackOverride: (config) => ({ - ...config, - resolve: { - ...config.resolve, - alias: { ...(config.resolve?.alias ?? {}), "@shared": path.join(root, "shared") }, - }, - }), -}) - .then((location) => console.log("✅ Remotion pre-bundle OK:", location)) - .catch((error) => { - console.warn("⚠️ Remotion pre-bundle skipped:", error.message); - process.exit(0); - });