# 📦 Guide de Déploiement - CHAPS

Ce guide décrit les procédures de déploiement pour l'application CHAPS en local et sur le serveur.

## 📋 Table des matières

- [Prérequis](#prérequis)
- [Déploiement Local](#déploiement-local)
- [Déploiement Serveur](#déploiement-serveur)
- [Configuration](#configuration)
- [Dépannage](#dépannage)

---

## 🔧 Prérequis

### Logiciels requis

- **PHP** >= 8.0
- **Composer** >= 2.0
- **Node.js** >= 16.x
- **NPM** >= 8.x
- **MySQL** >= 5.7
- **Git**

### Vérification des prérequis

```bash
php -v
composer --version
node -v
npm -v
mysql --version
git --version
```

---

## 💻 Déploiement Local

### 1. Installation initiale

```bash
# Cloner le repository
git clone https://bitbucket.org/alcyonpartners/chaps-api.git
cd chaps-api

# Copier le fichier .env
cp .env.example .env

# Éditer .env avec vos configurations locales
nano .env

# Générer la clé d'application
php artisan key:generate
```

### 2. Configuration de la base de données

```sql
-- Créer la base de données
CREATE DATABASE estair_bo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Importer le dump si nécessaire
mysql -u root -p estair_bo < estair_bo.sql
```

### 3. Utilisation du script de déploiement

```bash
# Rendre le script exécutable
chmod +x deploy-local.sh

# Lancer le déploiement
./deploy-local.sh
```

### 4. Démarrer le serveur de développement

```bash
# Démarrer le serveur Laravel
php artisan serve

# L'application est accessible sur http://localhost:8000
```

### Que fait le script `deploy-local.sh` ?

1. ✅ Vérifie les prérequis (PHP, Composer, NPM)
2. 📥 Récupère les dernières modifications (`git pull`)
3. 📦 Installe les dépendances PHP (`composer install`)
4. 📦 Installe les dépendances NPM (`npm install`)
5. 🎨 Compile Tailwind CSS (`npm run build:css`)
6. 🔐 Vérifie le fichier `.env`
7. 🗑️ Nettoie les caches Laravel
8. 🗄️ Propose d'exécuter les migrations
9. 🔐 Ajuste les permissions
10. ⚡ Optimise l'application

---

## 🚀 Déploiement Serveur

### 1. Configuration SSH

```bash
# Se connecter au serveur
ssh user@ns3190545.ip-51-210-110.eu
```

### 2. Première installation

```bash
# Naviguer vers le répertoire de l'application
cd /var/www/html/chaps

# Copier et configurer .env
cp .env.example .env
nano .env  # Configurer pour la production

# Générer la clé d'application
php artisan key:generate
```

### 3. Utilisation du script de déploiement

```bash
# Rendre le script exécutable
chmod +x deploy-server.sh

# Lancer le déploiement
./deploy-server.sh
```

### Que fait le script `deploy-server.sh` ?

1. 🔒 Active le mode maintenance
2. 💾 Sauvegarde la base de données
3. 📥 Récupère les dernières modifications (`git pull`)
4. 📦 Installe les dépendances (production)
5. 🎨 Compile les assets
6. 🗑️ Nettoie et recrée les caches
7. 🗄️ Exécute les migrations
8. 🔐 Ajuste les permissions
9. 🔄 Redémarre les services (PHP-FPM, Nginx)
10. ✅ Désactive le mode maintenance
11. 🏥 Effectue un test de santé
12. 🧹 Nettoie les anciens backups

### 4. Rollback en cas de problème

```bash
# Revenir au commit précédent
git log --oneline  # Trouver le hash du commit
git reset --hard <commit-hash>

# Ou restaurer depuis le backup
mysql -u user -p database_name < backups/YYYYMMDD_HHMMSS/database_backup.sql
```

---

## ⚙️ Configuration

### Variables d'environnement importantes

#### Local

```env
APP_ENV=local
APP_DEBUG=true
DB_HOST=127.0.0.1
DB_DATABASE=estair_bo
DB_USERNAME=root
DB_PASSWORD=root
```

#### Production

```env
APP_ENV=production
APP_DEBUG=false
DB_HOST=127.0.0.1
DB_DATABASE=alcyonpartnet_estair_bo
DB_USERNAME=alcyonpartnet_estair_admin
DB_PASSWORD=estair@2025
```

### Permissions requises

```bash
# Storage et cache doivent être accessibles en écriture
chmod -R 775 storage
chmod -R 775 bootstrap/cache
chmod -R 775 public/css

# Le serveur web doit être propriétaire
chown -R www-data:www-data storage bootstrap/cache public/css
```

---

## 🐛 Dépannage

### Problème : Erreur de permissions

```bash
# Solution
sudo chmod -R 775 storage bootstrap/cache
sudo chown -R www-data:www-data storage bootstrap/cache
```

### Problème : CSS non compilé

```bash
# Solution
npm run build:css
php artisan cache:clear
```

### Problème : Migrations échouées

```bash
# Vérifier l'état des migrations
php artisan migrate:status

# Rollback et relancer
php artisan migrate:rollback
php artisan migrate
```

### Problème : Mode maintenance bloqué

```bash
# Désactiver manuellement
php artisan up

# Ou supprimer le fichier
rm storage/framework/down
```

### Problème : Erreur 500 après déploiement

```bash
# Vérifier les logs
tail -f storage/logs/laravel.log

# Nettoyer tous les caches
php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear
```

---

## 📊 Monitoring

### Vérifier l'état de l'application

```bash
# Logs Laravel
tail -f storage/logs/laravel.log

# Logs Nginx
tail -f /var/log/nginx/error.log

# Logs PHP-FPM
tail -f /var/log/php8.0-fpm.log
```

### Commandes utiles

```bash
# Tester la configuration Nginx
sudo nginx -t

# Recharger Nginx
sudo systemctl reload nginx

# Redémarrer PHP-FPM
sudo systemctl restart php8.0-fpm

# Vérifier l'espace disque
df -h

# Vérifier les processus
ps aux | grep php
```

---

## 🔄 Workflow de déploiement recommandé

1. **Développement local**
   - Développer et tester localement
   - Utiliser `./deploy-local.sh` pour synchroniser

2. **Commit et Push**
   ```bash
   git add .
   git commit -m "Description des modifications"
   git push origin master
   ```

3. **Déploiement en production**
   - Se connecter au serveur
   - Exécuter `./deploy-server.sh`
   - Vérifier que l'application fonctionne

4. **Rollback si nécessaire**
   - Revenir au commit précédent
   - Restaurer le backup de la base de données

---

## 📞 Support

En cas de problème, consulter :

- Documentation Laravel : https://laravel.com/docs
- Logs de l'application : `storage/logs/laravel.log`
- Repository : https://bitbucket.org/alcyonpartners/chaps-api

---

**Dernière mise à jour** : 21 novembre 2025
