Files
ChatbotAGGLO/INSTALL_LXC_DEBIAN12.md
T

8.4 KiB

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 :

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ý :

# 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 :

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) :

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 :

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/) :

cd /var/www
git clone https://github.galiniere.net/jeremy/ChatbotAGGLO.git chatbot-agglo
cd chatbot-agglo

Dépendances PHP & Node.js :

# 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 :

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 :

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) :

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 :

php artisan migrate --force

Étape 9 : Configuration de Nginx & Augmentation de la capacité d'upload (100 Mo)

1. Configuration PHP-FPM et PHP-CLI

Pour autoriser des uploads de 100 Mo, vous devez modifier la configuration de PHP. Éditez le fichier de configuration de PHP-FPM :

nano /etc/php/8.3/fpm/php.ini

Et modifiez/ajoutez les valeurs suivantes (utilisez Ctrl+W pour rechercher) :

upload_max_filesize = 100M
post_max_size = 100M
memory_limit = 256M
max_execution_time = 300

(Faites de même dans /etc/php/8.3/cli/php.ini si nécessaire pour la CLI).

Redémarrez le service PHP-FPM pour appliquer :

systemctl restart php8.3-fpm

2. Configuration de Nginx

Par défaut, Nginx limite les uploads à 1 Mo. Créez la configuration Nginx :

nano /etc/nginx/sites-available/chatbot-agglo

Collez la configuration suivante (notez le client_max_body_size 100M;) :

server {
    listen 80;
    server_name chatbot.votre-domaine.fr;
    root /var/www/chatbot-agglo/public;

    # Limite d'upload à 100 Mo
    client_max_body_size 100M;

    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 :

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 :

nano /etc/systemd/system/laravel-worker.service

Ajoutez-y la configuration suivante :

[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 :

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 :

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).


🔄 Comment mettre à jour le serveur distant après une modification du code ?

Lorsque vous faites des modifications en local (comme changer la taille d'upload dans le code Laravel), voici la procédure pour mettre à jour votre serveur LXC distant via Git :

  1. Pousser les modifications depuis votre machine locale :

    git add .
    git commit -m "Description des modifications"
    git push
    
  2. Se connecter à votre conteneur LXC distant et récupérer les modifications :

    cd /var/www/chatbot-agglo
    git pull origin main
    
  3. Mettre à jour les dépendances (si composer.json ou package.json ont changé) :

    composer install --no-dev --optimize-autoloader
    npm install
    npm run build
    
  4. Exécuter les nouvelles migrations de base de données (si nécessaire) :

    php artisan migrate --force
    
  5. Vider et reconstruire le cache de Laravel (très important pour que les changements de config soient pris en compte) :

    php artisan config:clear
    php artisan cache:clear
    php artisan config:cache
    php artisan route:cache
    php artisan view:cache
    
  6. Redémarrer le worker de file d'attente (pour recharger le code PHP en cache CLI) :

    systemctl restart laravel-worker.service