mirror of
https://github.com/R0m1k3/Socialflow.git
synced 2026-10-11 17:26:45 +02:00
- qwen-tts : GPU NVIDIA détecté automatiquement (bfloat16), image CUDA 12.8 (RTX 50xx comprises) via TORCH_VARIANT=cu128, docker-compose.gpu.yml dédié (clé obligatoire, choix de la carte) et guide d'installation Unraid. - Paramètres → « Qwen TTS (voix locale) » : adresse + clé du service, test de connexion (modèle et carte graphique affichés), stockés en base (app_config.qwen_tts_url / qwen_tts_api_key) et transmis à ffmpeg-api à chaque voix ; QWEN_TTS_URL reste un défaut. - Le service qwen-tts CPU du docker-compose principal devient optionnel (profil qwen-local). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Upu97wMmsRkBoj6iVM4rH6
154 lines
5.1 KiB
YAML
154 lines
5.1 KiB
YAML
version: '3.8'
|
|
|
|
services:
|
|
# Base de données PostgreSQL
|
|
postgres:
|
|
image: postgres:16-alpine
|
|
container_name: socialflow-db
|
|
restart: unless-stopped
|
|
ports:
|
|
- "4523:4523"
|
|
environment:
|
|
POSTGRES_DB: ${PGDATABASE:-socialflow}
|
|
POSTGRES_USER: ${PGUSER:-socialflow}
|
|
POSTGRES_PASSWORD: ${PGPASSWORD:-changeme}
|
|
PGPORT: 4523
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
networks:
|
|
- internal
|
|
- nginx_default
|
|
healthcheck:
|
|
test: [ "CMD-SHELL", "pg_isready -U ${PGUSER:-socialflow}" ]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
# Application Social Flow
|
|
app:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
# Image construite sur place : nom figé pour ne pas dépendre du nom de la
|
|
# stack, et `pull_policy: build` pour que Docker la reconstruise au lieu
|
|
# d'aller la chercher sur Docker Hub (où elle n'existe pas).
|
|
image: socialflow-app:latest
|
|
pull_policy: build
|
|
container_name: socialflow-app
|
|
restart: unless-stopped
|
|
environment:
|
|
NODE_ENV: production
|
|
PORT: 5555
|
|
DATABASE_URL: postgresql://${PGUSER:-socialflow}:${PGPASSWORD:-changeme}@postgres:4523/${PGDATABASE:-socialflow}
|
|
OPENROUTER_API_KEY: ${OPENROUTER_API_KEY}
|
|
GEMINI_API_KEY: ${GEMINI_API_KEY}
|
|
SESSION_SECRET: ${SESSION_SECRET:-your-secret-key-change-me}
|
|
# URL publique (ex. https://socialflow.exemple.fr). Laissée vide, elle est
|
|
# déduite des en-têtes du reverse proxy — ne jamais forcer localhost ici,
|
|
# les URI de redirection OAuth (Facebook/TikTok) en dépendent.
|
|
APP_URL: ${APP_URL:-}
|
|
# URL interne Docker pour que ffmpeg-api puisse télécharger les fichiers audio
|
|
INTERNAL_APP_URL: http://socialflow-app:5555
|
|
# Configuration FFmpeg Service
|
|
FFMPEG_API_URL: http://ffmpeg-api:8000
|
|
FFMPEG_API_KEY: ${FFMPEG_API_KEY:-socialflow-secret-ffmpeg-key}
|
|
# 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:-}
|
|
networks:
|
|
- internal
|
|
- nginx_default
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
volumes:
|
|
- encryption_key:/app/.encryption-key-data
|
|
- audio_uploads:/app/uploads/audio
|
|
- media_uploads:/app/uploads/media
|
|
- logos_uploads:/app/uploads/logos
|
|
- stories_uploads:/app/uploads/stories
|
|
command: npm run start
|
|
|
|
# Service FFmpeg dédié
|
|
ffmpeg-api:
|
|
build:
|
|
context: ./ffmpeg-service
|
|
dockerfile: Dockerfile
|
|
args:
|
|
# Modèle Whisper (calage des sous-titres) intégré à l'image
|
|
WHISPER_MODEL: ${WHISPER_MODEL:-base}
|
|
image: socialflow-ffmpeg-api:latest
|
|
pull_policy: build
|
|
container_name: socialflow-ffmpeg
|
|
restart: unless-stopped
|
|
environment:
|
|
API_KEY: ${FFMPEG_API_KEY:-socialflow-secret-ffmpeg-key}
|
|
GEMINI_TTS_MODEL: ${GEMINI_TTS_MODEL:-gemini-2.5-flash-preview-tts}
|
|
# Service Qwen TTS par défaut. Normalement réglé dans l'application
|
|
# (Paramètres → Qwen TTS, ex. serveur GPU Unraid) ; pour le service local
|
|
# ci-dessous : QWEN_TTS_URL=http://qwen-tts:8001
|
|
QWEN_TTS_URL: ${QWEN_TTS_URL:-}
|
|
QWEN_TTS_API_KEY: ${FFMPEG_API_KEY:-socialflow-secret-ffmpeg-key}
|
|
networks:
|
|
- internal
|
|
expose:
|
|
- "8000"
|
|
|
|
# Voix Qwen3-TTS sur ce serveur, en CPU (optionnel, lent : 5 à 7 fois la
|
|
# durée de la voix sur 4 cœurs). Sur un serveur GPU, préférez
|
|
# qwen-tts/docker-compose.gpu.yml. Démarrage : docker compose --profile qwen-local up -d
|
|
qwen-tts:
|
|
profiles: ["qwen-local"]
|
|
build:
|
|
context: ./qwen-tts
|
|
dockerfile: Dockerfile
|
|
args:
|
|
# 1.7B : ton et émotion pilotés par consigne ; 0.6B : ~30 % plus rapide
|
|
QWEN_TTS_MODEL: ${QWEN_TTS_MODEL:-Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice}
|
|
# Clonage des voix déposées dans qwen-tts/voices (vide : désactivé)
|
|
QWEN_TTS_CLONE_MODEL: ${QWEN_TTS_CLONE_MODEL-Qwen/Qwen3-TTS-12Hz-0.6B-Base}
|
|
image: socialflow-qwen-tts:latest
|
|
pull_policy: build
|
|
container_name: socialflow-qwen-tts
|
|
restart: unless-stopped
|
|
environment:
|
|
API_KEY: ${FFMPEG_API_KEY:-socialflow-secret-ffmpeg-key}
|
|
# Threads de calcul (0 : tous les cœurs)
|
|
QWEN_TTS_THREADS: ${QWEN_TTS_THREADS:-0}
|
|
volumes:
|
|
# Voix clonées ajoutables sans reconstruire l'image
|
|
- ./qwen-tts/voices:/app/voices:ro
|
|
networks:
|
|
- internal
|
|
expose:
|
|
- "8001"
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
memory: ${QWEN_TTS_MEMORY:-10g}
|
|
|
|
volumes:
|
|
postgres_data:
|
|
driver: local
|
|
encryption_key:
|
|
driver: local
|
|
audio_uploads:
|
|
driver: local
|
|
media_uploads:
|
|
driver: local
|
|
logos_uploads:
|
|
driver: local
|
|
stories_uploads:
|
|
driver: local
|
|
|
|
networks:
|
|
# Réseau interne pour la communication DB <-> App
|
|
internal:
|
|
driver: bridge
|
|
|
|
# Réseau externe pour nginx reverse proxy
|
|
nginx_default:
|
|
external: true
|