Add LXC Debian 12 installation guide
This commit is contained in:
@@ -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).*
|
||||
Reference in New Issue
Block a user