# Installer le CMS de Total.js et se connecter la première fois

> Exécutez le CMS avec Node.js ou Docker sur le port 8000, connectez-vous avec l’identifiant et le mot de passe générés au premier démarrage, découvrez les trois façons d’authentifier l’admin et où vivent les données du site.

Framework: cms
Product: CMS (cms@8071e48)
Language: fr
Content-SHA256: fbdefebc185a59ef5ac77368785b628a04a15da5dd6f7ece713035189d057f58
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

## L’exécuter

Le CMS n’a besoin que de Node.js : ni base de données, ni service externe.

```bash
git clone https://github.com/totaljs/cms.git
cd cms
npm install
npm run start
```

`npm run start` exécute `node index.js 8000` ; le port est facultatif et la valeur par défaut est `8000`. Avec Docker :

```bash
docker pull totalplatform/cms
docker run -p 8000:8000 totalplatform/cms
```

## La première connexion

Au premier démarrage, le CMS crée son unique administrateur avec un **identifiant et un mot de passe aléatoires**. Ouvrez `http://localhost:8000/admin/` : jusqu’à la première connexion réussie, la page les affiche dans un cadre avec un bouton qui remplit le formulaire. Ensuite, la copie en clair du mot de passe est supprimée des préférences et le cadre n’apparaît plus ; utilisez donc tout de suite le profil de l’admin pour définir votre propre identifiant et mot de passe, et faites la première connexion dès que vous démarrez une nouvelle installation.

Tant que vous n’avez pas créé la première page, l’adresse `/` redirige vers `/admin/` tant que le mot de passe est encore celui qui a été généré ; dès qu’une page avec l’adresse `/` existe, `/` sert votre site.

## Trois façons d’authentifier l’admin

L’admin vit sous l’adresse de la ligne `$api : /admin/` du fichier `config`. La fonction `AUTH` de `definitions/auth.js` décide pour les requêtes de ce chemin :

| Mode | Quand | Comment |
|---|---|---|
| Session | par défaut | un cookie chiffré avec le `salt` du compte ; l’identifiant et le mot de passe sont vérifiés avec SHA-256 et ce sel |
| Jeton | la ligne `token : <value>` existe dans `config` | envoyez-le dans l’en-tête `x-token` : la requête s’exécute comme un utilisateur intégré appelé *Bot*, un administrateur (`sa`). Dix tentatives erronées bloquent l’adresse, et un mauvais jeton ne reçoit aucune réponse (la requête se termine par un timeout) |
| OpenPlatform | les réglages contiennent `op_reqtoken` et `op_restoken` | les personnes se connectent avec [OpenPlatform](/en/openplatform/how-an-app-connects/) et ses groupes décident des permissions `pages`, `layouts`, `widgets`, `navigation`, `posts`, `files`, `redirects`, `variables`, `settings` et `admin` |

Les pages publiques utilisent la fonction `FUNC.auth` si votre code la définit (voir [pages, layouts et navigation](/en/cms/pages-layouts-and-navigation/)) ; sans elle, tout visiteur est anonyme.

## Où vivent les données

| Emplacement | Ce qu’il contient |
|---|---|
| `databases/config.json` | valeurs générées de l’installation |
| `databases/memorize_account.json` | l’administrateur : nom, identifiant, hachage du mot de passe, nom du cookie et sel |
| `databases/fs-db/` | le stockage de fichiers : les métadonnées du site (pages, layouts, widgets, navigation, redirections, variables, configuration) et le HTML de chaque page et layout, les fichiers envoyés et les articles |

Pour déplacer le site, copiez le dossier `databases/` ou utilisez la sauvegarde de l’admin ([l’API de l’admin](/en/cms/the-admin-api/)).
