# Guide de Déploiement Laravel - Permissions Sécurisées

## 🔒 Architecture de Sécurité

### Utilisateurs et Rôles
- **www-data** : Serveur web (Apache/Nginx)
- **laravel** : Utilisateur dédié pour les tâches cron/schedule
- **root** : Administration système uniquement

### Permissions
- **Fichiers** : 644 (rw-r--r--)
- **Dossiers** : 755 (rwxr-xr-x)
- **Storage** : 775 (rwxrwxr-x) - Écriture partagée web/cron
- **.env** : 640 (rw-r-----) - Lecture limitée

## 🚀 Installation Production

### 1. Configuration des Permissions
```bash
sudo ./fix-permissions-production.sh
```

### 2. Configuration du Cron
```bash
sudo ./setup-cron-production.sh
```

### 3. Vérification
```bash
# Test des permissions
php artisan cache:clear
php artisan sitemap:generate-whise

# Vérification du cron
sudo crontab -u laravel -l
tail -f /var/log/laravel-cron.log
```

## 🔧 Maintenance

### Correction des Permissions (après déploiement)
```bash
sudo ./fix-permissions-production.sh
```

### Monitoring du Cron
```bash
# Logs en temps réel
tail -f /var/log/laravel-cron.log

# Statut des tâches
grep "ERROR\|FAILED" /var/log/laravel-cron.log
```

### Debugging des Sitemaps
```bash
# Test manuel
sudo -u laravel php artisan sitemap:generate-whise

# Vérification des fichiers
ls -la public/sitemaps/
```

## 🛡️ Sécurité

### Avantages de cette Approche
1. **Utilisateur non-privilégié** : `laravel` n'a pas les droits root
2. **Permissions minimales** : Seuls les dossiers nécessaires sont en écriture
3. **Isolation** : Séparation web server / tâches programmées
4. **Auditabilité** : Logs dédiés pour le monitoring

### Comparaison avec les Alternatives

| Approche | Sécurité | Maintenance | Recommandation |
|----------|----------|-------------|----------------|
| **Root cron** | ❌ Dangereux | ✅ Simple | ❌ Non |
| **777 permissions** | ❌ Très dangereux | ✅ Simple | ❌ Non |
| **Utilisateur dédié + 775** | ✅ Sécurisé | ✅ Facile | ✅ **OUI** |

## 🔄 Migration depuis la Configuration Actuelle

Si vous utilisez actuellement les permissions 777 :

```bash
# 1. Sauvegarder
sudo cp -r storage/ storage_backup/

# 2. Appliquer la nouvelle configuration
sudo ./fix-permissions-production.sh

# 3. Configurer le cron
sudo ./setup-cron-production.sh

# 4. Tester
php artisan cache:clear
sudo -u laravel php artisan sitemap:generate-whise

# 5. Supprimer l'ancien cron ubuntu si nécessaire
crontab -e  # Supprimer les lignes Laravel
```

## ✅ Checklist de Déploiement

- [ ] Utilisateur `laravel` créé
- [ ] Permissions 775 sur storage/
- [ ] Permissions 775 sur bootstrap/cache/
- [ ] Permissions 775 sur public/sitemaps/
- [ ] Cron configuré pour utilisateur `laravel`
- [ ] Logs de cron fonctionnels
- [ ] Test de génération de sitemap OK
- [ ] Fichiers sensibles (.env) protégés en 640
