# Configuration de la base de données PostgreSQL PGDATABASE=socialflow PGUSER=socialflow PGPASSWORD=changeme PGPORT=4523 PGHOST=postgres # URL de connexion complète (générée automatiquement dans Docker) DATABASE_URL=postgresql://socialflow:changeme@postgres:4523/socialflow # Configuration de l'application PORT=5555 NODE_ENV=production # URL publique de l'application, telle que vue par le navigateur. # En production, mettez le vrai domaine (ex. https://socialflow.exemple.fr) : # les URI de redirection OAuth (Facebook/TikTok) en découlent. # Laissée vide derrière un reverse proxy, elle est déduite des en-têtes # X-Forwarded-Proto / X-Forwarded-Host. APP_URL=http://localhost:5555 # Clé secrète pour les sessions (CHANGEZ CETTE VALEUR) SESSION_SECRET=your-secret-key-change-me-to-random-string # Clé de chiffrement pour les tokens Facebook/Instagram (OBLIGATOIRE en production) # Générer avec: openssl rand -hex 32 ENCRYPTION_KEY=your-32-byte-hex-key-here # Clé API OpenRouter pour la génération de texte IA # Obtenez votre clé sur https://openrouter.ai/ OPENROUTER_API_KEY=your-openrouter-api-key-here # Configuration MinIO (stockage des médias, remplace Cloudinary) # MINIO_ENDPOINT = URL interne Docker (ex: http://minio:9000) # MINIO_PUBLIC_URL = URL publique pour accéder aux fichiers (ex: https://media.example.com) MINIO_ENDPOINT=http://minio:9000 MINIO_PUBLIC_URL=https://media.example.com # ========================================== # FACEBOOK (connexion des pages et renouvellement des jetons) # ========================================== # Identifiants de votre application sur https://developers.facebook.com # Ils peuvent aussi être saisis dans l'application (Paramètres → Facebook), # ce qui est prioritaire sur ces variables. # Sans eux, les jetons de page doivent être collés et remplacés à la main. # FACEBOOK_APP_ID= # FACEBOOK_APP_SECRET= # # URI de redirection OAuth à déclarer chez Facebook. # Par défaut : ${APP_URL}/api/facebook/callback, ou le domaine vu par le # reverse proxy quand APP_URL n'est pas défini. # FACEBOOK_REDIRECT_URI= # # Permissions demandées à l'autorisation. Défaut : pages_show_list, # pages_manage_posts, pages_read_engagement, pages_manage_engagement, # read_insights, business_management, instagram_basic, instagram_content_publish # FACEBOOK_SCOPES= # # Version de la Graph API utilisée pour l'OAuth (défaut : v19.0). # FACEBOOK_GRAPH_VERSION= # Optionnel: Configuration Instagram API # INSTAGRAM_APP_ID= # INSTAGRAM_APP_SECRET= # ========================================== # TIKTOK (publication des reels) # ========================================== # Identifiants de votre application sur https://developers.tiktok.com # Ils peuvent aussi être saisis dans l'application (Paramètres → TikTok), # ce qui est prioritaire sur ces variables. # TIKTOK_CLIENT_KEY= # TIKTOK_CLIENT_SECRET= # # URL de redirection OAuth à déclarer chez TikTok. # Par défaut : ${APP_URL}/api/tiktok/callback, ou le domaine vu par le # reverse proxy quand APP_URL n'est pas défini. # TIKTOK_REDIRECT_URI= # # Scopes demandés à l'autorisation (défaut : user.info.basic,video.publish). # "video.publish" nécessite que l'application ait passé l'audit TikTok ; # sans audit, les vidéos publiées restent privées. # TIKTOK_SCOPES= # ========================================== # MENTIONS LÉGALES # ========================================== # Affichées sur les pages publiques /terms et /privacy, dont TikTok exige # les URLs pour l'audit de l'application développeur. # # L'identité de la société exploitante est déjà la valeur par défaut : seule # l'adresse de contact doit obligatoirement être renseignée ici, le RGPD # imposant un point de contact pour l'exercice des droits. LEGAL_CONTACT_EMAIL= # Surcharges facultatives (utiles si l'outil est exploité par une autre société) # LEGAL_COMPANY_NAME= # LEGAL_TRADE_NAME= # LEGAL_COMPANY_LEGAL_FORM= # LEGAL_COMPANY_RCS= # LEGAL_COMPANY_ADDRESS= # ========================================== # API EXTERNE # ========================================== # Clé d'accès pour l'API externe /api/v1/* # Générer avec: openssl rand -hex 32 EXTERNAL_API_KEY=your-secure-random-key-here # ========================================== # REELS : VOIX ET RENDU VIDÉO (service ffmpeg-api) # ========================================== # Clé partagée entre l'application et le service FFmpeg (CHANGEZ CETTE VALEUR). FFMPEG_API_KEY=change-me-ffmpeg-key # # Clé Google AI Studio pour les voix Gemini (sinon : voix Edge, gratuite). # Peut aussi être saisie dans l'application, ce qui est prioritaire. GEMINI_API_KEY= # # Modèle Gemini TTS (défaut : gemini-2.5-flash-preview-tts ; repli automatique # sur celui-ci si le modèle choisi n'existe pas). # GEMINI_TTS_MODEL= # # Stabilité de la voix Gemini : température basse et graine fixe donnent la # même intonation d'une génération à l'autre ; chaque lecture est réécoutée et # régénérée (jusqu'à GEMINI_TTS_ATTEMPTS fois) si des mots manquent. # GEMINI_TTS_TEMPERATURE=0.3 # GEMINI_TTS_SEED=20260928 # GEMINI_TTS_ATTEMPTS=3 # # Modèle Whisper utilisé pour caler les sous-titres mot à mot sur la voix # (tiny, base, small). Choisi à la construction de l'image : changer la valeur # demande de reconstruire ffmpeg-api. # WHISPER_MODEL=base # # Voix Qwen3-TTS : gratuite, française, sans quota. Le plus simple : l'installer # sur un serveur avec carte graphique NVIDIA (qwen-tts/docker-compose.gpu.yml, # ex. Unraid) puis régler l'adresse dans Paramètres → Qwen TTS. # Sinon, service CPU sur ce serveur (lent : 5 à 7 fois la durée de la voix) : # docker compose --profile qwen-local up -d avec QWEN_TTS_URL=http://qwen-tts:8001 # QWEN_TTS_URL= # Modèle choisi à la construction de l'image : # - Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice (défaut) : ton et émotion pilotés ; # - Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice : ~30 % plus rapide, moins expressif. # QWEN_TTS_MODEL=Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice # Clonage des voix déposées dans qwen-tts/voices (vide pour désactiver). # QWEN_TTS_CLONE_MODEL=Qwen/Qwen3-TTS-12Hz-0.6B-Base # QWEN_TTS_THREADS=0 # QWEN_TTS_MEMORY=10g # # Moteur de rendu des Reels vidéo : # - remotion (défaut) : sous-titres animés, logo et effet de fin identiques à # l'aperçu affiché dans l'application ; ~30 à 60 s pour un Reel de 30 s ; # - ffmpeg : plus rapide (~10 s), sous-titres karaoké classiques. # REEL_RENDERER=remotion # # Onglets Chromium utilisés en parallèle par Remotion (défaut : moitié des cœurs). # Réduisez-le si le serveur manque de mémoire. # RENDER_CONCURRENCY=