Compose : service remotion-renderer pour le rendu des Reels

Le rendu Remotion tourne dans son propre conteneur Node ; l'application
Rust le joint par REMOTION_RENDERER_URL. Ancien script de pré-bundle
retiré (le service pré-bundle lui-même à la construction).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013qMexTfVRaegbPAgsagCAJ
This commit is contained in:
Claude committed 2026-10-12 17:37:32 +00:00
1 parent 2bba946f34
commit 52833317e6
3 files changed
+24 -27

No files matched your search

+1
View File
@@ -1,5 +1,6 @@
# Dépendances
node_modules
**/node_modules
npm-debug.log
# Fichiers de build
+23 -2
View File
@@ -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:
-25
View File
@@ -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);
});