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=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 & 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 :
-
Pousser les modifications depuis votre machine locale :
git add . git commit -m "Description des modifications" git push -
Se connecter à votre conteneur LXC distant et récupérer les modifications :
cd /var/www/chatbot-agglo git pull origin main -
Mettre à jour les dépendances (si composer.json ou package.json ont changé) :
composer install --no-dev --optimize-autoloader npm install npm run build -
Exécuter les nouvelles migrations de base de données (si nécessaire) :
php artisan migrate --force -
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 -
Redémarrer le worker de file d'attente (pour recharger le code PHP en cache CLI) :
systemctl restart laravel-worker.service