# Exigences OVH Pro pour Event'Go

État de référence : code de la branche `migration-ovh`, avant toute réécriture PHP.

Ce document distingue les exigences de la future application des caractéristiques qui doivent être confirmées dans le Manager OVH du contrat effectivement payé. Les chiffres de l'offre Pro actuellement commercialisée ne prouvent pas les quotas d'un contrat plus ancien.

## Environnement d'exécution

### PHP

- Minimum de conception : **PHP 8.2**.
- Cible recommandée : **PHP 8.3 ou 8.4**, en environnement OVH `stable64`.
- Apache : **2.4**, avec prise en charge de `.htaccess` et `mod_rewrite`.
- Aucun processus Node.js permanent, worker, WebSocket ou tâche de fond n'est requis sur OVH.
- Node.js reste utilisable hors OVH pour compiler les ressources statiques et exécuter les tests existants.

OVH liste actuellement PHP 8.2 à 8.5 dans l'environnement `stable64` de ses hébergements Web : [versions disponibles](https://help.ovhcloud.com/csm/asia-web-hosting-languages-versions?id=kb_article_view&sysparm_article=KB0067108).

### Extensions PHP obligatoires

| Extension | Usage |
| --- | --- |
| `PDO` et `pdo_mysql` | Accès MySQL avec requêtes préparées |
| `json` | Corps et réponses des API |
| `mbstring` | Validation et manipulation sûre des textes UTF-8 |
| `fileinfo` | Détection serveur du type MIME des images |
| `openssl` | Génération sûre des jetons et communications HTTPS |
| `filter` | Validation des adresses e-mail et entrées |

Extensions conditionnelles :

- `curl` : obligatoire si l'envoi d'e-mail utilise l'API HTTPS Resend ; inutile avec `mail()` ou SMTP natif.
- `intl` : recommandé pour produire les dates françaises des pages publiques ; un formatage PHP déterministe peut le remplacer.
- `gd` : recommandé seulement si une vérification supplémentaire, un redimensionnement ou une recompression d'image est ajouté. Il n'est pas nécessaire pour conserver strictement le comportement actuel.

PHP 8.3 et MySQL 8 sont confirmés sur l'hébergement OVH Pro. La présence
effective des extensions listées reste à contrôler avant le déploiement.

## Base MySQL

### Capacité fonctionnelle requise

- Une base **MySQL** incluse dans l'hébergement, accessible depuis les scripts PHP du même hébergement.
- Encodage `utf8mb4` et collation Unicode adaptée au français.
- InnoDB.
- Un utilisateur limité à la seule base Event'Go.
- Transactions, index uniques et requêtes préparées.

Le modèle courant contient une seule table et des données textuelles légères. Hors images, les besoins initiaux sont très faibles :

- moins de 10 Mo pour 10 000 événements avec index, selon la longueur réelle des descriptions ;
- enveloppe recommandée de départ : **100 Mo** ;
- seuil d'alerte recommandé : 70 % du quota de la base.

L'offre Pro actuellement publiée annonce 10 bases de 2 Go et 250 Go de SSD, mais ces valeurs doivent être vérifiées sur le contrat existant : [offre Pro actuelle](https://www.ovhcloud.com/fr/web-hosting/business/).

À vérifier manuellement :

1. qu'une base incluse est libre ;
2. son moteur et sa version exacte ;
3. son quota ;
4. le nom d'hôte, le port, le nom de base et l'utilisateur ;
5. les modalités de sauvegarde/restauration ;
6. la présence éventuelle d'anciennes données dans la base envisagée.

## Routage Apache et `.htaccess`

Les règles devront :

1. servir directement les fichiers existants (`-f`) et dossiers existants (`-d`) ;
2. conserver `/`, `/spirigo` et les ressources statiques ;
3. router `/e/{slug}` vers le contrôleur PHP de page publique ;
4. servir le shell de gestion pour `/manage/{token}` sans exposer le token ailleurs ;
5. router exactement les API :
   - `/api/events`
   - `/api/manage/{token}`
   - `/api/uploads`
   - `/api/images/{key}`
6. préserver la méthode HTTP (`GET`, `POST`, `PATCH`, `DELETE`) ;
7. refuser les chemins inattendus et la traversée de répertoires ;
8. imposer HTTPS sur le domaine final ;
9. ne jamais réécrire les ressources compilées vers PHP ;
10. interdire l'exécution de scripts dans le dossier d'upload.

OVH documente l'usage de `RewriteEngine` et `RewriteRule` sur un hébergement Web : [réécriture d'URL avec `.htaccess`](https://help.ovhcloud.com/csm/en-gb-web-hosting-htaccess-url-rewriting?id=kb_article_view&sysparm_article=KB0052853).

La configuration exacte ne sera créée qu'à l'étape 3.

## Upload et stockage des images

Comportement actuel à conserver :

- champ multipart nommé `image` ;
- formats acceptés : JPEG, PNG, WebP ;
- taille applicative maximale : **5 Mo** ;
- clé : UUID suivi de `.jpg`, `.png` ou `.webp` ;
- URL publique stable : `/api/images/{key}`.

Réglages PHP recommandés :

| Réglage | Valeur recommandée |
| --- | --- |
| `upload_max_filesize` | au moins `6M`, idéalement `8M` |
| `post_max_size` | au moins `8M`, idéalement `10M` |
| `memory_limit` | au moins `128M` |
| `max_file_uploads` | au moins `1` |
| `max_execution_time` | au moins 30 secondes |

Le contrôle applicatif doit rester fixé à 5 Mo même si PHP autorise davantage. Il faudra vérifier le type MIME avec `fileinfo`, valider que le contenu est une image, générer le nom côté serveur et ne jamais conserver le nom fourni par l'utilisateur.

### Espace disque

Les ressources statiques présentes dans `public/` occupent environ **5,7 Mio**. Une version compilée complète devrait rester sous 25 Mio hors images.

Projection maximale sans compression :

| Nombre d'images | Maximum théorique à 5 Mo/image |
| ---: | ---: |
| 1 000 | 5 Go |
| 10 000 | 50 Go |
| 50 000 | 250 Go |

La consommation réelle devrait être inférieure, mais aucune hypothèse de compression n'est faite dans le comportement actuel. Recommandations :

- réserver au minimum 10 Go au lancement ;
- alerte à 70 % du quota ;
- sauvegarde du dossier d'images ;
- suppression lors de la suppression d'un événement ;
- envisager ultérieurement une recompression, hors périmètre de la conversion fidèle.

## Envoi des e-mails

Le code actuel appelle Resend si `RESEND_API_KEY` est défini ; sinon la création réussit avec `emailSent: false`.

Ordre de préférence compatible avec la contrainte sans surcoût :

1. **envoi PHP fourni par l'hébergement OVH**, si les limites et la délivrabilité conviennent ;
2. SMTP d'une boîte e-mail déjà incluse dans le contrat, si OVH l'autorise pour cet usage ;
3. conservation de Resend uniquement si le compte existant et ses conditions n'ajoutent aucun coût.

Dans tous les cas :

- expéditeur sur le domaine final ;
- SPF, DKIM et DMARC à vérifier ;
- contenu HTML identique fonctionnellement ;
- l'échec d'e-mail ne doit pas annuler la création de l'événement ;
- journaliser le résultat sans stocker de secret ;
- surveiller les limites d'envoi et les blocages de sécurité.

OVH indique que ses offres Web peuvent envoyer des e-mails depuis un site/script, mais peut bloquer temporairement une activité anormale : [site et e-mails](https://help.ovhcloud.com/csm/en-sg-web-hosting-website-project?id=kb_article_view&sysparm_article=KB0067124), [activité anormale](https://help.ovhcloud.com/csm/en-au-web-hosting-resolve-anomalous-activity?id=kb_article_view&sysparm_article=KB0072795).

## Vérifications restantes avant déploiement

- Extensions PHP obligatoires présentes sous PHP 8.3.
- Identifiants de la nouvelle base MySQL dédiée.
- Politique de sauvegarde de la base et des images.
- Valeurs effectives de `upload_max_filesize`, `post_max_size` et `memory_limit`.
- Fonctionnement de `.htaccess`, `mod_rewrite` et des méthodes `PATCH`/`DELETE`.
- Solution d'e-mail retenue, quotas, adresse d'expédition et DNS.
- Domaine ou sous-domaine de recette disponible pour une étape ultérieure.
