# 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 (chemin local) met ``PICARONES_PUBLIC_MODE=1`` # par défaut. Mettre ``0`` uniquement pour un déploiement institutionnel # contrôlé (derrière SSO + reverse-proxy TLS). CSRF n'est PAS forcé par # le compose local (théâtre sans secret stable) — voir # docker-compose.prod.yml qui exige PICARONES_CSRF_SECRET. 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 entity_extractor est REFUSÉ côté web dans TOUS les # modes (import+appel dynamique = surface réseau trop puissante, # même hors mode public/derrière SSO). La CLI reste libre. # Renseigner explicitement pour autoriser des dotted paths précis : # 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. # MAX_UPLOAD_MB : plafond dur PAR fichier (streaming, rejet 413). # MAX_TOTAL_UPLOAD_MB : plafond dur CUMULÉ par requête d'upload. PICARONES_MAX_UPLOAD_MB=100 PICARONES_MAX_TOTAL_UPLOAD_MB=500 PICARONES_MAX_CONCURRENT_JOBS=2 PICARONES_RATE_LIMIT_PER_HOUR=5 # Attribut ``Secure`` des cookies (CSRF, langue). Vide = auto : # ``Secure`` UNIQUEMENT sur HuggingFace Space (HTTPS certain). # Découplé de PUBLIC_MODE : « mutualisé » n'implique pas « HTTPS » # (le compose local est public_mode=1 mais http://127.0.0.1). # Forcer ``1`` derrière un reverse-proxy TLS (fait par # docker-compose.prod.yml), ``0`` pour un débogage explicite. # NB : CSRF requis + cookies non-Secure + déploiement exposé # (HF Space / mode public) ⇒ refus de démarrage (config incohérente). PICARONES_SECURE_COOKIES= # Surcharge la Content-Security-Policy si nécessaire. # La CSP par défaut conserve ``script-src/style-src 'unsafe-inline'`` # (dette connue : ~30 handlers onclick inline dans la SPA, migration # vers addEventListener planifiée). En institutionnel durci, fournir # ici une CSP sans unsafe-inline une fois le frontend migré. 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=