Chapitre 03Démarrer
Démarrage local
Du poste vide à la première publication, sans dépôt distant ni hébergeur. Trois terminaux, une clé, dix minutes.
Prérequis
| Outil | Version | Pourquoi |
|---|---|---|
| Node.js | 20 ou plus (développé sous 22.14) | Astro 5, et les API web utilisées par les fonctions. |
| npm | 10 ou plus | Livré avec Node. npm create et les espaces de travail. |
| Git | toute version récente | Pour versionner le site. Pas nécessaire pour l'essai local. |
| Un dépôt Git accessible par API | GitHub | Seulement pour publier en ligne. Un faux service local est fourni. |
node -v # v20.x ou plus
npm -v
Tout fonctionne en PowerShell comme en Git Bash. Les commandes de cette documentation sont
écrites en syntaxe POSIX ; sous PowerShell, remplacez VAR=valeur commande par
$env:VAR = 'valeur'; commande, et && par ;.
Trois façons de commencer
Le cas courant
Un site neuf
npm create inline@latest mon-site — squelette, charte, contrôles, clé. C'est la voie décrite ci-dessous.
Pour travailler sur l'outil
Le dépôt de référence
Cloner le dépôt inline lui-même : il contient inline-core et un site d'exemple bilingue.
Site Astro existant
Ajouter l'intégration
npm install inline-core puis quatre adaptateurs de routes. Voir plus bas.
1. Créer le site
npm create inline@latest boulangerie-martin -- \
--nom "Boulangerie Martin" \
--courriel contact@boulangerie-martin.fr \
--langue fr
cd boulangerie-martin
npm install| Option | Défaut | Rôle |
|---|---|---|
--nom | nom du dossier | Nom du site, affiché dans le pied de page et l'aide. |
--courriel | contact@exemple.fr | Adresse de contact montrée au client quand il a besoin d'aide. |
--langue | fr | Code de la langue principale. Deux lettres minuscules. |
La commande refuse d'écrire dans un dossier existant et non vide. Elle produit :
boulangerie-martin/
astro.config.mjs intégration inline, sortie statique, i18n
package.json dev, build, serve:functions, mock:git, make:key, check
wrangler.toml configuration de l'hébergeur (fonctions)
.gitignore node_modules, dist, .astro, .dev.vars…
.env.example le SEUL fichier d'environnement versionné
.dev.vars accès d'essai local — ignoré par Git
functions/api/*.ts quatre adaptateurs de routes
scripts/ check-html, check-locales, check-logs, check-secrets,
make-key, mock-git-api
src/
content/config.ts déclaration de la collection
content/site.json navigation, coordonnées, pied de page
content/pages/fr/home.json
components/Testimonial.astro
layouts/Base.astro
lib/locales.ts les langues de CE site
pages/[lang]/[...slug].astro
styles/theme.css la charte — le fichier à reprendre
.github/workflows/ci.yml contrôles automatiques
Aucune logique d'édition : ni overlay, ni schéma, ni vérification d'identité, ni route
serveur. Tout cela arrive par inline-core, en dépendance versionnée. C'est
toute la différence entre un échafaudage et un copier-coller — le jour d'un correctif de
sécurité, npm update inline-core suffit.
La clé, affichée une seule fois
À la fin, la commande affiche la clé du site. Elle est déjà écrite dans
.dev.vars pour l'essai local, mais elle n'est stockée nulle part sous
forme lisible côté serveur : seule son empreinte argon2id existe. Une clé perdue se
régénère, elle ne se retrouve pas.
2. Lancer les trois processus
Trois terminaux, à la racine du projet :
-
Le faux dépôt Git
bash bash npm run mock:gitÉcoute sur
http://127.0.0.1:8787et imite les deux routes de l'API Contents de GitHub réellement utilisées. Les publications écrivent directement dans les fichiers du projet, comme le ferait un commit. Aide au développement uniquement. -
Le build
bash bash npm run buildConstruit
dist/. Le build échoue si le contenu ne passe pas le schéma, ou si undata-cmspointe vers une clé absente — c'est voulu. -
Le site et les fonctions
bash bash npm run serve:functionsSert
dist/et/functionssurhttp://127.0.0.1:8788. C'est ici qu'on édite.
npm run dev lance le serveur Astro seul : le site s'affiche,
mais /api/* n'existe pas, donc /admin ne peut pas ouvrir de
session et l'édition ne fonctionne pas. Pour éditer, il faut
npm run serve:functions. npm run dev sert à travailler la mise en
page, pas l'édition.
3. Première modification
- Ouvrir
http://127.0.0.1:8788/admin. - Coller la clé affichée à la création, valider.
- Vous arrivez sur le site, avec une barre en bas de l'écran.
- Cliquer sur un titre : il devient modifiable, une barre de variantes apparaît.
- Modifier le texte, puis cliquer sur Publier.
Avec le faux dépôt, la publication écrit dans src/content/pages/fr/home.json.
Relancez npm run build pour voir la modification figée dans le HTML — en
production, l'hébergeur le fait tout seul.
Le simulateur reproduit exactement ce parcours dans cette documentation : clé, overlay, édition, publication, conflit. Utile pour montrer l'outil avant de l'installer.
Les ports utilisés
| Port | Processus | Rôle |
|---|---|---|
4321 | npm run dev | Serveur Astro seul — mise en page, pas d'édition. |
8788 | npm run serve:functions | Site construit + fonctions. C'est l'adresse d'édition. |
8787 | npm run mock:git | Faux dépôt Git local. Changer avec MOCK_PORT. |
Le fichier .dev.vars
C'est le fichier d'environnement local, ignoré par Git, jamais déployé. Il est écrit par la commande de création, et ressemble à ceci :
# Essai local uniquement. Ignoré par Git, jamais déployé.
EDITOR_KEY_HASH=$argon2id$v=19$m=19456,t=2,p=1$<sel>$<empreinte>
SESSION_SECRET=<32 caractères au moins>
EDITOR_NAME=Éditeur du site
EDITOR_EMAIL=contact@boulangerie-martin.fr
GIT_PROVIDER=github
GIT_REPO=agence/boulangerie-martin
GIT_BRANCH=main
GIT_TOKEN=essai-local
GIT_API_BASE=http://127.0.0.1:8787
GIT_API_BASE est la ligne qui bascule vers le faux dépôt. La retirer fait
parler la fonction au vrai GitHub — avec un GIT_REPO et un
GIT_TOKEN réels. Le détail de chaque variable :
Référence.
.dev.vars, .env et tout fichier d'environnement réel sont ignorés
par Git. Le seul fichier d'environnement versionné est .env.example, qui ne
contient aucune valeur. npm run check vérifie en plus qu'aucun secret ne se
retrouve dans le dossier de build.
Régénérer les accès
Depuis le site — clé perdue, clé à changer
La clé n'est stockée nulle part sous forme lisible : seule son empreinte argon2id vit en variable d'environnement. Elle ne se retrouve donc pas, elle se régénère — et c'est voulu.
npm run make:keyLa commande affiche la nouvelle clé, son empreinte et un secret de session. Rien n'est écrit sur disque : ce qui n'est pas copié à ce moment-là est perdu. La suite — remplacer les variables, redéployer, transmettre — est dans Sécurité et authentification.
La commande n'est livrée avec le site que depuis cette version ; avant, elle n'existait que
dans le dépôt de référence. Trois lignes la rattrapent : copier
scripts/make-key.mjs depuis un site récent, puis
npm pkg set scripts.make:key="node scripts/make-key.mjs" et
npm install --save-dev @noble/hashes — la bibliothèque de hachage arrive bien
dans l'arbre par inline-core, mais rien ne garantit qu'elle soit hissée à la
racine. En attendant, la rotation reste possible depuis le dépôt de référence : c'est la
même empreinte, calculée avec les mêmes paramètres.
Depuis le dépôt de référence — préparer un site
# Accès complets d'un site : clé, empreinte, secret de session, variables, aide-mémoire
npm run create:site -- --nom "Boulangerie Martin" --depot agence/boulangerie-martin
# Idem, plus l'écriture d'un .dev.vars local prêt à l'emploi
npm run create:site -- --nom "Essai local" --ecrire
create:site affiche deux blocs qui ne voyagent pas ensemble : ce
qui part chez le client (une clé, une adresse) et ce qui part chez l'hébergeur (l'empreinte,
les secrets, le jeton), plus la liste de vérification d'avant livraison. Voir
Exploitation.
Dans un projet Astro qui existe déjà
-
Installer le paquet
bash bash npm install inline-core -
Déclarer l'intégration
astro.config.mjs js import { defineConfig } from 'astro/config'; import inline from 'inline-core/astro'; export default defineConfig({ output: 'static', integrations: [ inline({ locales: ['fr'], // la référence en premier support: { email: 'contact@agence.fr' }, // affichée au client // theme: 'src/styles/theme.css', // défaut // pages: { admin: true, help: true }, // false pour fournir les vôtres }), ], });L'intégration pose
/adminet/aide, construit l'overlay, injecte l'amorce d'édition, créesrc/media/library.tss'il manque, et refuse de démarrer si la sortie n'est pas statique. -
Écrire les quatre adaptateurs de routes
L'hébergeur découvre les routes par l'arborescence de
/functions, hors du build Astro : une intégration ne peut pas les injecter. Vingt lignes, écrites une fois.functions/api/save.ts ts import { createSaveRoute } from 'inline-core/server'; import { LOCALES } from '../../src/lib/locales'; const route = createSaveRoute({ locales: LOCALES }); export const onRequest = route.onRequest; export const onRequestPost = route.onRequestPost;Les trois autres sont identiques avec
createAuthRoute(),createContentRoute({ locales })etcreateUploadRoute(). Le détail : Référence des routes. -
Déclarer le schéma et la charte
src/content/config.ts ts import { defineCollection } from 'astro:content'; import { glob } from 'astro/loaders'; import { pageSchema } from 'inline-core/schema'; const pages = defineCollection({ loader: glob({ pattern: '**/*.json', base: './src/content/pages' }), schema: pageSchema, }); export const collections = { pages };src/layouts/Base.astro astro --- import 'inline-core/styles/tokens.css'; import '../styles/theme.css'; --- -
Générer une clé
Sans
EDITOR_KEY_HASH, l'édition est impossible — c'est l'état par défaut. Voir Sécurité.
Travailler sur inline-core lui-même
Le dépôt de référence est un espace de travail npm : packages/inline-core et
packages/create-inline y sont installés par lien, et le site à la racine les
consomme directement.
git clone <depot> inline && cd inline
npm install
npm run create:site -- --nom "Essai local" --ecrire # écrit .dev.vars, affiche la clé
npm run build
npm run serve:functions
npm test # toute la suite : git, auth, durcissement, amorçage, assainissement, médias…
npm run check # HTML brut, parité des langues, journaux, secrets
Pour éprouver les paquets tels qu'ils partiraient au registre, voir
Exploitation (test:scaffold et
test:pack).
Si ça ne démarre pas
| Symptôme | Cause probable |
|---|---|
/admin répond 404 | Vous êtes sur npm run dev sans avoir construit, ou l'intégration n'est pas déclarée. |
| La clé est refusée alors qu'elle est bonne | .dev.vars absent, ou EDITOR_KEY_HASH vide. Les variables ne sont relues qu'au (re)démarrage. |
| « Clé incorrecte » après cinq essais | C'est la limitation de débit : 5 tentatives par quart d'heure. Elle fonctionne. |
| La publication échoue en local | npm run mock:git n'est pas lancé, ou GIT_API_BASE manque dans .dev.vars. |
| L'image ne s'affiche pas après publication | Le fichier est dans le dépôt, mais le HTML n'est pas reconstruit. Relancer npm run build. |
| Erreur « Charte introuvable » | src/styles/theme.css manque, ou l'option theme pointe ailleurs. |
Liste complète : Dépannage et pièges connus.