Refactorer Configuration : extraire les guides vers les sous-pages Guide-*

2026-09-08 19:38:30 +02:00
parent e071c2ecfb
commit 901c0a3dba

113
Configuration.md Normal file

@@ -0,0 +1,113 @@
# Configuration
Configuration via `pydantic-settings` depuis les variables d'environnement ou un fichier `.env`. Copiez `.env.example` vers `.env` pour démarrer. Les secrets utilisent `SecretStr` et sont masqués dans les logs.
## Principe
Les paramètres sont chargés automatiquement depuis les variables d'environnement ou un fichier `.env` à la racine du projet. Le fichier `.env` n'est **jamais** versionné (couvert par `.gitignore`).
## Variables Pronote
| Variable | Description | Valeur par défaut | Type |
|----------|-------------|--------------------|------|
| `PRONOTE_ICAL_URL` | URL du flux iCal Pronote (contient `icalsecurise`) | obligatoire si source `ical` | SecretStr |
| `PRONOTE_URL` | URL de la page Pronote pour `pronotepy` | obligatoire si source `pronotepy` | str |
| `PRONOTE_ACCOUNT_TYPE` | Type de compte Pronote | `parent` | str |
| `PRONOTE_USERNAME` | Identifiant Pronote | obligatoire si source `pronotepy` | str |
| `PRONOTE_PASSWORD` | Mot de passe Pronote | obligatoire si source `pronotepy` | SecretStr |
| `PRONOTE_ENT` | Slug ENT (résolu vers `pronotepy.ent`) | optionnel | str |
| `PRONOTE_AGENDA_SOURCE` | Source pour l'agenda | `auto` | Literal["auto", "ical", "pronotepy"] |
| `PRONOTE_HOMEWORK_SOURCE` | Source pour les devoirs | `auto` | Literal["auto", "ical", "pronotepy"] |
| `PRONOTE_MESSAGES_SOURCE` | Source pour les messages | `pronotepy` | Literal["pronotepy"] |
> **Note** : `PRONOTE_URL` et `PRONOTE_ICAL_URL` sont deux contrats distincts. L'un ne doit **jamais** être déduit de l'autre.
📖 **[Guide Pronote](Guide-Pronote)** — Comment obtenir l'URL iCal, l'URL de connexion, configurer l'ENT, choisir les sources et des exemples complets.
## Variables CalDAV
| Variable | Description | Valeur par défaut | Type |
|----------|-------------|--------------------|------|
| `CALDAV_URL` | URL du serveur CalDAV | obligatoire | SecretStr |
| `CALDAV_USERNAME` | Identifiant CalDAV | obligatoire | str |
| `CALDAV_PASSWORD` | Mot de passe CalDAV | obligatoire | SecretStr |
| `CALDAV_CALENDAR_PATH` | Chemin du calendrier sur le serveur | `/pronote-sync/` | str |
| `CALDAV_ALLOW_INSECURE_HTTP` | Autoriser HTTP non sécurisé (localhost uniquement) | `false` | bool |
📖 **[Guide CalDAV](Guide-CalDAV)** — Comment trouver l'URL CalDAV sur Nextcloud, Radicale ou Baïkal, créer des identifiants et distinguer l'URL du serveur du chemin du calendrier.
## Fenêtre de synchronisation
| Variable | Description | Valeur par défaut | Type |
|----------|-------------|--------------------|------|
| `SYNC_PAST_DAYS` | Nombre de jours dans le passé à synchroniser | `7` | int |
| `SYNC_FUTURE_DAYS` | Nombre de jours dans le futur à synchroniser | `30` | int |
## Agenda théorique
| Variable | Description | Valeur par défaut | Type |
|----------|-------------|--------------------|------|
| `THEORETICAL_AGENDA_PATH` | Chemin vers le fichier JSON de l'agenda théorique | `None` | str \| None |
| `SCHOOL_HOLIDAYS_PATH` | Chemin vers le fichier JSON des vacances scolaires | `None` | str \| None |
| `THEORETICAL_WEEK_ANCHOR_DATE` | Date de référence pour la parité des semaines | `None` | date \| None |
| `THEORETICAL_WEEK_ANCHOR_TYPE` | Parité de la semaine de référence | `None` | Literal["even", "odd"] \| None |
## Variables XMPP
| Variable | Description | Valeur par défaut | Type |
|----------|-------------|--------------------|------|
| `XMPP_ENABLED` | Activer la notification XMPP | `false` | bool |
| `XMPP_JID` | Identifiant XMPP (ex: `user@example.com`) | obligatoire si activé | str |
| `XMPP_PASSWORD` | Mot de passe XMPP | obligatoire si activé | SecretStr |
| `XMPP_HOST` | Hôte XMPP | `""` | str |
| `XMPP_PORT` | Port XMPP | `5222` | int |
| `XMPP_TO` | Destinataire XMPP | obligatoire si activé | str |
| `XMPP_RESOURCE` | Ressource XMPP | `pronote-sync` | str |
| `XMPP_USE_TLS` | Utiliser TLS pour la connexion | `true` | bool |
| `XMPP_TIMEOUT` | Délai d'attente en secondes | `30` | int |
📖 **[Guide XMPP](Guide-XMPP)** — Comment comprendre le JID, créer un compte XMPP, configurer l'hôte, le port et TLS.
## Variables IA
| Variable | Description | Valeur par défaut | Type |
|----------|-------------|--------------------|------|
| `AI_ENABLED` | Activer la synthèse IA | `false` | bool |
| `AI_PROVIDER` | Fournisseur IA | `openai` | Literal["openai", "litellm", "openai-compatible"] |
| `AI_BASE_URL` | URL de base de l'API IA | `None` | str \| None |
| `AI_API_KEY` | Clé API IA | `None` | SecretStr |
| `AI_MODEL` | Modèle IA | `None` | str \| None |
| `AI_ALLOW_INSECURE_HTTP` | Autoriser HTTP non sécurisé pour `openai-compatible` | `false` | bool |
> **Note** : Le fournisseur `openai-compatible` réutilise `OpenAISynthesisProvider` avec un `base_url` personnalisé. `AI_BASE_URL` et `AI_MODEL` sont requis pour ce fournisseur. L'URL doit utiliser `https` sauf si `AI_ALLOW_INSECURE_HTTP=true`. Les identifiants dans l'URL sont rejetés. Les paramètres sensibles dans la *query string* sont rejetés. Aucune manipulation automatique de `/v1` n'est effectuée. En cas de configuration invalide, la factory retourne `None` avec un avertissement (mode dégradé).
📖 **[Guide IA](Guide-IA)** — Comment obtenir une clé API pour OpenAI, OpenRouter, Ollama ou LiteLLM, et configurer le bon modèle.
## Variables Blog
| Variable | Description | Valeur par défaut | Type |
|----------|-------------|--------------------|------|
| `BLOG_ENABLED` | Activer la synchronisation du blog | `false` | bool |
| `BLOG_RSS_URL` | URL du flux RSS du blog | `https://blogpeda.ac-bordeaux.fr/cjeliote/?feed=rss2` | str |
📖 **[Guide Blog](Guide-Blog)** — Comment trouver l'URL du flux RSS d'un blog WordPress, SPIP ou Dotclear.
## Divers
| Variable | Description | Valeur par défaut | Type |
|----------|-------------|--------------------|------|
| `DRY_RUN` | Mode simulation (pas d'écriture) | `false` | bool |
| `LOG_LEVEL` | Niveau de log | `INFO` | str |
## Fichier .env
Pour créer votre fichier de configuration :
```bash
cp .env.example .env
# Éditer .env avec vos paramètres
```
> **Rappel** : Le fichier `.env` n'est **jamais** versionné. Utilisez `.env.example` comme modèle.
Voir aussi : [Sécurité](Sécurité) pour la gestion des secrets, [Déploiement](Déploiement) pour la configuration en production.