# ObsiGate — Environment variables # Copiez ce fichier en .env et modifiez les valeurs # Le fichier .env n'est JAMAIS commité (présent dans .gitignore) # Auth (décommenter pour activer) OBSIGATE_AUTH_ENABLED=true OBSIGATE_ADMIN_USER=admin OBSIGATE_ADMIN_PASSWORD=chab30 # DANGER : si OBSIGATE_AUTH_ENABLED=false, toute requête devient un admin # anonyme. Le serveur REFUSE de démarrer sur une adresse non-loopback # (ex. 0.0.0.0) sauf si l'on force l'opt-in ci-dessous. À réserver au local. # OBSIGATE_ALLOW_INSECURE=false # Sécurité des cookies (activer si derrière HTTPS) # OBSIGATE_SECURE_COOKIES=false # Tokens TTL en secondes # OBSIGATE_ACCESS_TOKEN_TTL=31536000000 # 1000 ans # OBSIGATE_REFRESH_TOKEN_TTL=604800 # Rate limiting # OBSIGATE_LOGIN_MAX_ATTEMPTS=10 # OBSIGATE_ACCOUNT_MAX_ATTEMPTS=10 # OBSIGATE_LOGIN_WINDOW_SECONDS=900 # Compteurs partagés/persistants (SQLite WAL, multi-workers) — défaut : mémoire. # OBSIGATE_RATELIMIT_DB=data/ratelimit.db # IP client derrière un reverse proxy (fait confiance à X-Forwarded-For) # OBSIGATE_TRUST_PROXY=false # Webhooks : sécurité SSRF # OBSIGATE_WEBHOOK_ALLOW_HTTP=false # autoriser http:// (défaut : HTTPS requis) # OBSIGATE_WEBHOOK_ALLOW_PRIVATE=false # autoriser les IP privées/boucle # Secret d'un webhook : OBSIGATE_WEBHOOK_SECRET_ # Watcher # OBSIGATE_WATCHER_ENABLED=true # OBSIGATE_WATCHER_USE_POLLING=false # OBSIGATE_WATCHER_POLLING_INTERVAL=5.0 # OBSIGATE_WATCHER_DEBOUNCE=2.0 # Ignored directories (séparés par des virgules) # OBSIGATE_IGNORED_DIRS=.obsidian,.trash,.git,__pycache__,node_modules,.obsigate-backup # Audit # OBSIGATE_AUDIT_MAX_SIZE=10485760 # Backup # OBSIGATE_BACKUP_DIR=.obsigate-backup # PDF (ROADMAP #74) # OBSIGATE_PDF_MAX_SIZE_MB=50 # PDFs plus volumineux = texte non indexé # OBSIGATE_PDF_EXTRACT_TIMEOUT=30 # secondes avant abandon de l'extraction # WebAuthn / MFA (ROADMAP #64) — par défaut rp_id/origines sont dérivés de la # requête (hôte exact, port inclus) : rien à configurer en accès direct. # À renseigner uniquement pour un accès via reverse-proxy sous un autre nom # (avec OBSIGATE_TRUST_PROXY=true pour X-Forwarded-Host/Proto) : # OBSIGATE_WEBAUTHN_RP_ID=obsigate.example.com # OBSIGATE_WEBAUTHN_RP_NAME=ObsiGate # OBSIGATE_WEBAUTHN_ORIGINS=https://obsigate.example.com # ── AI Provider Configuration ── # Définir au moins un provider pour activer les fonctionnalités AI dans l'éditeur # AI_DEFAULT_PROVIDER=deepseek # deepseek | openrouter | gemini # DeepSeek (recommandé, bon marché) DEEPSEEK_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DEEPSEEK_MODEL=deepseek-chat # OpenRouter (accès à plusieurs modèles) # OPENROUTER_API_KEY=sk-or-v1-... # OPENROUTER_MODEL=openai/gpt-4o-mini # Google Gemini # GEMINI_API_KEY=AIza... # GEMINI_MODEL=gemini-2.0-flash # ── Assistant IA — recherche web (outil web_search) ── # Instance SearXNG auto-hébergée (aucune clé API requise) # OBSIGATE_SEARXNG_URL=https://search.dracodev.net # Chaîne de repli sans clé (DuckDuckGo puis Bing) si SearXNG ne remonte rien # OBSIGATE_WEB_FALLBACK=1 # OBSIGATE_WEB_TIMEOUT=10 # Fournisseurs à clé (#92), essayés avant SearXNG — injecter via Infisical en prod # OBSIGATE_TAVILY_API_KEY= # OBSIGATE_BRAVE_API_KEY= # OBSIGATE_SERPAPI_API_KEY= # OBSIGATE_EXA_API_KEY= # Ordre des fournisseurs (sinon : clés présentes puis SearXNG puis replis) # OBSIGATE_WEB_PROVIDERS=brave,searxng # Réessais réseau (backoff maison) + cache SQLite des résultats web # OBSIGATE_WEB_RETRY=1 # OBSIGATE_WEB_CACHE_TTL=900 # secondes ; 0 = cache désactivé # Rendu dynamique (pages SPA) — dépendance optionnelle : # pip install playwright && playwright install chromium # ── Assistant IA — sources connectées (Gitea / GitHub) ── # OBSIGATE_GITEA_URL=https://git.example.net # OBSIGATE_GITEA_TOKEN= # OBSIGATE_GITHUB_TOKEN=