# Mettre en ligne une instance

:::tip{title="En bref"}

- Cinq étapes : **configurer** l'instance, **publier** ses données, **créer** le projet Vercel avec son domaine, **ajouter** le CNAME chez le registrar, **vérifier** l'adresse servie.
- Une instance servie sous `lucarne.vicode.fr` est une **démonstration** : non indexée, avec un bandeau.
  :::

## 🛠️ Les étapes

<Mermaid
  title="D'un établissement candidat à son adresse publique"
  chart={`flowchart LR
  C["1. Configurer<br/>instances/&lt;id&gt;/"]
  D["2. Publier les données<br/>data/public/&lt;id&gt;/"]
  V["3. Projet Vercel<br/>+ domaine"]
  N["4. CNAME<br/>registrar vicode.fr"]
  K["5. Vérifier<br/>&lt;id&gt;.lucarne.vicode.fr"]
  C --> D --> V --> N --> K`}
/>

### 1. Configurer

Suivre [Marque blanche](/architecture/marque-blanche) : copier `instances/paris1/`, changer l'identifiant (celui de l'adresse), la charte, le périmètre (ROR, scanR, OpenAlex, HAL) et l'enregistrer dans `src/config/index.ts`. Les ROR des candidats sont dans le [catalogue](/plan/instances).

### 2. Publier les données

```bash
pnpm data:probe --instance <id>      # ce que les sources savent du périmètre
pnpm data:extract --instance <id>    # moisson complète
pnpm data:build --instance <id>      # data/public/<id>/, à commiter : Vercel ne moissonne pas
```

### 3. Créer le projet Vercel et rattacher le domaine

```bash
pnpm vercel:project <id> --domain <id>.lucarne.vicode.fr --demo
```

`--domain` rattache l'adresse au projet et en fait l'adresse publique (`NEXT_PUBLIC_SITE_URL`) ; `--demo` pose `NEXT_PUBLIC_DEMO=true`. Pour la documentation : `pnpm vercel:project docs --domain lucarne.vicode.fr`.

Les projets existants gardent leur nom (`saclay-research`, `paris1-research`, `saclay-research-docs`) : changer le nom par défaut en créerait de nouveaux. Pour un projet existant, passer `--name <nom actuel>` si besoin.

### 4. Ajouter le CNAME

Chez le registrar de `vicode.fr`, un enregistrement par adresse :

| Nom              | Type  | Cible                                  |
| ---------------- | ----- | -------------------------------------- |
| `lucarne`        | CNAME | valeur affichée par Vercel à l'étape 3 |
| `saclay.lucarne` | CNAME | idem                                   |
| `paris1.lucarne` | CNAME | idem                                   |
| `<id>.lucarne`   | CNAME | idem, pour chaque nouvelle instance    |

Vercel peut demander un enregistrement TXT pour prouver la propriété de `vicode.fr`. Un CNAME générique (`*.lucarne`) éviterait d'en ajouter un par instance, mais Vercel exige alors de lui confier les serveurs DNS de tout `vicode.fr`.

### 5. Vérifier

```bash
curl -s https://<id>.lucarne.vicode.fr/sitemap.xml | grep -m1 '<loc>'   # l'adresse, pas localhost
curl -s https://<id>.lucarne.vicode.fr/robots.txt                     # Disallow: / en démonstration
```

Puis ajouter l'instance à `LIVE_INSTANCES` (`docs/src/components/Instances.tsx`) : elle apparaît dans l'en-tête et sur l'accueil de la documentation. La passer en « En service » dans le [catalogue](/plan/instances).

## Instance de démonstration

Une instance servie sous `lucarne.vicode.fr` porte la charte d'un établissement sans être son site. `NEXT_PUBLIC_DEMO=true` :

- ferme `robots.txt` (`Disallow: /`) et pose `noindex, nofollow` sur chaque page ;
- affiche en haut de chaque page : « Démonstration de Lucarne : ce site n'est pas le site officiel de l'établissement, et ses données ne sont pas validées. »

Sur le domaine officiel d'un établissement, la variable est retirée et le site redéployé.

État en ligne au 03/11/2026 : les projets Vercel existent et les trois adresses répondent ([documentation](https://lucarne.vicode.fr), [Paris-Saclay](https://saclay.lucarne.vicode.fr), [Paris 1](https://paris1.lucarne.vicode.fr)), mais les deux instances tournent **sans** `NEXT_PUBLIC_DEMO` ni `NEXT_PUBLIC_SITE_URL` : voir le [catalogue](/plan/instances#-en-service).

Vérifié le 03/11/2026 sur un build complet de Paris 1 servi en local : `robots.txt` réduit à `Disallow: /`, balise `noindex, nofollow` et bandeau sur l'accueil et sur une fiche de structure, en français et en anglais ; le sitemap reste construit sur l'adresse publique. Test : `tests/unit/demo.test.ts`.
