# Installare il CMS di Total.js e accedere per la prima volta

> Esegui il CMS con Node.js o Docker sulla porta 8000, accedi con il login e la password che genera al primo avvio, scopri i tre modi di autenticare l’admin e dove vivono i dati del sito.

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

## Eseguirlo

Il CMS ha bisogno solo di Node.js: nessun database, nessun servizio esterno.

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

`npm run start` esegue `node index.js 8000`; la porta è facoltativa e il valore predefinito è `8000`. Con Docker:

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

## Il primo accesso

Al primo avvio il CMS crea il suo unico amministratore con un **login e una password casuali**. Apri `http://localhost:8000/admin/`: fino al primo accesso riuscito la pagina li mostra in un riquadro con un pulsante che compila il modulo. Dopo, la copia in chiaro della password viene cancellata dalle preferenze e il riquadro non compare più, quindi usa subito il profilo dell’admin per impostare un login e una password tuoi, e fai il primo accesso appena avvii una nuova installazione.

Finché non crei la prima pagina, l’indirizzo `/` reindirizza a `/admin/` mentre la password è ancora quella generata; quando esiste una pagina con l’indirizzo `/`, `/` serve il tuo sito.

## Tre modi di autenticare l’admin

L’admin vive sotto l’indirizzo della riga `$api : /admin/` del file `config`. La funzione `AUTH` di `definitions/auth.js` decide per le richieste di quel percorso:

| Modalità | Quando | Come |
|---|---|---|
| Sessione | il predefinito | un cookie cifrato con il `salt` dell’account; login e password sono verificati con SHA-256 e quel sale |
| Token | la riga `token : <value>` esiste in `config` | invialo nell’intestazione `x-token`: la richiesta viene eseguita come un utente integrato chiamato *Bot*, un amministratore (`sa`). Dieci tentativi errati bloccano l’indirizzo, e un token errato non riceve alcuna risposta (la richiesta termina con un timeout) |
| OpenPlatform | le impostazioni contengono `op_reqtoken` e `op_restoken` | le persone accedono con [OpenPlatform](/en/openplatform/how-an-app-connects/) e i suoi gruppi decidono i permessi `pages`, `layouts`, `widgets`, `navigation`, `posts`, `files`, `redirects`, `variables`, `settings` e `admin` |

Le pagine pubbliche usano la funzione `FUNC.auth` se il tuo codice la definisce (vedi [pagine, layout e navigazione](/en/cms/pages-layouts-and-navigation/)); senza di essa ogni visitatore è anonimo.

## Dove vivono i dati

| Posizione | Cosa contiene |
|---|---|
| `databases/config.json` | valori generati dell’installazione |
| `databases/memorize_account.json` | l’amministratore: nome, login, hash della password, nome del cookie e sale |
| `databases/fs-db/` | l’archivio di file: i metadati del sito (pagine, layout, widget, navigazione, reindirizzamenti, variabili, configurazione) e l’HTML di ogni pagina e layout, i file caricati e gli articoli |

Per spostare il sito, copia la cartella `databases/` o usa il backup dell’admin ([l’API dell’admin](/en/cms/the-admin-api/)).
