# 🚀 GUIDE DE DÉPLOIEMENT NAMECHEAP — CD2C Plateforme v2.0
## cd2c.org — Hébergement Namecheap Stellar Business

---

## PRÉ-REQUIS LOCAUX

```
PHP 8.2+
Composer 2.x
Node.js 20+ & npm
Git
```

---

## ÉTAPE 1 — Préparation du projet en local

```bash
# Installer les dépendances
composer install --no-dev --optimize-autoloader
npm install
npm run build   # génère /public/build

# Créer le fichier .env de production
cp .env.example .env
php artisan key:generate
```

Éditez `.env` avec vos vraies valeurs (BDD, mail, SMS, etc.)

---

## ÉTAPE 2 — Configuration Namecheap

### 2.1 Choisir le bon plan

| Plan | RAM | PHP | MySQL | Recommandé pour |
|------|-----|-----|-------|-----------------|
| Stellar Business | 4 Go | 8.2 | ✅ | ✅ **Recommandé CD2C** |
| VPS Pulsar | 2 Go | 8.2 | ✅ | Trafic > 500 visites/j |

**URL Namecheap :** https://www.namecheap.com/hosting/shared/

### 2.2 Pointer le domaine cd2c.org vers Namecheap

Dans le panneau Namecheap (Domain > Nameservers) :
```
dns1.namecheaphosting.com
dns2.namecheaphosting.com
```

### 2.3 Accéder au cPanel Namecheap

URL : https://cpanel.namecheap.com  
(Ou l'URL fournie dans l'email de bienvenue Namecheap)

---

## ÉTAPE 3 — Configuration MySQL sur Namecheap

Dans **cPanel > MySQL Databases** :

### 3.1 Créer la base de données
```
Nom : cd2c_db
```

### 3.2 Créer un utilisateur MySQL
```
Utilisateur : cd2c_user
Mot de passe : [mot de passe fort — min 16 caractères]
```

### 3.3 Associer l'utilisateur à la BDD
→ Sélectionner `cd2c_db` + `cd2c_user` → **ALL PRIVILEGES**

### 3.4 Mettre à jour .env
```env
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=cd2c_db
DB_USERNAME=cd2c_user
DB_PASSWORD=votre_mot_de_passe_fort
```

---

## ÉTAPE 4 — Upload des fichiers via FTP/SFTP

### 4.1 Credentials FTP (dans cPanel > FTP Accounts)
```
Hôte   : ftp.cd2c.org  (ou l'IP du serveur)
Port   : 21 (FTP) ou 22 (SFTP)
User   : votre_compte_cpanel
Pass   : votre_mot_de_passe_cpanel
```

### 4.2 Structure des dossiers sur le serveur

```
/home/cd2cuser/                    ← Racine du compte cPanel
├── public_html/                   ← DOCUMENT ROOT = cd2c.org
│   ├── index.php                  ← ⚠️ Copier depuis /public/index.php
│   ├── .htaccess                  ← ⚠️ Copier depuis /public/.htaccess
│   └── build/                     ← Assets compilés (npm run build)
│       ├── assets/
│       └── manifest.json
└── cd2c_app/                      ← Code Laravel (HORS public_html)
    ├── app/
    ├── bootstrap/
    ├── config/
    ├── database/
    ├── resources/
    ├── routes/
    ├── storage/           ← CHMOD 755 (écriture requise)
    ├── vendor/
    └── .env               ← JAMAIS dans public_html !
```

### 4.3 Modifier public/index.php pour le serveur

```php
<?php
// public/index.php — VERSION SERVEUR (adapter les chemins)

// Pointer vers laravel hors public_html
define('LARAVEL_START', microtime(true));

require __DIR__.'/../cd2c_app/vendor/autoload.php';

$app = require_once __DIR__.'/../cd2c_app/bootstrap/app.php';

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
)->send();
$kernel->terminate($request, $response);
```

### 4.4 Upload via FileZilla ou scp

**Option A — FileZilla (recommandé débutants) :**
1. Télécharger FileZilla : https://filezilla-project.org
2. Hôte : `sftp://cd2c.org`, Port `22`, vos identifiants cPanel
3. Uploader `cd2c_app/` → `/home/cd2cuser/cd2c_app/`
4. Uploader `public/` → `/home/cd2cuser/public_html/`

**Option B — SSH + scp (serveurs VPS) :**
```bash
# Depuis votre machine locale
scp -r . cd2cuser@cd2c.org:~/cd2c_app/
scp -r ./public/. cd2cuser@cd2c.org:~/public_html/
```

---

## ÉTAPE 5 — Configuration PHP via .htaccess (public_html)

Créer/éditer `/home/cd2cuser/public_html/.htaccess` :

```apache
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    # Force HTTPS
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    # Redirection www → non-www
    RewriteCond %{HTTP_HOST} ^www\.cd2c\.org [NC]
    RewriteRule ^ https://cd2c.org%{REQUEST_URI} [L,R=301]

    # Laravel front controller
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

# PHP 8.2
AddHandler application/x-httpd-php82 .php

# Sécurité headers
<IfModule mod_headers.c>
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-XSS-Protection "1; mode=block"
    Header always set Referrer-Policy "strict-origin-when-cross-origin"
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
    Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.google.com https://maps.googleapis.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https:; connect-src 'self'"
</IfModule>

# Protection fichiers sensibles
<Files .env>
    Order allow,deny
    Deny from all
</Files>
<Files composer.json>
    Order allow,deny
    Deny from all
</Files>

# Cache assets statiques
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css "access plus 1 year"
    ExpiresByType application/javascript "access plus 1 year"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/jpg "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/svg+xml "access plus 1 month"
</IfModule>

# Compression Gzip
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/css application/javascript text/xml application/json
</IfModule>
```

---

## ÉTAPE 6 — Configuration PHP (php.ini ou .user.ini)

Créer `/home/cd2cuser/cd2c_app/.user.ini` :

```ini
; PHP 8.2 — CD2C Platform
memory_limit = 256M
upload_max_filesize = 20M
post_max_size = 25M
max_execution_time = 120
max_input_time = 60
date.timezone = Africa/Douala
display_errors = Off
log_errors = On
error_log = /home/cd2cuser/logs/php_errors.log

; Sessions
session.gc_maxlifetime = 7200
session.cookie_secure = 1
session.cookie_httponly = 1
session.cookie_samesite = Strict

; OPcache
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 60
```

---

## ÉTAPE 7 — Terminal SSH (Namecheap SSH Access)

Dans **cPanel > SSH Access** → Activer l'accès SSH

```bash
# Se connecter en SSH
ssh cd2cuser@cd2c.org

# Aller dans le dossier Laravel
cd ~/cd2c_app

# Exécuter les migrations et seeders
php8.2 artisan migrate --force
php8.2 artisan db:seed --force

# Créer le lien symbolique storage
php8.2 artisan storage:link

# Optimiser pour la production
php8.2 artisan config:cache
php8.2 artisan route:cache
php8.2 artisan view:cache
php8.2 artisan event:cache

# Créer l'admin Filament
php8.2 artisan make:filament-user
# → Entrer : admin@cd2c.org + mot de passe fort

# Vérifier les permissions
chmod -R 755 storage bootstrap/cache
chmod -R 644 .env
```

---

## ÉTAPE 8 — SSL / HTTPS (Let's Encrypt gratuit)

Dans **cPanel > SSL/TLS > Let's Encrypt™ SSL** :

1. Cliquer "Issue" pour `cd2c.org` et `www.cd2c.org`
2. Attendre 2-3 minutes
3. Vérifier : https://cd2c.org → cadenas vert 🔒

---

## ÉTAPE 9 — Cron Jobs pour les rappels fiscaux

Dans **cPanel > Cron Jobs** :

| Fréquence | Commande |
|-----------|----------|
| Chaque minute | `* * * * * /usr/local/bin/php8.2 /home/cd2cuser/cd2c_app/artisan schedule:run >> /dev/null 2>&1` |

Cette commande active le planificateur Laravel qui exécutera :
- Les rappels fiscaux IGS à 08h00 chaque jour
- Le nettoyage des sessions
- Les rapports hebdomadaires admin

---

## ÉTAPE 10 — Configuration Email (Mailgun ou SMTP)

### Option A : Mailgun (recommandé)
1. Créer un compte sur https://mailgun.com
2. Ajouter le domaine `cd2c.org`
3. Configurer les DNS MX/DKIM/SPF dans Namecheap
4. Dans `.env` :
```env
MAIL_MAILER=mailgun
MAILGUN_DOMAIN=cd2c.org
MAILGUN_SECRET=key-XXXXXXXXXXXXXX
MAIL_FROM_ADDRESS=noreply@cd2c.org
```

### Option B : SMTP Namecheap Shared (simple)
```env
MAIL_MAILER=smtp
MAIL_HOST=mail.privateemail.com
MAIL_PORT=587
MAIL_USERNAME=noreply@cd2c.org
MAIL_PASSWORD=votre_mot_de_passe_email
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=noreply@cd2c.org
MAIL_FROM_NAME="CD2C Plateforme"
```

---

## ÉTAPE 11 — Vérifications post-déploiement

```bash
# Test de la page d'accueil
curl -I https://cd2c.org
# → HTTP/2 200

# Test simulateur IGS (API)
curl -X POST https://cd2c.org/api/v1/calculer-igs \
  -H "Content-Type: application/json" \
  -d '{"ca_ht": 8000000, "type": "commercial"}'
# → {"eligible_igs":true,"classe":7,...}

# Test HTTPS
curl -I http://cd2c.org
# → HTTP/1.1 301 (redirection vers HTTPS)

# Test admin Filament
curl -I https://cd2c.org/admin
# → HTTP/2 302 (redirection vers /admin/login)
```

### Checklist finale

- [ ] Page d'accueil accessible : https://cd2c.org
- [ ] Simulateur IGS fonctionne : https://cd2c.org/simulateurs/igs
- [ ] Formulaire adhésion : https://cd2c.org/adhesion
- [ ] Admin FilamentPHP : https://cd2c.org/admin
- [ ] HTTPS actif (cadenas vert)
- [ ] Redirection HTTP → HTTPS OK
- [ ] Emails de confirmation envoyés
- [ ] Cron job actif (rappels fiscaux)
- [ ] Score Lighthouse > 85 (Performance) / > 90 (Accessibilité)
- [ ] Aucune erreur dans les logs : `tail -f ~/cd2c_app/storage/logs/laravel.log`

---

## MISES À JOUR (post-lancement)

```bash
# Se connecter en SSH
ssh cd2cuser@cd2c.org
cd ~/cd2c_app

# Activer le mode maintenance
php8.2 artisan down --render="errors.maintenance"

# Mettre à jour les fichiers (via FTP ou git pull si configuré)
# git pull origin main

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

# Migrations (nouvelles tables)
php8.2 artisan migrate --force

# Vider et reconstruire les caches
php8.2 artisan optimize:clear
php8.2 artisan optimize

# Réactiver le site
php8.2 artisan up
```

### Mise à jour annuelle du barème IGS (chaque janvier, nouvelle LF)

```bash
# Mettre à jour le fichier BaremeIgsSeeder.php avec les nouveaux montants
# puis :
php8.2 artisan db:seed --class=BaremeIgsSeeder --force
php8.2 artisan cache:clear
```

---

## COÛTS EXPLOITATION ANNUELS (rappel)

| Service | Coût/an |
|---------|---------|
| Namecheap Stellar Business | ~110 000 FCFA |
| Domaine cd2c.org | ~9 000 FCFA |
| SSL Let's Encrypt | 0 FCFA |
| SMS Cameroun (500/mois) | ~37 000 FCFA |
| Email transactionnel Mailgun Flex | 0-21 000 FCFA |
| Backup Backblaze B2 | ~12 000 FCFA |
| Maintenance & mise à jour CGI annuelle | ~250 000 FCFA |
| **TOTAL** | **≈ 440 000 FCFA/an** |

---

## SUPPORT

- Documentation Laravel 11 : https://laravel.com/docs/11.x
- Documentation FilamentPHP 3 : https://filamentphp.com/docs
- Support Namecheap : https://www.namecheap.com/support/
- **Maître d'œuvre :** Ets DIGITECH SOFT TRADING & PARTNER — Bertoua

---
*© 2026 CD2C — Ets DIGITECH SOFT | CONFIDENTIEL | v2.0*
