# Instalar o Flow e iniciar sessão pela primeira vez

> Execute o Flow com Node.js ou Docker, abra-o na porta 8000, inicie sessão com o login e a palavra-passe que o Flow gera no primeiro arranque e saiba em que pastas estão os seus dados.

Framework: flow
Product: Flow (flow@11.1)
Language: pt
Content-SHA256: 3a009de3ed29a6302c84331f9024b28f8237e1c94662df61109c9d6bdf8114f6
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

## Executá-lo com Node.js

O Flow só precisa de Node.js: nem base de dados nem serviço externo.

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

`npm run start` executa `node index.js 8000`. A porta é opcional na linha de comandos e o valor predefinido é `8000`, por isso abre `http://localhost:8000`. Acrescente `--release` para o executar em modo release.

## Executá-lo com Docker

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

O `docker-compose.yaml` do repositório mapeia a porta 8000 e mantém dois volumes: a pasta `databases` (definições e utilizador) e a pasta `flowstream` (os seus fluxos). Mantenha esses dois volumes e poderá substituir o contentor sempre que atualizar.

## O primeiro início de sessão

No primeiro arranque o Flow cria o único utilizador da aplicação com um **login e uma palavra-passe aleatórios**. Até ao primeiro início de sessão bem-sucedido, a página de acesso mostra-os numa caixa (*Default account*) com um botão **Fill in the form**: clique nele e inicie sessão. A partir desse momento o Flow apaga das suas preferências a cópia em claro da palavra-passe e a caixa deixa de aparecer, por isso abra logo o formulário de palavra-passe da aplicação e defina um login e uma palavra-passe seus. Faça o primeiro início de sessão assim que arrancar uma instalação nova, antes de mais alguém poder aceder ao endereço.

Alguns detalhes do início de sessão, lidos do código-fonte:

- A palavra-passe é guardada como hash SHA-256 com o `cookie_secret` da instalação como sal, e a sessão é um cookie de um mês cifrado com o mesmo segredo. O Flow gera o nome do cookie e o segredo da primeira vez e guarda-os em `databases/config.json`.
- Após várias tentativas falhadas um endereço é bloqueado (o bloqueio é limpo a cada 15 minutos).
- Quando as definições contêm os tokens de um OpenPlatform (`op_reqtoken`, `op_restoken`), a página de acesso é substituída pelo início de sessão desse [OpenPlatform](/en/openplatform/how-an-app-connects/) e as permissões *Create Flows* e *Remove Flows* controlam quem pode criar e remover fluxos.

## Onde vivem os dados

| Pasta | O que contém |
|---|---|
| `databases/` | `config.json` (nome e segredo do cookie) e `memorize_preferences.json` (nome, tokens, o utilizador, o `env`, os URL dos componentes) |
| `flowstream/` | `database.json` com cada FlowStream: o seu design, componentes, variáveis e notas |
| `private/` | ficheiros que os fluxos escrevem e que pode listar com o token do Flow |
| `public/cdn/` | cache dos componentes da interface que o Flow descarrega na primeira vez que são precisos |

Para mover o Flow para outra máquina, copie `databases/` e `flowstream/`.

## Atualizar

Descarregue a nova versão do repositório (o ficheiro `version` diz-lhe qual executa: `11.1` na revisão documentada aqui) ou obtenha a nova imagem Docker e inicie-a com os mesmos volumes.
