# Guide de déploiement — javapax.fr (Laravel)

Ce guide décrit la mise en ligne du nouveau site Laravel à la place du WordPress, **sans changer les URLs** (SEO préservé).

---

## 0. Prérequis hébergement
Laravel 13 nécessite **PHP 8.2+** avec les extensions habituelles (`pdo_sqlite`, `mbstring`, `openssl`, `curl`, `fileinfo`, `tokenizer`, `xml`, `ctype`, `bcmath`, `gd`).

Deux cas :
- **VPS / serveur dédié** (recommandé) : contrôle total, idéal.
- **Hébergement mutualisé OVH** : possible si PHP 8.2+ et accès SSH/composer. La racine web doit pointer sur `public/`.

---

## 1. Mettre les fichiers en ligne
```bash
# Sur le serveur
git clone <votre-repo> javapax   # ou transfert FTP du dossier
cd javapax
composer install --no-dev --optimize-autoloader
npm install && npm run build
```

## 2. Configuration `.env` (production)
Copier `.env` et adapter :
```env
APP_ENV=production
APP_DEBUG=false
APP_URL=https://www.javapax.fr

DB_CONNECTION=sqlite            # database/database.sqlite

# Brevo (déjà testé)
MAIL_MAILER=smtp
MAIL_HOST=smtp-relay.brevo.com
MAIL_PORT=587
MAIL_USERNAME=9c57f8001@smtp-brevo.com
MAIL_PASSWORD=xsmtpsib-...      # votre clé Brevo
MAIL_FROM_ADDRESS="contact@javapax.fr"
MAIL_FROM_NAME="JavaPax Moulleau"

# Calendrier Google
JAVAPAX_ICAL_URLS="https://calendar.google.com/calendar/ical/.../basic.ics"

# Avis Google (plus tard, si facturation réactivée)
GOOGLE_PLACES_KEY=
GOOGLE_PLACE_ID=
```
```bash
php artisan key:generate
touch database/database.sqlite
php artisan migrate --force
php artisan wp:import          # importe le contenu (si pas déjà fait / pour resync)
php artisan storage:link
```

## 3. Optimisation production
```bash
php artisan config:cache
php artisan route:cache
php artisan view:cache
chmod -R 775 storage bootstrap/cache
```

## 4. Serveur web
- **Racine** : `…/javapax/public`
- **Nginx** : `try_files $uri $uri/ /index.php?$query_string;`
- **Apache** : le `.htaccess` de `public/` gère déjà la réécriture.
- **HTTPS** : certificat (Let's Encrypt). Forcer HTTP→HTTPS.
- **www** : rediriger `javapax.fr` → `https://www.javapax.fr` (cohérent avec les canoniques/sitemap).

## 5. Planificateur (synchro iCal automatique)
Ajouter au cron du serveur :
```
* * * * * cd /chemin/vers/javapax && php artisan schedule:run >> /dev/null 2>&1
```
(la commande `ical:sync` tournera toutes les heures)

## 6. ⚠️ Brevo — envoi par API HTTPS + autorisation d'IP
Les emails partent via l'**API HTTPS de Brevo** (`MAIL_MAILER=brevo`, `BREVO_API_KEY` dans `.env`) — méthode compatible avec l'hébergement mutualisé OVH (le SMTP sortant externe y est bloqué).

Brevo applique une **restriction par IP** (SMTP **et** API). Deux options :
- **(Recommandé) Désactiver la restriction d'IP** : la clé API reste le secret. → https://app.brevo.com/security/authorized_ips
- **Ou** autoriser l'**IP de sortie du serveur OVH** sur cette même page. Pour la connaître, en SSH sur l'hébergement :
  ```bash
  curl -s https://api.ipify.org ; echo        # IPv4 sortante
  curl -s https://api64.ipify.org ; echo      # IPv6 sortante (autoriser aussi si présente)
  ```
  Autoriser l'IPv4 **et** l'IPv6 retournées (l'IP de test `86.213.8.87` peut être retirée).

> Vérifier l'envoi après déploiement :
> ```bash
> php artisan tinker --execute='Mail::raw("test prod", fn($m)=>$m->to("contact@javapax.fr")->subject("Test prod"));'
> ```

## 7. Bascule DNS (jour J)
1. Vérifier que tout fonctionne via l'IP/URL de préprod.
2. Modifier l'enregistrement **A** (et `www`) du domaine chez OVH pour pointer vers le nouveau serveur.
3. **Conserver les enregistrements MX** (`mx3/mx4.mail.ovh.net`) → les emails/redirections OVH continuent de fonctionner.
4. Attendre la propagation DNS (jusqu'à quelques heures).

## 8. Vérifications post-déploiement
```bash
# Toutes les URLs répondent (depuis le serveur)
curl -I https://www.javapax.fr/
curl -I https://www.javapax.fr/tarifs/
curl -I https://www.javapax.fr/sitemap.xml
```
- [ ] Formulaire de contact → email reçu sur `famille@baumberger.me`
- [ ] Calendrier de disponibilité affiché
- [ ] Back-office `/admin` accessible — **changer le mot de passe admin**
- [ ] Soumettre le `sitemap.xml` dans Google Search Console
- [ ] Vérifier quelques anciennes URLs indexées (pas de 404)

## 9. Sécurité
- Changer le mot de passe admin : `/admin` → profil, ou `php artisan tinker` :
  ```php
  $u = App\Models\User::first(); $u->password = bcrypt('NOUVEAU_MDP'); $u->save();
  ```
- `APP_DEBUG=false` en production (déjà ci-dessus).
- Restreindre la clé Google Places (référents `*.javapax.fr`) quand elle sera activée.
