diff --git a/INSTALL_LXC_DEBIAN12.md b/INSTALL_LXC_DEBIAN12.md new file mode 100644 index 0000000..f839b87 --- /dev/null +++ b/INSTALL_LXC_DEBIAN12.md @@ -0,0 +1,223 @@ +# Guide de Déploiement en Production dans un Conteneur LXC Debian 12 + +Ce guide vous accompagne pas à pas pour déployer et configurer l'application **ChatbotAGGLO** au sein d'un conteneur LXC sous Debian 12 (Bookworm). + +--- + +## 📋 Prérequis Système + +Le projet étant développé avec **Laravel 11+ / PHP 8.3**, **Vite** (Node.js), et un parseur PDF écrit en **Python**, les dépendances système requises sont : +- **PHP 8.3** (avec extensions FPM, SQLite, cURL, MBString, XML, Zip, etc.) +- **Composer** (Gestionnaire de dépendances PHP) +- **Node.js 20+ & NPM** (Compilation des assets JS/CSS avec Vite) +- **Nginx** (Serveur Web) +- **Python 3 & dépendances** (`python-is-python3`, `PyMuPDF`/`fitz`, `requests`) +- **Git** (Pour cloner et mettre à jour l'application) + +--- + +## 🛠️ Guide d'Installation Pas à Pas + +### Étape 1 : Mise à jour du système et installation des outils de base +Connectez-vous à votre conteneur LXC et exécutez : +```bash +apt update && apt upgrade -y +apt install -y curl git unzip gnupg2 ca-certificates lsb-release apt-transport-https python-is-python3 +``` + +--- + +### Étape 2 : Installation de PHP 8.3 (via le dépôt Sury) +Debian 12 vient par défaut avec PHP 8.2. Pour installer PHP 8.3, nous ajoutons le dépôt officiel de Ondřej Surý : +```bash +# Ajouter la clé GPG et le dépôt PHP +curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg +echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list + +# Mettre à jour et installer PHP 8.3 et ses extensions +apt update +apt install -y php8.3-cli php8.3-fpm php8.3-sqlite3 php8.3-curl php8.3-mbstring php8.3-xml php8.3-zip php8.3-bcmath php8.3-intl php8.3-readline php8.3-redis +``` + +--- + +### Étape 3 : Installation de Composer +Téléchargez et installez Composer globalement : +```bash +curl -sS https://getcomposer.org/installer | php +mv composer.phar /usr/local/bin/composer +chmod +x /usr/local/bin/composer +``` + +--- + +### Étape 4 : Installation de Node.js & NPM +Utilisez le script officiel NodeSource pour installer Node.js LTS (version 20) : +```bash +curl -fsSL https://deb.nodesource.com/setup_20.x | bash - +apt install -y nodejs +``` + +--- + +### Étape 5 : Installation des dépendances Python pour le parseur PDF +Le script d'ingestion de PDF utilise les librairies Python `fitz` (PyMuPDF) et `requests`. +Sous Debian 12 (norme PEP 668), il est recommandé de les installer via le gestionnaire de paquets système ou avec l'argument `--break-system-packages` : + +```bash +apt install -y python3-pip +pip3 install pymupdf requests --break-system-packages +``` + +--- + +### Étape 6 : Cloner l'application et installer les dépendances +Déplacez-vous dans le répertoire de déploiement (généralement `/var/www/`) : +```bash +cd /var/www +git clone https://github.galiniere.net/jeremy/ChatbotAGGLO.git chatbot-agglo +cd chatbot-agglo +``` + +#### Dépendances PHP & Node.js : +```bash +# Installation des dépendances Composer pour la production +composer install --no-dev --optimize-autoloader + +# Installation des dépendances NPM et compilation des assets de production +npm install +npm run build +``` + +--- + +### Étape 7 : Configuration de l'environnement (`.env`) +Copiez le fichier de configuration d'exemple : +```bash +cp .env.example .env +``` +Éditez le fichier `.env` (`nano .env`) pour y renseigner vos variables de production : +- `APP_ENV=production` +- `APP_DEBUG=false` +- `APP_URL=https://chatbot.votre-domaine.fr` +- Configurez vos clés d'API : + - `MISTRAL_API_KEY=votre_cle_mistral` + - `WEAVIATE_HOST=votre_hote_weaviate` + - `WEAVIATE_API_KEY=votre_cle_weaviate` + +Générez la clé d'application Laravel : +```bash +php artisan key:generate +``` + +--- + +### Étape 8 : Base de données SQLite et permissions +Créez la base de données SQLite vide et attribuez les droits d'écriture à l'utilisateur de Nginx (`www-data`) : +```bash +touch database/database.sqlite +chown -R www-data:www-data /var/www/chatbot-agglo +chmod -R 775 /var/www/chatbot-agglo/storage +chmod -R 775 /var/www/chatbot-agglo/bootstrap/cache +chmod -R 775 /var/www/chatbot-agglo/database +``` + +Exécutez les migrations de base de données : +```bash +php artisan migrate --force +``` + +--- + +### Étape 9 : Configuration de Nginx +Créez un nouveau fichier de configuration Nginx : +```bash +nano /etc/nginx/sites-available/chatbot-agglo +``` +Collez la configuration suivante (ajustez le `server_name`) : +```nginx +server { + listen 80; + server_name chatbot.votre-domaine.fr; + root /var/www/chatbot-agglo/public; + + add_header X-Frame-Options "SAMEORIGIN"; + add_header X-Content-Type-Options "nosniff"; + + index index.php; + + charset utf-8; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location = /favicon.ico { access_log off; log_not_found off; } + location = /robots.txt { access_log off; log_not_found off; } + + error_page 404 /index.php; + + location ~ \.php$ { + fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; + include fastcgi_params; + } + + location ~ /\.(?!well-known).* { + deny all; + } +} +``` + +Activez le site et redémarrez Nginx : +```bash +ln -s /etc/nginx/sites-available/chatbot-agglo /etc/nginx/sites-enabled/ +nginx -t +systemctl restart nginx +``` + +--- + +### Étape 10 : Configuration du Worker (Queue) +Le système d'ingestion de sites web et de documents PDF utilise des files d'attente (Queues) en arrière-plan. Il est indispensable de faire tourner un daemon de file d'attente en production. + +Créez un service Systemd : +```bash +nano /etc/systemd/system/laravel-worker.service +``` + +Ajoutez-y la configuration suivante : +```ini +[Unit] +Description=Laravel queue worker (ChatbotAGGLO) +After=network.target + +[Service] +User=www-data +Group=www-data +Restart=always +ExecStart=/usr/bin/php /var/www/chatbot-agglo/artisan queue:work --queue=default --tries=3 --timeout=120 +LimitNOFILE=65536 + +[Install] +WantedBy=multi-user.target +``` + +Activez et démarrez le service : +```bash +systemctl daemon-reload +systemctl enable laravel-worker.service +systemctl start laravel-worker.service +``` + +--- + +### Étape 11 : Optimisations de Production Laravel +Pour maximiser les performances de l'application en production, exécutez : +```bash +php artisan config:cache +php artisan route:cache +php artisan view:cache +php artisan event:cache +``` +*(Note : Répétez ces commandes après chaque mise à jour du code).*