Add LXC Debian 12 installation guide

This commit is contained in:
jeremy bayse
2026-06-22 17:06:16 +02:00
parent ad127156ff
commit 2a799aaf51
+223
View File
@@ -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).*