# Guide de Déploiement MarketPro sur cPanel

## Prérequis cPanel
- PHP 8.2+
- MySQL 8.0+
- Extensions PHP: pdo, pdo_mysql, mbstring, openssl, tokenizer, xml, ctype, json, bcmath, fileinfo, curl
- Accès SSH ou Terminal cPanel

---

## Étape 1: Préparation des fichiers

### 1.1 Upload des fichiers
1. Téléchargez le projet complet sur votre ordinateur
2. Via le gestionnaire de fichiers cPanel ou FTP, uploadez tout le contenu dans `public_html/` ou un sous-dossier

### 1.2 Structure recommandée
```
public_html/
├── app/
├── bootstrap/
├── config/
├── database/
├── lang/
├── public/           ← Contenu doit être à la racine web
├── resources/
├── routes/
├── storage/
├── vendor/
└── ...
```

**Important**: Sur cPanel, vous devez généralement:
- Soit placer le contenu de `public/` directement dans `public_html/` et le reste au niveau parent
- Soit configurer le document root vers le dossier `public/`

---

## Étape 2: Configuration Composer

Si les dépendances ne sont pas installées:

```bash
cd /home/user/public_html
composer install --no-dev --optimize-autoloader
```

---

## Étape 3: Installation Automatique

### Option A: Via le navigateur
1. Ouvrez `https://votre-domaine.com/install.php`
2. Suivez les étapes de l'assistant d'installation
3. **SUPPRIMEZ** `install.php` après installation

### Option B: Via SSH (recommandé)
```bash
cd /home/user/public_html

# 1. Copier et configurer .env
cp .env.example .env
nano .env   # Configurez DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD, APP_URL

# 2. Générer la clé
php artisan key:generate

# 3. Créer le lien de stockage (IMPORTANT pour les images!)
php artisan storage:link

# 4. Migrations
php artisan migrate --force

# 5. Données initiales
php artisan db:seed --force

# 6. Optimisation
php artisan config:cache
php artisan route:cache
php artisan view:cache
```

---

## Étape 4: Configuration du Stockage d'Images

### Problème courant: Erreurs 404 sur les images

Les images sont stockées dans `storage/app/public/` et accessibles via `public/storage/` grâce à un lien symbolique.

### Vérifier le lien symbolique
```bash
ls -la public/storage
# Doit pointer vers -> ../storage/app/public
```

### Si le lien n'existe pas
```bash
php artisan storage:link
```

### Si cela ne fonctionne pas (hébergement restrictif)
Utilisez le script alternatif:
```bash
php public/create_storage_link.php
```

Ou créez manuellement un fichier `.htaccess` dans `public/storage/`:
```apache
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /storage/app/public/$1 [L]
```

### Dossiers requis dans storage/app/public/
Ces dossiers sont créés automatiquement lors du premier upload, mais vous pouvez les créer manuellement:
```
storage/app/public/
├── products/           # Images produits
├── sellers/
│   ├── logos/          # Logos boutiques
│   └── banners/        # Bannières boutiques
├── kyc/                # Documents vérification vendeurs
├── delivery-proofs/    # Preuves de livraison
├── blog/               # Images articles blog
├── documents/          # Documents divers
└── investment-products/ # Images produits d'investissement
```

---

## Étape 5: Permissions Fichiers

```bash
# Dossiers accessibles en écriture
chmod -R 775 storage
chmod -R 775 bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache
```

Sur cPanel, le propriétaire est généralement votre utilisateur cPanel.

---

## Étape 6: Sécurité Post-Installation

1. **Supprimer les fichiers sensibles**:
   ```bash
   rm public/install.php
   rm public/diagnostic.php
   rm public/test*.php
   rm -rf tools/
   ```

2. **Changer les mots de passe par défaut**:
   - Admin: `admin@moniboss.shop` / `Admin123!`
   - Member: `member@moniboss.shop` / `Password123!`
   - Seller: `seller@moniboss.shop` / `Seller123!`

3. **Configurer SSL/HTTPS** via cPanel Let's Encrypt

4. **Configurer les paiements** dans Admin > Paramètres > Flutterwave

---

## Résolution des Problèmes

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

# Régénérer les caches
php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear
```

### Images 404
1. Vérifier que `public/storage` existe (lien symbolique)
2. Vérifier les permissions de `storage/app/public`
3. Vérifier que les fichiers existent dans `storage/app/public/products/`

### Erreur Migration "Table exists"
Les migrations sont protégées avec `Schema::hasTable()`. Si vous avez encore des erreurs:
```bash
php artisan migrate:fresh --force --seed
# ATTENTION: Cela supprime toutes les données!
```

### Problèmes de session
```bash
chmod -R 775 storage/framework/sessions
```

---

## Ordre des Migrations

Le fichier `0000_00_00_000000_safe_migration_runner.php` s'exécute en premier et crée les tables critiques avec des vérifications `hasTable()`. Les migrations suivantes vérifient également l'existence des tables avant de les créer.

Tables créées par le safe runner:
- users (Laravel)
- roles
- permissions
- wallets
- carts
- cart_items
- product_images
- feature_toggles
- mlm_levels
- disputes
- withdrawals

---

## Support

Pour toute assistance, consultez la documentation ou contactez le support technique.
