# Installation OVH Pro — Event'Go

Ce document prépare une installation. Il ne déclenche aucun déploiement.

## Préparation locale

Depuis la racine du dépôt :

```bash
pnpm build:static
php php/scripts/build-release.php
```

Le résultat est `outputs/eventgo-ovh-release.zip` lorsque l'extension PHP Zip
est disponible. Sinon, le script produit le dossier
`outputs/eventgo-ovh-release/`, prêt à être compressé avec l'outil local de
votre choix. Vérifier son empreinte et son contenu avant transfert : aucun
`config.php`, fichier `.env`, image utilisateur, `node_modules`, `.next`, D1,
R2 ou PostgreSQL ne doit s'y trouver.

## Arborescence attendue sur OVH

Créer un dossier applicatif, par exemple `eventgo/`, puis configurer le dossier
racine du multisite dans le Manager OVH sur **`eventgo/public`**. Les dossiers
`src`, `config` et `storage` doivent donc être au-dessus de la racine Web.

```text
eventgo/
├── public/             ← racine du multisite OVH
├── src/
├── config/config.php   ← secret, jamais transféré dans public/
├── storage/images/
├── storage/logs/
├── storage/backups/
└── schema.sql
```

Ne pas utiliser le domaine définitif avant la recette sur un sous-domaine de
test. Le basculement de domaine/DNS nécessite un accord explicite séparé.

## Installation sur une base MySQL 8 neuve

1. Dans OVH Manager, créer la base MySQL 8 et un utilisateur dédié Event'Go.
2. Importer `schema.sql` une seule fois dans cette base vide via phpMyAdmin.
3. Copier `config/config.example.php` vers `config/config.php` hors de la
   racine Web. Renseigner DSN, utilisateur, mot de passe et URL HTTPS exacte.
4. Laisser `email.enabled` à `false` au premier passage.
5. Créer les dossiers `storage/images`, `storage/logs`, `storage/backups` et
   `storage/rate-limit`, avec droit d'écriture pour le processus PHP et sans
   accès Web.
6. Copier `.user.ini.example` vers `public/.user.ini` si les limites PHP ne
   sont pas réglées dans le Manager : 8 Mo upload, 10 Mo POST, 128 Mo mémoire.
7. Transférer le contenu du paquet, puis vérifier que `.htaccess` est présent.
8. Lancer depuis une tâche CLI/SSH OVH, si disponible :

   ```bash
   php eventgo/scripts/preflight.php
   ```

   S'il n'y a pas d'accès CLI, vérifier les mêmes points dans le Manager et
   avec la recette HTTP ci-dessous.

## Recette sans e-mail réel

Avec `email.enabled=false`, tester sur le sous-domaine de recette :

1. `/`, `/spirigo` et `/?publier=spirigo` ;
2. création d'un événement sans compte ;
3. upload JPEG, PNG et WebP de moins de 5 Mo ;
4. ouverture de `/e/{slug}` avec JavaScript désactivé ;
5. ouverture, modification puis suppression via `/manage/{token}` ;
6. réponses 404 pour un slug, une image et un token inconnus ;
7. présence des en-têtes `X-Content-Type-Options`, `Referrer-Policy`,
   `Content-Security-Policy` et `X-Frame-Options` ;
8. absence d'accès direct à `config/`, `storage/`, logs ou backups.

Après une recette valide seulement, autoriser un unique e-mail de test vers
une adresse de contrôle, puis activer `email.enabled=true` si la réception et
l'expéditeur sont corrects.

## Vérifications à faire manuellement dans OVH

- PHP 8.3, `pdo_mysql`, `fileinfo`, `mbstring`, `iconv` ;
- MySQL 8 et encodage utf8mb4 ;
- `.htaccess`, `mod_rewrite` et `mod_headers` actifs ;
- HTTPS actif avant de renseigner `public_url` ;
- quotas/limites de `mail()` et adresse expéditrice du domaine ;
- SPF, DKIM et DMARC pour le domaine expéditeur ;
- tâche planifiée disponible pour les sauvegardes ;
- restauration MySQL et accès aux sauvegardes vérifiés.
