Architecture · LLM · Docker · Portainer · MySQL · SonarQube

Documentation technique

Stack complète de Mon Agent IA : application PHP, intelligence artificielle, conteneurs preview par projet, qualité du code et provisioning automatique. Version 2.6historique des releases.

Architecture globale

Mon Agent IA est une application PHP 8.2+ / Apache dont seul le dossier public/ est exposé. La logique métier vit dans includes/, les données dans data/ (hors web).

Navigateur Chat · Espace Code · Admin
Mon Agent IA public/ · includes/ · data/
Open WebUI LLM local
Routeur API LLM via API cloud
MySQL 1 BDD / projet
Portainer API Stacks Docker
SonarQube Analyse qualité
Conteneurs preview maia-ws-{project_id} — Apache/PHP
CoucheRôle
public/Interface web, API JSON, proxy preview, symlinks workspace
includes/Auth, projets, agent, Portainer, Sonar, versions, LLM
data/Utilisateurs, projets, conversations, logs, settings, clés SSH
docker/Images app et preview PHP
Conteneurs previewExécution isolée du code utilisateur (volume partagé avec le workspace)

Arborescence du dépôt

/var/www/html/
├── config.php                 # Config (secrets → variables d'env en prod)
├── public/                    # DocumentRoot Apache
│   ├── index.php, guide.php, technique.php
│   ├── chat.php, code.php, preview.php, terminal.php
│   ├── api/                   # Endpoints JSON (+ terminal-session.php)
│   └── ws/{id}/ → symlink     # Listing workspace
├── includes/
│   ├── ProjectStore.php       # CRUD projets, README, preview
│   ├── ProjectPreviewManager.php
│   ├── CodeAgent.php          # Agent (blocs <<<file>>>)
│   ├── Workspace.php          # Fichiers + versions
│   ├── LlmClientFactory.php   # Open WebUI / routeur API
│   └── …
├── data/
│   ├── projects-by-user/{user}/{id}/
│   │   ├── project.json
│   │   ├── workspace/
│   │   ├── conversations/
│   │   ├── .versions/         # Historique fichiers
│   │   └── .releases/         # Snapshots projet
│   ├── settings/              # llm.json, features.json, preprompts
│   └── logs/
└── docker/
    ├── app/
    └── preview-php/

LLM

Le chat et l'Espace Code partagent la même couche LLM, configurable en administration.

api/chat.phpChat général
api/code-chat.phpAgent code (SSE)
LlmClientFactory
Open WebUIou routeur API
ComposantRôle
data/settings/llm.jsonFournisseur actif, clé et modèle du routeur API
LlmSettings.phpLecture / écriture, surcharge par variables d'env
OpenWebUIClientAPI /v1/chat/completions + streaming SSE
OpenAiCompatibleChatClientClient OpenAI-compatible (routeur API)

Variables d'environnement LLM

VariableDescription
LLM_PROVIDERopenwebui ou routeur API
OPENWEBUI_API_URLURL de l'instance Open WebUI
OPENWEBUI_API_KEYClé API Open WebUI
Routeur APIURL, clé et modèle — Admin → Paramètres ou data/settings/llm.json (surcharge possible via variables d'environnement, voir config.example.php)

Agent développeur

L'agent modifie les fichiers réels du workspace via des blocs <<<file path="…">>>. Il ne se connecte pas en SSH : l'utilisateur exécute les commandes shell si besoin.

  1. Message utilisateur → api/code-chat.php (flux SSE).
  2. CodeAgent + LlmClientFactory → réponse LLM.
  3. Archivage versions fichier (si module actif) avant application.
  4. Workspace::write() — écriture disque.
  5. Validation PHP optionnelle (php -l + test HTTP, max 3 corrections).
  6. Choix cliquables via bloc <<<choices>>>.
Fichier cléRôle
CodeAgent.phpParse opérations, applique write/mkdir/delete
Workspace.phpCRUD fichiers, versions, upload
AgentUndoStore.phpAnnulation dernière série de modifs agent
ConversationStore.phpDiscussions code par projet

Docker & Portainer

Chaque projet Espace Code déclenche le déploiement d'une stack Docker via l' API REST Portainer. La stack s'appelle maia-ws-{project_id} sur le réseau llm_default (configurable).

Modèles de projet

ModèleIDImagePort app
Site web (PHP)site-webmaia-preview-php:latest80

Cycle de vie

  1. Création projet → provisioning MySQL + génération compose.
  2. Appel Portainer → démarrage conteneur preview.
  3. Volume hôte monté : workspace/ du projet.
  4. Édition IDE / agent → fichiers visibles immédiatement dans le conteneur.
  5. Suppression / archivage → destruction stack + DROP base.
Variable clé : PORTAINER_HOST_DATA_PATH
Racine de l'app sur le NUC (ex. /home/mike/docker_config/llm).
Le compose monte {HOST}/data/projects-by-user/{user}/{id}/workspace dans le conteneur.

Variables Portainer

VariableDescription
PORTAINER_URLURL API Portainer
PORTAINER_TOKENJeton d'accès API
PORTAINER_ENDPOINT_IDID de l'endpoint Docker
PORTAINER_HOST_DATA_PATHChemin hôte des données projet
PORTAINER_NETWORKRéseau Docker (défaut llm_default)
PORTAINER_SSH_CONNECT_HOSTIP/DNS pour SSH vers conteneurs

Preview & SSH

Deux URLs distinctes par projet :

URLRôle
/ws/{id}/Listing Apache du workspace (symlink)
/preview/{id}/Proxy HTTP vers le conteneur PHP
Utilisateur
preview.php
maia-ws-{id}:80

SSH preview (mode DEV)

MySQL — provisioning

À la création d'un projet, ProjectDatabaseProvisioner crée automatiquement une base et un utilisateur dédiés via un compte MySQL admin configuré dans config.php.

VariableDescription
CHATBOT_MYSQL_HOSTHôte MySQL admin
CHATBOT_MYSQL_PORTPort (défaut 3306)
CHATBOT_MYSQL_ADMIN_USERCompte avec droits CREATE DATABASE / USER
CHATBOT_MYSQL_ADMIN_PASSWORDMot de passe admin

Les identifiants projet sont injectés dans le README.md du workspace et exportés dans l'archive ZIP.

Versions projet & versions fichier

Versions fichier

Automatique — project/.versions/

  • Déclenché : Ctrl+S, autosave, modification agent
  • v1 créée à la création du fichier
  • Rattrapage à l'ouverture du modal si fichier legacy

Versions projet

Manuel — project/.releases/

  • Snapshot ZIP complet du workspace
  • Changelog IA des fonctionnalités
  • VERSIONS.md + CHANGELOG.md
  • Vue chronologique dans l'UI
  • Restauration : workspace, discussions, versions fichier et dump MySQL
  • Sauvegarde automatique avant chaque restauration

Discussions code : renommage au clic, recherche dans la discussion active (bouton loupe, surlignage côté client).

SonarQube

Analyse statique déclenchée depuis l'Espace Code. Le scan s'exécute via le conteneur sonar-scanner-cli et communique avec le serveur SonarQube configuré.

VariableDescription
SONARQUBE_ENABLEDActiver le module
SONARQUBE_URLURL serveur SonarQube
SONARQUBE_TOKENJeton d'authentification
SONARQUBE_SCANNER_IMAGEImage scanner (défaut sonarsource/sonar-scanner-cli)

Modules fonctionnels

Fichier data/settings/features.json — lu par AppFeatures.php, activable en admin.

CléEffet
project_exportExport ZIP projet (+ dump SQL MySQL)
project_versionsSnapshots projet + changelog IA
file_versionsHistorique automatique par fichier
code_sonarAnalyse qualité SonarQube
php_validationVérification PHP post-agent
agent_choicesBoutons <<<choices>>>
ws_accessProtection mot de passe /ws/
web_terminalTerminal SSH web (/terminal.php)

Modèle de projet : data/settings/project-models.json (Site web PHP).

API principales

EndpointRôle
api/chat.phpChat général (SSE)
api/code-chat.phpAgent code (SSE + application fichiers)
api/files.phpArbre, lecture, écriture, versions fichier
api/projects.phpCRUD projets, export, versions projet, restore_version
api/code-conversations.phpDiscussions code (list, create, rename…)
api/upload.phpImport fichiers workspace
api/share-conversations.phpPartage lecture seule
api/terminal-session.phpSession terminal web SSH (start/poll/send/resize/stop)

Configuration & déploiement

Prérequis

ComposantVersion
PHP8.2+ (extensions curl, json, mbstring, pdo_mysql, zip)
Apache2.4 — mod_rewrite, DocumentRoot = public/
Open WebUIInstance accessible (URL + clé API)
MySQL / MariaDBProvisioning BDD par projet
Docker + PortainerPreview conteneurisé par projet

Post-install

cd /var/www/html
sudo php scripts/fix-permissions.php
sudo apache2ctl configtest
sudo systemctl reload apache2
sh scripts/build-preview-images.sh      # sur le NUC
php scripts/repair-preview-setup.php

Documentation détaillée : README du dépôt, docs/SCHEMA-PROJET.md, docs/MIGRATION-NOUVELLE-INFRA.md, docs/CHOIX-MODELE-LLM.md.

Scripts CLI

ScriptRôle
scripts/fix-permissions.phpDroits www-data + symlinks public/ws/
scripts/build-preview-images.shBuild image maia-preview-php
scripts/repair-preview-setup.phpSync data/.maia-docker/
scripts/diagnose-preview-portainer.phpTest config Portainer + dry-run compose
scripts/ensure-preview-ssh-keys.phpPaire clés SSH plateforme

Sécurité

Aller plus loin

Guide utilisateur pour le mode d'emploi, accueil pour la présentation produit.