# 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 : OCR cloud bloqués, browse roots confinés, # entity_extractor désactivé (sauf allowlist), rate limit par IP. # # NB : docker-compose.yml force ``PICARONES_PUBLIC_MODE=1`` PAR DÉFAUT # (fail-closed). Mettre ``0`` ici uniquement pour un déploiement # institutionnel contrôlé (derrière SSO + reverse-proxy TLS). 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`` et ``/api/reports`` autorisent. Surcharge # le défaut. PICARONES_BROWSE_ROOTS= # Allowlist (séparateur virgule) des dotted paths d'extracteurs NER # autorisés via le champ ``entity_extractor`` du payload web. # Vide = le champ déclenche un import+appel dynamique : fail-closed # (refusé en mode public, toléré seulement pour l'opérateur local). # Renseigner explicitement en institutionnel, ex : # monpkg.ner:SpacyExtractor,autrepkg.ner:Fn PICARONES_ENTITY_EXTRACTOR_ALLOWLIST= # ────────────────────────────────────────────────────────────────── # docker-compose — réseau & images # ────────────────────────────────────────────────────────────────── # Interface de bind du port hôte (docker-compose.yml). # Défaut fail-closed : 127.0.0.1 (accessible uniquement en local). # Mettre ``0.0.0.0`` pour exposer délibérément (derrière TLS/proxy). PICARONES_BIND=127.0.0.1 # Image Ollama (docker-compose.yml, profil ``ollama``). # Défaut : ollama/ollama:latest. Épingler une version pour la # reproductibilité institutionnelle, ex : OLLAMA_IMAGE=ollama/ollama:0.3.14 OLLAMA_IMAGE= # 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=