Architecture Symfony â Telaria
Vue d'ensemble de l'architecture applicative. Pas un guide d'installation â une carte de ce qui existe et pourquoi. Pour les guides d'installation des composants IA : voir
tutos/ia/.
Vue d'ensemble
Telaria est une application Symfony 7 dĂ©ployĂ©e en production. Elle a Ă©voluĂ© d'un monolithe vers une architecture en bundles rĂ©utilisables via un split progressif. L'application principale (telaria-app) est dĂ©sormais mince â elle assemble les bundles et gĂšre l'authentification.
telaria-app (mince) âââ tlr-symfony â socle gĂ©nĂ©rique (multisite, CMS, contact, Markdown) âââ tlr-rag â moteur RAG L0 (retrieval, embeddings, index) âââ tlr-codexia â produit doc-IA (Veille, Chat, Docs, Metrics, AppSettings) âââ tlr-mcp â serveur MCP L1 (protocole Model Context Protocol)
Chaque bundle est un dépÎt GitHub indépendant, versionné en SemVer, consommé via Composer (VCS ou Packagist privé).
Bundles â pĂ©rimĂštres
tlr-symfony â socle gĂ©nĂ©rique multisite
Package : tlr/symfony-bundle · ns : Tlr\Symfony\
Fournit :
- Multisite : résolution du site courant par host HTTP (
SiteResolver,SiteContext). Un seul déploiement Symfony sert N domaines avec des contenus distincts. - CMS moteur : entités
CmsContent,CmsPage, routes canoniques custom par page. - Markdown : rendu Markdown â HTML (service rĂ©utilisable).
- Contact : formulaire de contact avec rate limiter intégré.
- i18n : extraction automatique des chaĂźnes.
Couplage app â bundle : resolve_target_entities pour User, interfaces (Tlr\Symfony\Contract\*).
tlr-rag â cĆur RAG L0
Package : telaria/rag-bundle · ns : Telaria\Rag\
Fournit :
- Ingestion de documents Markdown (
app:rag:ingest) - Index vectoriel SQLite +
sqlite-vec(extension.sochargée par PHP 8.5) - Recherche kNN par cosinus (
app:rag:search) - Interface de retrieval consommée par
tlr-codexia(L2) - Microservice d'embeddings :
tlr-embeddings(Python,multilingual-e5-base, port 8001)
ZĂ©ro clĂ© IA en L0 â retrieval pur, pas de gĂ©nĂ©ration.
tlr-codexia â produit doc-IA L2
Package : tlr/codexia-bundle · ns : Tlr\Codexia\
Fournit : Veille · Chat · Docs · Metrics · AppSettings
- Veille agentique : scheduler â agents de curation â validation BO â sources scorĂ©es
- Chat documentaire : RAG + génération Claude (clé API requise)
- Docs : surface de documentation liée au corpus RAG
- Metrics : suivi de consommation IA par modÚle, coûts, alertes
- AppSettings : configuration applicative persistante (BDD)
Couplage : VeilleReaderInterface â User, require telaria/rag-bundle.
tlr-mcp â serveur MCP L1
Package : telaria/mcp-bundle · ns : Telaria\Mcp\
Fournit :
- Serveur MCP (Model Context Protocol) exposant les documents ingérés à Claude
- 3 outils :
list_docs,read_doc,search_docs - Auth par token opaque SHA-512, quotas par tenant et par outil
tools/list: auth optionnelle
Tourne en production. Un client Claude Desktop ou Cursor peut interroger le corpus via ce serveur.
Patterns Doctrine
Entités auto-mappées
Toutes les entités des bundles utilisent l'auto-mapping Doctrine (pas de fichiers XML/YAML) : zéro migration au bootstrap, couplage via interfaces.
Voters pour l'autorisation
Les rĂšgles d'accĂšs aux ressources sont encapsulĂ©es dans des Voters Symfony (RecipeVoter, etc.) â pas de @IsGranted hardcodĂ© sur les donnĂ©es de tiers.
Messenger (messages asynchrones)
Les tùches longues (ingest RAG, veille agentique) passent par Symfony Messenger : les handlers sont découplés des controllers, les workers systemd consomment la file.
Rate Limiting
Composant RateLimiter Symfony (politique token_bucket) sur :
- Formulaires de contact
- Endpoints API
resolve_target_entities
Couplage User â bundles via resolve_target_entities dans doctrine.yaml : les bundles ne dĂ©pendent pas de la classe App\Entity\User, uniquement de leurs interfaces.
Authentification & sécurité applicative
- SystĂšme de login Symfony Security (
form_login) - RĂŽles :
ROLE_USER,ROLE_ADMIN - Protection CSRF sur les suppressions (attribut
#[IsCsrfTokenValid]) - Tokens MCP : SHA-512, rotation possible via commande console
- Uploads : validation MIME réelle (
finfo), protection path traversal - Sessions :
cookie_secure=true,cookie_samesite=strict
Frontend
- Twig : templates, pas de framework JS Ă gouverner
- Stimulus (AssetMapper) : comportements JS ciblés
- Bootstrap : composants UI
- Choix délibérément sobre : la qualité d'implémentation comme différenciateur, pas le framework
Internationalisation
- Traductions en
translations/messages.fr.yamletmessages.en.yaml - Toutes les chaĂźnes UI passent par
{{ 'key'|trans }}â aucune chaĂźne en dur dans les templates - Commandes Symfony : messages flash traduits via le mĂȘme mĂ©canisme
Voir aussi
stack-production.mdâ versions et services en proddeployment.mdâ procĂ©dure d'installationtutos/ia/rag-bout-en-bout.mdâ intĂ©gration RAGtutos/ia/serveur-mcp-symfony.mdâ bundle MCPtutos/ia/microservice-embeddings-python.mdâ microservice embeddings