# Déploiement - famille-letzelter.fr

App Laravel 13 (PHP 8.4) - site de la famille Letzelter.
Cible : hébergement mutualisé OVH `baumberger.me` (cluster110, `ssh ovh`), nouveau
domaine **www.famille-letzelter.fr** (acheté chez OVH le 2026-06-20).

## Architecture

- `members` - fiches famille (champs profil repris du gabarit iWeb + bio + avatar).
- `pages` - accueil (étymologie) & arbre généalogique.
- `photos` - galeries (par membre ou par page).
- `users` - comptes ; `is_admin` ; un compte ↔ une fiche (`members.user_id`).
- Espace membre : `/connexion` → `/mon-espace` (édite sa fiche, upload photos).
- Admin : `/admin` (créer fiches & comptes, rattacher, éditer toute fiche).

Contenu initial seedé depuis `database/seeders/content.json` + `database/seeders/media/`
(extrait de l'archive iWeb, tuiles décoratives et clip-art filtrés).

🔴 Compte admin d'amorçage : `admin@famille-letzelter.fr`. Son mot de passe de
seed a été publié dans ce fichier par le passé : **considérez-le comme compromis**.
Avant d'inviter la famille, neutralisez ce compte (il n'est plus nécessaire :
Alexandre et Jean-Louis ont chacun le leur) ou redéfinissez son mot de passe via
un lien signé : `php artisan famille:admin "admin@famille-letzelter.fr" "Admin" --days=7`.
Ne jamais réécrire un mot de passe en clair dans ce dépôt.

## Pré-requis côté OVH (Manager - extension « Claude in Chrome », compte HANDIVIA 33 TELIB)

1. **Rattacher le domaine** `famille-letzelter.fr` à l'hébergement `baumberger.me`
   (Web Cloud → Hébergements → baumberger.me → Multisite → *Ajouter un domaine*).
   Vérifier la zone DNS du domaine (A → IP cluster `213.186.33.x`).
2. **Dossier racine** (Multisite) de `www.famille-letzelter.fr` (+ apex) =
   `famille-letzelter/public`.
3. **Base MySQL** : Web Cloud → Hébergements → baumberger.me → *Bases de données* →
   créer une base (noter `host`, `db`, `user`, `password`).
4. **SSL** : Multisite → activer le certificat (Let's Encrypt gratuit) pour le domaine.

## Déploiement des fichiers (SSH)

```bash
# 1. Upload (depuis le Mac) - voir deploy.sh
bash deploy.sh

# 2. Sur le serveur
ssh ovh
cd ~/famille-letzelter
cp .env.production .env            # complété avec les infos MySQL (voir .env.production.example)
php composer.phar install --no-dev --optimize-autoloader   # ou `composer` si dispo
php artisan key:generate           # si APP_KEY non renseignée
php artisan migrate --force
php artisan db:seed --force        # peuple le contenu iWeb (idempotent)
php artisan storage:link
php artisan config:cache && php artisan view:cache
# JAMAIS route:cache ici : un cache de routes perime a deja masque toutes les
# nouvelles routes du site pendant une semaine.
chmod -R 775 storage bootstrap/cache
```

## Notes

- Le disque `public` est servi en **URL relative** (`/storage`) → marche en local et en prod
  sans dépendre de `APP_URL` (voir `config/filesystems.php`).
- `php artisan db:seed` est **idempotent** (`updateOrCreate`) : il (re)pose le contenu
  d'origine sans écraser les profils/photos ajoutés par la famille… sauf les champs seedés.
  Ne PAS relancer le seed après que la famille a commencé à remplir, sauf besoin précis.
- Sauvegarde de l'iWeb d'origine : `_resurrection-sites/_backups/FamilleLETZELTER_ORIGINAL_iweb_*.tar.gz`.
- Ancien site iWeb encore en ligne sur `http://letzelter.baumberger.me` (`~/www/FamilleLETZELTER`) - inchangé.
