Architecture Codexia
β οΈ Document partiellement remplacΓ©. Depuis le 2026-06-05, la vision d'ensemble, la taxonomie de nommage et l'architecture cible (multi-domaines, cΕur
tlr-symfony+ bundlestlr-*+ apptelaria) vivent dans le doc fondateurarchitecture-univers-telaria.md, qui fait autoritΓ©. Ce document reste utile pour le dΓ©tail technique de l'appcodexia(stack, infra serveur, sΓ©curitΓ©), mais ses sections Β« ModΓ¨le de donnΓ©es Β», Β« Flux applicatifs Β» et l'arborescencesrc/dΓ©crivent une plateforme documentaire prospective non codΓ©e (entitΓ©sDocument/Resource/Expertisefictives) β Γ lire comme une cible historique, pas comme l'Γ©tat rΓ©el. Pour le rΓ©el, voirauth-compte.md.
Ce document dΓ©crit l'architecture technique du projet Codexia, de l'infrastructure serveur jusqu'Γ la logique applicative.
Table des matières
- Vue d'ensemble
- Γvolution du projet
- Architecture infrastructure
- Architecture applicative
- Modèle de données
- Flux applicatifs
- Bundles et modularitΓ©
- SΓ©curitΓ©
- Performance et scalabilitΓ©
Vue d'ensemble
Codexia est une plateforme de gestion documentaire permettant de composer des documentations Γ partir de ressources rΓ©utilisables (tips, howtos, descriptions fonctionnelles).
MΓ©taphore du projet
"Assembler une documentation Γ partir d'ingrΓ©dients (ressources)"
Cette mΓ©taphore guide toute l'architecture :
- IngrΓ©dients = Ressources documentaires (snippets, exemples, dΓ©finitions)
- Documentation = Documents assemblΓ©s (guides, tutoriels, spΓ©cifications)
- Domaines d'expertise = ThΓ©matiques (Backend, Frontend, SecOps, etc.)
Stack technique
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β UTILISATEUR β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β COUCHE PRΓSENTATION β
β - Twig 3 (Templates) β
β - Bootstrap 5 (CSS Framework) β
β - Stimulus (JavaScript) β
β - AssetMapper (Assets) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β COUCHE APPLICATIVE β
β - Symfony 7.2 (Framework) β
β - PHP 8.5 (Langage) β
β - Controllers, Services, Events β
β - Voters (Autorisations) β
β - Messenger (Async) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β COUCHE PERSISTANCE β
β - Doctrine ORM 3 β
β - MySQL 8.4.7 β
β - Repositories β
β - Migrations β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β INFRASTRUCTURE β
β - Ubuntu Server 26.04 LTS β
β - Apache 2.4 + PHP-FPM β
β - MySQL 8.4 β
β - Postfix + DKIM (emails) β
β - Let's Encrypt (SSL/TLS) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Γvolution du projet
Phase 1 : OneTLD (tutoriel Grafikart)
Origine : Tutoriel Symfony 7 par Grafikart (thème recettes de cuisine)
- Application de gestion de recettes de cuisine (terminologie du tutoriel)
- CRUD basique (Recipes, Categories, Users)
- Authentification, API REST, i18n
- Base technique solide pour apprentissage
Phase 2 : Codexia (Plateforme documentaire)
Γvolution : Conservation de la mΓ©taphore, changement de domaine
- Documentation structurΓ©e autour de documents/guides
- Ressources rΓ©utilisables pour assembler les documents
- Domaines d'expertise pour classifier les contenus
Nouvelles fonctionnalitΓ©s :
- Gestion de ressources documentaires
- Assemblage de documents Γ partir de ressources
- Export multi-formats (HTML, EPUB, PDF)
- Recherche full-text et sΓ©mantique
- Versionnement de la documentation
- CMS Γ©ditorial (telaria-cms) pour pages lΓ©gales et pages de contexte
- Backoffice global (telaria-admin) pour l'administration du site
Γtat d'implΓ©mentation (actuel vs cible)
Important : ce document dΓ©crit l'architecture cible. Une partie n'est pas encore codΓ©e β les sections ci-dessous (modΓ¨le de donnΓ©es, flux, structure) la dΓ©crivent comme objectif.
ImplΓ©mentΓ© aujourd'hui (squelette transverse) :
- Authentification, 2FA e-mail, contact, profil, dashboard admin, i18n fr/en, token API β voir
auth-compte.md. - EntitΓ©s rΓ©elles :
UseretResetPasswordRequest. Le dΓ©mo Β« recettes Β» (OneTLD/Grafikart) a Γ©tΓ© retirΓ©. - Bundles maison rΓ©els :
codexia/ui-bundleettelaria/rag-bundle(cΕur RAG, v0.1.x).
Cible, non encore codΓ©e :
- Plateforme documentaire : entitΓ©s
Document/Resource/Expertise, assemblage, export EPUB/PDF. - CMS Γ©ditorial (
telaria-cms.md), recherche (telaria-search.md), doc web/docs(docs-web.md), IA (ia-vitrine.md). - La majoritΓ© des bundles listΓ©s ci-dessous sont prospectifs (hors
codexia/ui-bundleettelaria/rag-bundle).
Architecture infrastructure
Serveur physique (VPS OVH KVM)
Le projet est hΓ©bergΓ© sur une instance VPS (KVM) chez OVHcloud, offrant les caractΓ©ristiques suivantes :
- Processeur (vCPU) : 6 vCPU Intel Haswell (haute performance pour compilation/gΓ©nΓ©ration)
- MΓ©moire (RAM) : 12 Go (permettant la mise en cache agressive OPcache/MySQL)
- Stockage (SSD) : 96 Go SSD (IOPS Γ©levΓ©s pour les opΓ©rations d'assemblage documentaire)
- RΓ©seau : 250 Mbps (IP publique fixe, IPv4 + IPv6)
- Localisation : France (Gravelines/Strasbourg)
Description logicielle (OS & Services)
L'OS est une distribution Linux optimisΓ©e pour la stabilitΓ© et la performance.
- Système d'exploitation : Ubuntu Server 26.04 LTS
- Serveur Web : Apache 2.4 (MPM Event) + PHP-FPM
- Base de donnΓ©es : MySQL 8.4.7 (LTS)
- Serveur de messagerie : Postfix (SMTP transactionnel)
- Gestionnaire de certificats : Certbot (Let's Encrypt)
Paquets et applications par thème
π Infrastructure & Web
apache2: Serveur HTTP haute performancephp8.5-fpm: Processeur PHP avec pool dΓ©diΓ©mysql-server-8.4: Moteur de base de donnΓ©es relationnellepostfix: Agent de transfert de mail (MTA)brotli: Compression HTTP haute performance (guide perf-http.md)
π‘οΈ SΓ©curitΓ© & Certificats
ufw: Uncomplicated Firewall pour le filtrage des ports (22, 80, 443)fail2ban: Protection contre les attaques par force brute (SSH, Apache)certbot+python3-certbot-apache: Automatisation des certificats SSL/TLSopendkim: Signature des emails pour la dΓ©livrabilitΓ© (guide email.md)
π οΈ DΓ©veloppement & Automatisation
composer: Gestionnaire de dΓ©pendances PHPgit: ContrΓ΄le de version (GitFlow)symfony-cli: Outils de dΓ©veloppement et serveur de test localpandoc: Conversion multi-formats pour les exports (EPUB, PDF, etc.)telaria-bash: Outils CLI maison pour l'automatisation (guide bash.md)
ΓcosystΓ¨me Symfony & Bundles
L'application Codexia repose sur une architecture modulaire utilisant des bundles spΓ©cialisΓ©s pour sΓ©parer les responsabilitΓ©s.
Statut : seuls les bundles rΓ©ellement implΓ©mentΓ©s sont listΓ©s ici. Les pistes de modularisation future vivent dans
pilotage/roadmap.md.
Bundles implΓ©mentΓ©s
| Bundle | Description | Repository |
|---|---|---|
| codexia/ui-bundle | Thèmes Bootstrap custom, composants Stimulus et presets AssetMapper. | github.com/<owner>/codexia-ui |
| telaria/rag-bundle | CΕur RAG headless (ingestion β embeddings β sqlite-vec β retrieval), consommΓ© par codexia (^0.1, tag v0.1.3) β L0 validΓ© en prod sur VPS le 2026-05-26 (181 docs / 2430 chunks). |
github.com/<owner>/telaria-rag |
| telaria/mcp-bundle | Serveur MCP (PHP/Symfony) exposant la documentation comme outils β repo telaria-mcp. |
github.com/<owner>/telaria-mcp |
Architecture applicative
Structure Symfony
β οΈ Arborescence cible : les modules documentaires (
Document,Resource,Expertise, assemblage, export) ne sont pas encore codΓ©s. Le code rΓ©el se limite au squelette transverse (auth, contact, profil, admin, i18n). Voir Β§ Β« Γtat d'implΓ©mentation Β».
codexia-app/ βββ bin/ β βββ console # CLI Symfony βββ config/ β βββ packages/ # Configuration bundles β βββ routes/ # Configuration routes β βββ services.yaml # Services β βββ security.yaml # Firewall, voters βββ migrations/ # Migrations Doctrine βββ public/ β βββ index.php # Front controller β βββ uploads/ # Images uploadΓ©es β βββ downloads/ # EPUB/PDF gΓ©nΓ©rΓ©s βββ media/ # MΓ©dias CMS (privΓ©, hors webroot) βββ src/ β βββ Controller/ β β βββ Admin/ # Backoffice (CRUD) β β βββ API/ # API REST β β βββ HomeController.php β β βββ DocumentController.php β β βββ CmsPublicController.php β β βββ SecurityController.php β βββ Entity/ β β βββ Document.php β β βββ CmsContent.php β β βββ CmsTag.php β β βββ CmsImage.php β β βββ Resource.php β β βββ Expertise.php β β βββ User.php β βββ Repository/ β β βββ DocumentRepository.php β β βββ CmsContentRepository.php β β βββ CmsTagRepository.php β β βββ CmsImageRepository.php β β βββ ResourceRepository.php β β βββ ExpertiseRepository.php β β βββ UserRepository.php β βββ Form/ β β βββ DocumentType.php β β βββ CmsContentType.php β β βββ ResourceType.php β β βββ ExpertiseType.php β βββ Service/ β β βββ DocumentAssembler.php β β βββ ExportService.php (EPUB, PDF) β β βββ FileUploader.php β β βββ SearchService.php (telaria-search) β β βββ CmsRenderer.php β βββ Security/ β β βββ Voter/ β β βββ DocumentVoter.php β β βββ ResourceVoter.php β βββ EventSubscriber/ β β βββ LocaleSubscriber.php (i18n) β β βββ SecuritySubscriber.php β βββ Command/ β βββ UserGenerateTokenCommand.php β βββ ExportDocsCommand.php βββ templates/ β βββ base.html.twig β βββ home/ β βββ document/ β βββ admin/ β βββ security/ βββ translations/ β βββ messages.fr.yaml β βββ messages.en.yaml βββ var/ β βββ cache/ β βββ log/ β βββ email/ # Emails dev βββ vendor/ # DΓ©pendances Composer
Couches architecturales
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CONTROLLER LAYER β
β - Gestion requΓͺtes HTTP β
β - Validation formulaires β
β - DΓ©lΓ©gation aux services β
β - Rendu templates β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SERVICE LAYER β
β - Logique mΓ©tier β
β - DocumentAssembler (composition docs) β
β - ExportService (gΓ©nΓ©ration EPUB/PDF) β
β - SearchService (telaria-search) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β REPOSITORY LAYER β
β - AccΓ¨s donnΓ©es (Doctrine) β
β - RequΓͺtes DQL personnalisΓ©es β
β - Pagination β
β - Filtres et tri β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ENTITY LAYER β
β - Document, Resource, Expertise, User β
β - Validation (Constraints) β
β - Relations (OneToMany, ManyToMany) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Modèle de données
β οΈ ModΓ¨le cible. Γ ce jour, seules les entitΓ©s
UseretResetPasswordRequestexistent β voirauth-compte.md. Les entitΓ©sDocument/Resource/Expertiseci-dessous relΓ¨vent de la plateforme documentaire non encore codΓ©e.
Diagramme ER
ββββββββββββββββββββ ββββββββββββββββββββ
β User β β Expertise β
ββββββββββββββββββββ€ ββββββββββββββββββββ€
β id (PK) β β id (PK) β
β email β β name β
β password β β slug β
β roles (JSON) β β description β
β api_token β β created_at β
β created_at β β updated_at β
ββββββββββββββββββββ ββββββββββββββββββββ
β β
β 1 β 1
β β
β N β N
β β
β ββββββββββ΄βββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Document β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β id (PK) β
β title β
β slug β
β description β
β content (Markdown) β
β format (markdown|html|rst) β
β language (fr|en) β
β accessibility_level (A|AA|AAA) β
β user_id (FK β User) β
β expertise_id (FK β Expertise) β
β created_at β
β updated_at β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β N
β
β (ManyToMany)
β
β N
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Resource β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β id (PK) β
β title β
β slug β
β type (snippet|example|definition|howto) β
β content (Markdown) β
β tags (JSON) β
β user_id (FK β User) β
β created_at β
β updated_at β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Relations
- User β Document : Un utilisateur peut crΓ©er plusieurs documents (1:N)
- Expertise β Document : Un domaine d'expertise contient plusieurs documents (1:N)
- Document β Resource : Un document peut utiliser plusieurs ressources, une ressource peut Γͺtre dans plusieurs documents (N:N)
Flux applicatifs
β οΈ Flux cibles de la plateforme documentaire (non encore codΓ©e). Pour l'authentification rΓ©elle, voir
auth-compte.md.
1. CrΓ©ation d'un document
βββββββββββββββ
β User β
β (logged) β
ββββββββ¬βββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β GET /admin/documents/new β
β - Affiche formulaire vide β
β - Liste des expertises disponibles β
β - Liste des ressources (sΓ©lection) β
ββββββββ¬ββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β POST /admin/documents/new β
β 1. Validation formulaire β
β 2. DocumentVoter (CREATE) β
β 3. Persister Document β
β 4. Lier Resources (ManyToMany) β
β 5. Redirect /admin/documents/{id} β
ββββββββ¬ββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β Affichage document créé β
β - Preview HTML β
β - Bouton "Exporter EPUB" β
β - Bouton "Modifier" β
ββββββββββββββββββββββββββββββββββββββββ
2. Export EPUB
βββββββββββββββββββββββββββββββββββββββ
β GET /admin/documents/{id}/export β
β ?format=epub β
ββββββββ¬βββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β ExportService::exportToEpub() β
β 1. RΓ©cupΓ©rer Document + Resources β
β 2. Assembler contenu Markdown β
β 3. Convertir Pandoc β EPUB β
β 4. Ajouter mΓ©tadonnΓ©es accessibilitΓ©β
β 5. Valider EPUBCheck β
β 6. Stocker dans public/downloads/ β
ββββββββ¬ββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β Response (file download) β
β Content-Type: application/epub+zip β
β Content-Disposition: attachment β
ββββββββββββββββββββββββββββββββββββββββ
3. Recherche documentaire (telaria-search)
ββββββββββββββββββββββββββββββββββββββββ
β GET /search?q=accessibilitΓ© β
ββββββββ¬ββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β SearchService::search() β
β 1. RequΓͺte moteur (OpenSearch) β
β 2. Filtres (expertise, language) β
β 3. Tri par pertinence β
β 4. Pagination (20 rΓ©sultats/page) β
ββββββββ¬ββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β Affichage rΓ©sultats β
β - Cards avec excerpt β
β - Highlighting des termes β
β - Filtres latΓ©raux β
β - Pagination HATEOAS β
ββββββββββββββββββββββββββββββββββββββββ
4. API REST
ββββββββββββββββββββββββββββββββββββββββ
β GET /api/v1/documents β
β Authorization: Bearer {token} β
ββββββββ¬ββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β 1. Validation token (SHA-512 hash) β
β 2. VΓ©rifier rate limiting β
β 3. DocumentRepository::findAll() β
β 4. Serialization (JMS ou native) β
β 5. Pagination + HATEOAS links β
ββββββββ¬ββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β Response JSON β
β { β
β "status": "success", β
β "data": [...], β
β "pagination": {...} β
β } β
ββββββββββββββββββββββββββββββββββββββββ
Bundles et modularitΓ©
Bundles externes
Codexia adopte une approche modulaire : les fonctionnalitΓ©s rΓ©utilisables sont extraites en bundles Composer, consommΓ©s par l'application codexia.
codexia/ui-bundle βββ ThΓ¨mes Bootstrap custom βββ Composants Stimulus βββ AssetMapper presets telaria/rag-bundle βββ Ingestion .md β chunks βββ Embeddings + index sqlite-vec βββ Service de retrieval telaria/mcp-bundle βββ Transports stdio / Streamable HTTP βββ Registre d'outils (tools/list, tools/call) βββ Gouvernance multi-tenant
Architecture multi-bundles
codexia-app/
βββ vendor/
β βββ codexia/ui-bundle
β βββ telaria/rag-bundle
β βββ telaria/mcp-bundle
βββ src/
βββ [Code applicatif spΓ©cifique]
SΓ©curitΓ©
Authentification
ββββββββββββββββββββββββββββββββββββββββ
β Login Form β
β - email + password β
β - CSRF token β
ββββββββ¬ββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β Symfony Security β
β 1. CSRF validation β
β 2. User provider (Doctrine) β
β 3. Password hasher (auto) β
β 4. Session creation β
ββββββββ¬ββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β Session active β
β - Cookie sΓ©curisΓ© (httponly) β
β - Timeout configurable β
β - Remember me (optionnel) β
ββββββββββββββββββββββββββββββββββββββββ
Autorisation (Voters)
// DocumentVoter.php class DocumentVoter extends Voter { protected function supports(string $attribute, mixed $subject): bool { return in_array($attribute, ['VIEW', 'EDIT', 'DELETE']) && $subject instanceof Document; } protected function voteOnAttribute( string $attribute, mixed $subject, TokenInterface $token ): bool { $user = $token->getUser(); if (!$user instanceof User) { return false; } /** @var Document $document */ $document = $subject; return match($attribute) { 'VIEW' => true, // Tous peuvent voir 'EDIT', 'DELETE' => $document->getUser() === $user || in_array('ROLE_ADMIN', $user->getRoles()), }; } }
Rate Limiting
# config/packages/rate_limiter.yaml framework: rate_limiter: api: policy: 'sliding_window' limit: 100 interval: '1 hour' contact_form: policy: 'fixed_window' limit: 5 interval: '15 minutes'
Performance et scalabilitΓ©
Optimisations actuelles
- OPcache PHP : Bytecode mis en cache
- Doctrine Query Cache : RequΓͺtes DQL mises en cache
- HTTP Cache : ETags + Cache-Control
- Eager Loading : Γviter requΓͺtes N+1 (jointures)
- Assets : AssetMapper avec versioning
ScalabilitΓ© future
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Load Balancer (HAProxy/Nginx) β
ββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββ¬ββββββββββββββ¬ββββββββββββββ
βΌ βΌ βΌ βΌ
βββββββββββββ βββββββββββββ βββββββββββββ βββββββββββββ
β App Node 1β β App Node 2β β App Node 3β β App Node Nβ
βββββββββββββ βββββββββββββ βββββββββββββ βββββββββββββ
β β β β
βββββββββββββββ΄ββββββββββββββ΄ββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MySQL Master/Replica β
β - Master : Γ©criture β
β - Replicas : lecture β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Redis (Session + Cache) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Liens et ressources
Documentation interne
- Philosophie du projet
- Principes d'ingΓ©nierie
- Domaines d'expertise
- Design system
- Recherche interne (telaria-search)
- SΓ©curitΓ© (SecOps)
RΓ©fΓ©rences externes
ImplΓ©mentation
| Aspect | Localisation |
|---|---|
| Bundle principal | telaria-app β squelette transverse (auth, contact, profil, admin, i18n) |
| Bundles rΓ©els | codexia/ui-bundle (thΓ¨mes Bootstrap), telaria/rag-bundle (cΕur RAG) |
| EntitΓ©s rΓ©elles | src/Entity/User.php, src/Entity/ResetPasswordRequest.php |
| Controllers | src/Controller/Admin/, src/Controller/SecurityController.php |
| Commandes CLI | src/Command/UserGenerateTokenCommand.php |
| Config | config/packages/, config/security.yaml |
| Tests | Γ documenter |
| Note | Les entitΓ©s Document/Resource/Expertise dΓ©crites dans ce doc sont des cibles non encore codΓ©es |
Historique des dΓ©cisions
| Version | Date | DΓ©cision |
|---|---|---|
| 1.0 | 2026-06-14 | Version initiale β premiΓ¨re formalisation du versioning des specs. |
| β | 2026-06-05 | Document partiellement remplacΓ© par architecture-univers-telaria.md pour la vision d'ensemble multi-domaines. Les sections modΓ¨le de donnΓ©es, flux et arborescence src/ dΓ©crivent une cible historique prospective. |
| β | 2026-06-05 | Statut des bundles clarifiΓ© : seuls codexia/ui-bundle et telaria/rag-bundle sont implΓ©mentΓ©s ; les autres sont prospectifs. |