# Lot L0 — déploiement du socle

Trois fichiers à déposer par FTP, dans l'ordre ci-dessous. Comptez vingt minutes.

---

## 1. Créer le sous-domaine

Console OVH › **Hébergements** › `archith.cluster029.hosting.ovh.net` › **Multisite** › *Ajouter un domaine ou sous-domaine*

| Champ | Valeur |
|---|---|
| Domaine | `plu.1936architectes.fr` |
| Dossier racine | `plu` |
| SSL | **coché** |
| Forcer HTTPS | **coché** |

Le certificat met quelques minutes à être délivré. Attendre qu'il soit actif avant l'étape 5 — sinon le diagnostic signalera HTTPS en bloquant, à juste titre.

---

## 2. Arborescence visée sur le serveur

```
www/
  plu/                   ← racine du sous-domaine, servie
    config.php
    diagnostic.php
    install.php
    .user.ini
  plu-data/              ← JAMAIS servie, créée par install.php
    cache/  exports/  pci/  log/  tmp/
```

`plu-data/` est volontairement **à côté** de `plu/`, pas dedans. C'est ce qui empêche de télécharger un export sans être authentifié. Le diagnostic vérifie ce point et le passe en bloquant s'il n'est pas respecté.

---

## 3. Renseigner `config.php`

Quatre valeurs à remplir :

- **`cle_acces`** — une chaîne longue et aléatoire. Sans elle, `diagnostic.php` et `install.php` répondent 404. Pour en générer une :
  ```bash
  php -r "echo bin2hex(random_bytes(24)), PHP_EOL;"
  ```
- **`db.pass`** — le mot de passe de la base `archithimages` (console OVH › Bases de données › … › *Modifier le mot de passe* si vous ne l'avez plus).
- **`smtp.user` / `smtp.pass` / `smtp.from`** — une adresse e-mail de l'hébergement, par exemple `plu@1936architectes.fr`. Créable dans l'espace client OVH (l'offre Perso en inclut 10).

Laisser `data_dir` tel quel : `__DIR__ . '/../plu-data'` produit exactement l'arborescence de l'étape 2.

---

## 4. Fichier `.user.ini`

À déposer dans `www/plu/`. Il relève les limites PHP pour les exports lourds :

```ini
max_execution_time = 300
memory_limit = 512M
date.timezone = Europe/Paris
default_socket_timeout = 60
```

OVH applique ce fichier avec quelques minutes de décalage. Le diagnostic affiche la valeur réellement en vigueur, pas celle demandée : c'est cette valeur-là qui compte.

---

## 5. Lancer le diagnostic

```
https://plu.1936architectes.fr/diagnostic.php?k=VOTRE_CLE
```

Il contrôle les dix points du cahier des charges §07, appelle les **seize sources de données depuis l'IP du serveur**, et exécute un vrai morceau de la chaîne terrain — téléchargement du MNT sur 449 × 372 m, calcul des courbes de niveau, écriture DXF — pour mesurer le budget temps réellement disponible.

Lecture du résultat :

| Verdict | Ce qu'il faut faire |
|---|---|
| **Hébergement conforme** | Passer à l'étape 6. |
| **Prêt, avec réserves** | Lire les réserves. `ext-bz2` absente est la seule qui change le périmètre : le cadastre DXF bascule sur le GeoJSON Etalab au lieu du DXF-PCI officiel. |
| **Points bloquants** | Chaque ligne indique le motif exact. Si toutes les sources échouent d'un coup, c'est le paquet de certificats CA : le diagnostic le nomme et donne la correction. |

Le formulaire SMTP en bas de page n'envoie rien tant que vous n'avez pas cliqué. Il affiche le dialogue SMTP complet en retour, mots de passe masqués.

---

## 6. Installer le socle

```
https://plu.1936architectes.fr/install.php?k=VOTRE_CLE
```

Trois opérations, toutes réexécutables sans risque :

1. **L'arborescence** `plu-data/` est créée, avec un `.htaccess` de sécurité en ceinture et bretelles.
2. **Le schéma** — 11 tables préfixées `plu_`, en `utf8mb4` / InnoDB. `CREATE TABLE IF NOT EXISTS` partout : relancer ne détruit rien.
3. **Les communes PACA** — bouton *Importer*. Environ 950 communes depuis `geo.api.gouv.fr`. Pour étendre le périmètre plus tard, ajouter le département dans `config.php` et recliquer.

Puis créer le **premier compte administrateur**. Douze caractères minimum, haché en Argon2id. Ce formulaire disparaît une fois l'admin créé : les comptes suivants passeront par les invitations du lot L1.

---

## 7. Déclarer la tâche planifiée

Console OVH › Hébergement › **Plus** › *Tâches planifiées* › **Ajouter*

| Champ | Valeur |
|---|---|
| Langage | PHP 8.3 |
| Commande | `diagnostic.php` |
| Fréquence | la plus élevée proposée |

Si OVH ne permet qu'une commande locale sans arguments, créer à la place un fichier `cron.php` d'une ligne :

```php
<?php $_GET = ['k' => 'VOTRE_CLE', 'cron' => '1']; require __DIR__ . '/diagnostic.php';
```

Revenir sur le diagnostic le lendemain : la ligne **Tâche planifiée** affichera l'intervalle réellement observé. C'est la seule façon de connaître la fréquence de cron sur l'offre Perso, la documentation OVH ne la donnant pas.

Ce n'est pas bloquant : le worker déclenché par le navigateur reste le mécanisme principal, le cron ne sert qu'à la purge du cache.

---

## 8. Une fois le lot L1 livré

**Supprimer `diagnostic.php` et `install.php` du serveur.** Ils divulguent la configuration de l'hébergement à quiconque connaît la clé d'accès, et `install.php` sait créer un administrateur.

---

## Ce qui n'a pas pu être testé avant livraison

- **Le schéma SQL** n'a pas été exécuté contre un vrai MySQL 8.4 : aucun serveur n'était disponible en local. La syntaxe est conforme à MySQL 8 et `install.php` affiche l'erreur exacte de chaque table en cas de refus. C'est le premier point à surveiller à l'étape 6.
- **L'envoi SMTP** dépend d'identifiants que je n'ai pas. Le client SMTP est écrit sans dépendance et journalise tout le dialogue, y compris les refus d'authentification.

Tout le reste a été exécuté : les seize sources répondent, la chaîne terrain tourne en 1,2 s pour 16 Mo, la projection Lambert 93 est juste à 2,7 mm, et la porte d'accès renvoie bien 404 sans la clé.
