# Guide de Déploiement — PRODOM Backend (Interserver)

## Prérequis serveur

- PHP 8.3+ avec extensions : `pdo_mysql`, `mbstring`, `xml`, `curl`, `zip`, `gd`, `intl` 
- MySQL 8.0+
- Composer 2.x
- SSL/TLS (Let's Encrypt via cPanel)
- Domaine `.cm` : `prodom.cm` / `api.prodom.cm` 

---

## 1. Préparation du serveur

### Vérifier PHP
```bash
php -v  # Doit afficher PHP 8.3+
php -m  # Vérifier les extensions requises
```

### Configurer le DocumentRoot
Pointer le VirtualHost vers le dossier `/public` du projet.

Fichier `.htaccess` (déjà inclus dans Laravel) — vérifier qu'il est actif :
```apache
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
```

---

## 2. Déploiement initial

```bash
# Cloner le repository
git clone https://github.com/[org]/prodomApi.git /var/www/prodom
cd /var/www/prodom

# Installer sans les dépendances dev
composer install --no-dev --optimize-autoloader

# Configurer l'environnement de production
cp .env.example .env
php artisan key:generate
```

### Variables `.env` critiques en production

```env
APP_ENV=production
APP_DEBUG=false
APP_URL=https://api.prodom.cm

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=prodom_prod
DB_USERNAME=[user_prod]
DB_PASSWORD=[password_securise]

MAIL_MAILER=smtp
MAIL_HOST=[smtp.provider.cm]
MAIL_PORT=587
MAIL_USERNAME=[email@prodom.cm]
MAIL_PASSWORD=[password]
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=noreply@prodom.cm
MAIL_FROM_NAME="PRODOM"

SANCTUM_STATEFUL_DOMAINS=prodom.cm,www.prodom.cm
FRONTEND_URL=https://prodom.cm

PRODOM_EMAIL_AGENCE=contact@prodom.cm
PRODOM_TELEPHONE_AGENCE="+237 694 000 000"
```

---

## 3. Base de données

```bash
# Migrer en production (--force requis en APP_ENV=production)
php artisan migrate --force

# Seeder initial (uniquement au premier déploiement)
php artisan db:seed --force
```

**⚠️ Après le seeding :** Changer immédiatement le mot de passe du super admin via le back-office ou Tinker.

---

## 4. Optimisations Laravel (production)

```bash
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache
php artisan icons:cache    # si applicable
php artisan optimize
php artisan permission:cache-reset
```

---

## 5. Permissions fichiers (Linux)

```bash
chmod -R 755 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache
```

---

## 6. Scheduler (tâches planifiées)

Ajouter dans le crontab du serveur (`crontab -e`) :
```cron
* * * * * cd /var/www/prodom && php artisan schedule:run >> /dev/null 2>&1
```

Vérifier les commandes planifiées :
```bash
php artisan schedule:list
```

---

## 7. Vérification post-déploiement

**Checklist obligatoire :**
- [ ] `APP_DEBUG=false` dans `.env` 
- [ ] Mot de passe super admin changé
- [ ] HTTPS actif et forcé (redirection HTTP → HTTPS)
- [ ] Email fonctionnel — tester avec `php artisan tinker` 
- [ ] Scheduler cron configuré — tester avec `php artisan schedule:run` 
- [ ] `storage/app/private/` inaccessible depuis le web
- [ ] `php artisan test` passe (dans l'environnement de test)

---

## 8. Procédure de mise à jour (déploiement continu)

```bash
# 1. Activer le mode maintenance
php artisan down --message="Mise à jour en cours..."

# 2. Récupérer les changements
git pull origin main

# 3. Mettre à jour les dépendances
composer install --no-dev --optimize-autoloader

# 4. Migrer (si nouvelles migrations)
php artisan migrate --force

# 5. Reconstruire les caches
php artisan optimize:clear
php artisan optimize
php artisan permission:cache-reset

# 6. Remettre en ligne
php artisan up
```

---

## 9. Sauvegardes

Sauvegarder quotidiennement :
```bash
# Base de données
mysqldump -u [user] -p prodom_prod > backup_$(date +%Y%m%d).sql

# Pièces jointes (données personnelles candidates)
rsync -az /var/www/prodom/storage/app/private/ /backup/prodom/pieces/
```

**⚠️ Les pièces jointes (`storage/app/private/`) contiennent des données personnelles sensibles (CNI, casiers judiciaires). Elles doivent être sauvegardées et chiffrées.**

---

## 10. Support et contact

- Développement : DONSYL — [contact@donsyl.com](mailto:contact@donsyl.com)
- Hébergeur : Interserver
- Documentation API : [https://api.prodom.cm/docs](https://api.prodom.cm/docs)
