6.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=productionAPP_DEBUG=falseAPP_URL=https://chatbot.votre-domaine.fr- Configurez vos clés d'API :
MISTRAL_API_KEY=votre_cle_mistralWEAVIATE_HOST=votre_hote_weaviateWEAVIATE_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
Créez un nouveau fichier de configuration Nginx :
nano /etc/nginx/sites-available/chatbot-agglo
Collez la configuration suivante (ajustez le server_name) :
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 :
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).