File size: 9,573 Bytes
7d5b986
fc30527
 
 
 
 
 
 
 
 
7d5b986
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fc30527
7d5b986
fc30527
 
7d5b986
53f4d56
 
 
1a47738
 
 
 
 
fc30527
 
7d5b986
 
 
 
 
 
fc30527
7d5b986
 
 
 
 
 
 
 
 
 
 
 
 
 
fc30527
 
 
53f4d56
 
fc30527
 
53f4d56
 
101e6ba
 
 
 
53f4d56
 
 
 
 
 
 
 
 
 
 
 
b0f08c7
 
 
53f4d56
 
fc30527
3858bc7
 
fc30527
3858bc7
fc30527
 
 
3858bc7
1a47738
 
 
 
 
3858bc7
 
 
 
fc30527
3858bc7
 
 
 
fc30527
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0c80c8c
 
 
 
 
 
 
fc30527
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# 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 <N>`` 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=