# Variables d'environnement supportées par Picarones. # # Copier en ``.env`` et remplir selon votre déploiement : # # cp .env.example .env # editor .env # # ``docker-compose.yml`` lit ``.env`` automatiquement. Pour un appel # direct ``docker run``, ajouter ``--env-file .env``. # ════════════════════════════════════════════════════════════════════ # Mode de déploiement # ════════════════════════════════════════════════════════════════════ # # Picarones supporte deux modes de déploiement, chacun avec un profil # de sécurité distinct : # # ┌─────────────────────┬──────────────────────────────────────────────┐ # │ Mode public │ HuggingFace Space, démo en ligne, anonyme │ # │ │ → ``PICARONES_PUBLIC_MODE=1`` │ # │ │ → CSRF désactivé (anonyme) │ # │ │ → cloud OCR/LLM bloqués │ # │ │ → rate limit par IP │ # ├─────────────────────┼──────────────────────────────────────────────┤ # │ Mode institutionnel │ Déploiement BnF, université, archive │ # │ │ → derrière SSO (Shibboleth/CAS/OIDC) │ # │ │ → ``PICARONES_CSRF_REQUIRED=1`` │ # │ │ → ``PICARONES_CSRF_SECRET=<32 bytes hex>`` │ # │ │ OBLIGATOIRE — l'app refuse de démarrer │ # │ │ sans secret (Sprint S6.9). │ # └─────────────────────┴──────────────────────────────────────────────┘ # ────────────────────────────────────────────────────────────────── # Mode public (HuggingFace Space, démo) # ────────────────────────────────────────────────────────────────── # Active le mode public. Valeurs acceptées : ``1``, ``true``, ``yes``. # En mode public : pas de CSRF, OCR cloud bloqués, rate limit par IP. PICARONES_PUBLIC_MODE= # ────────────────────────────────────────────────────────────────── # Mode institutionnel (production) # ────────────────────────────────────────────────────────────────── # Active la protection CSRF (double-submit cookie + HMAC). # OBLIGATOIRE en production, en complément d'un SSO. PICARONES_CSRF_REQUIRED= # Secret HMAC pour signer les tokens CSRF. # OBLIGATOIRE si ``PICARONES_CSRF_REQUIRED=1`` — sans secret stable, # tous les tokens sont invalidés à chaque redémarrage du process, # ce qui dégrade gravement l'UX (toutes les sessions actives reçoivent # 403 jusqu'à reload manuel). # # Générer une fois et persister dans le secret manager institutionnel # (Vault / AWS Secrets Manager / Kubernetes Secret) : # # openssl rand -hex 32 # # Ne JAMAIS committer ce secret. Ne JAMAIS le mettre dans un Dockerfile # ni dans un docker-compose.yml versionné. PICARONES_CSRF_SECRET= # Liste de chemins (séparateur : ``:`` Unix / ``;`` Windows) que # ``/api/corpus/browse`` autorise. Surcharge le défaut. PICARONES_BROWSE_ROOTS= # Plafonds applicatifs. PICARONES_MAX_UPLOAD_MB=100 PICARONES_MAX_CONCURRENT_JOBS=2 PICARONES_RATE_LIMIT_PER_HOUR=5 # Surcharge la Content-Security-Policy si nécessaire. PICARONES_CSP= # ────────────────────────────────────────────────────────────────── # Clés API LLM (optionnel — uniquement si vous utilisez un pipeline LLM) # ────────────────────────────────────────────────────────────────── OPENAI_API_KEY= ANTHROPIC_API_KEY= MISTRAL_API_KEY= # ────────────────────────────────────────────────────────────────── # Clés API OCR cloud (optionnel) # ────────────────────────────────────────────────────────────────── GOOGLE_APPLICATION_CREDENTIALS= AZURE_DOC_INTEL_ENDPOINT= AZURE_DOC_INTEL_KEY= # ────────────────────────────────────────────────────────────────── # Réseau / port d'exposition. # # NB : variable utilisée UNIQUEMENT par ``docker-compose.yml`` pour # mapper le port hôte (cf. ligne ``${PICARONES_PORT:-7860}:7860``). # Le code Python ne la lit pas — pour changer le port serveur, # utiliser ``picarones serve --port `` ou modifier le CMD du # Dockerfile. # ────────────────────────────────────────────────────────────────── PICARONES_PORT=7860 # ────────────────────────────────────────────────────────────────── # Persistance (Sprint A8) — chemin de la base SQLite des jobs. # Override pour sortir du conteneur (volume monté). # ────────────────────────────────────────────────────────────────── PICARONES_JOBS_DB=