145 lines
6.2 KiB
Bash
145 lines
6.2 KiB
Bash
# 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 : true|false|auto (défaut : auto — Secure si la
|
||
# requête arrive en https, sinon pas de flag ; les navigateurs ignorent les
|
||
# cookies `Secure` en HTTP, ce qui casserait les logins en local).
|
||
# Derrière un reverse proxy qui termine TLS, auto suffit avec
|
||
# OBSIGATE_TRUST_PROXY=true (X-Forwarded-Proto honoré).
|
||
# OBSIGATE_SECURE_COOKIES=auto
|
||
|
||
# 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_<ID_WEBHOOK_EN_MAJUSCULES>
|
||
|
||
# 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=
|
||
|
||
# ── Fusion / dev-prod — URL publiques de l'écosystème (#223) ──
|
||
# Aucun nom public n'est figé dans le code : ces variables portent les
|
||
# URL des autres applications. Valeurs par défaut (si absentes) = noms
|
||
# OFFICIELS de la production. Depuis BUG-120, les URL sœurs se dérivent
|
||
# de l'hôte de l'agent (agent<SUFFIXE>.dracodev.net, lu via
|
||
# AGENT_EVENEMENTS_URL / DRACO_AGENT_URL) : en dev, rien d'autre à
|
||
# déclarer pour obtenir les noms en -dev. Une variable explicite
|
||
# reste prioritaire sur la dérivation, par exemple :
|
||
# DRACO_TIKTAK_URL=https://tiktak-dev.dracodev.net
|
||
# DRACO_AGENT_URL=https://agent.dracodev.net
|
||
# DRACO_OBSIGATE_URL=https://og.dracodev.net
|
||
# DRACO_FLOWDECK_URL=https://flowdeck.dracodev.net
|
||
# DRACO_TIKTAK_URL=https://tiktak.dracodev.net
|
||
# DRACO_KANBANTE_URL=https://kanbante.dracodev.net
|
||
# DRACO_GITEA_URL=https://git.dracodev.net
|
||
|
||
# ── Fusion — émission d'événements vers le service d'agents (#220) ──
|
||
# URL complète de réception ; à défaut, dérivée de DRACO_AGENT_URL.
|
||
# AGENT_EVENEMENTS_URL=https://agent.dracodev.net/api/v1/evenements
|
||
# AGENT_EVENEMENTS_CLE=<clé propre à ObsiGate, jamais commitée>
|
||
# AGENT_EVENEMENTS_DOMAINES={"NomDuVault": "famille"}
|
||
|
||
# ── Fusion — émettrice SSO draco_session (#216/#217) ──
|
||
# DRACO_SESSION_SECRET=<secret partagé, jamais commité>
|
||
# DRACO_SESSION_SECRET_PREV=<ancien secret, fenêtre de rotation>
|
||
# DRACO_SESSION_COOKIE_DOMAIN=.dracodev.net
|
||
# DRACO_SSO_MACHINE_KEY=<clé machine des révocations, jamais commitée>
|
||
|
||
# ── Coffre Secrets ObsiGate (Phases 1–2, voir docs/COFFRE-sauvegarde-restauration.md) ──
|
||
# Activation (défaut : désactivé — toutes les routes répondent 503 sinon) :
|
||
# OBSIGATE_SECRETS_ENABLED=true
|
||
# Clé maître 256 bits, base64 de 32 octets, rendue une seule fois par
|
||
# POST /api/coffres/admin/generer-kek ; à sauvegarder HORS dépôt, HORS note :
|
||
# OBSIGATE_KEK=<kek-base64-32-octets>
|
||
# … ou fichier 0600, hors dépôt et hors arborescence des vaults :
|
||
# OBSIGATE_KEK_FILE=/chemin/hors/depot/kek.txt
|
||
# Aucune autre variable ne doit contenir une valeur de secret du coffre.
|