# Instalar Flow e iniciar sesión por primera vez

> Ejecuta Flow con Node.js o Docker, ábrelo en el puerto 8000, inicia sesión con el login y la contraseña que Flow genera en el primer arranque y sabe en qué carpetas están tus datos.

Framework: flow
Product: Flow (flow@11.1)
Language: es
Content-SHA256: e01d9ff6241c289f57b3e57c4afd304a89f0afebe90c9fdb736044b8eb8586ee
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

## Ejecutarlo con Node.js

Flow solo necesita Node.js: ni base de datos ni servicio externo.

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

`npm run start` ejecuta `node index.js 8000`. El puerto es opcional en la línea de comandos y el valor por defecto es `8000`, así que abres `http://localhost:8000`. Añade `--release` para ejecutarlo en modo release.

## Ejecutarlo con Docker

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

El `docker-compose.yaml` del repositorio mapea el puerto 8000 y mantiene dos volúmenes: la carpeta `databases` (ajustes y usuario) y la carpeta `flowstream` (tus flujos). Conserva esos dos volúmenes y podrás sustituir el contenedor cada vez que actualices.

## El primer inicio de sesión

En el primer arranque Flow crea el único usuario de la aplicación con un **login y una contraseña aleatorios**. Hasta el primer inicio de sesión correcto, la página de acceso los muestra en un cuadro (*Default account*) con un botón **Fill in the form**: púlsalo e inicia sesión. A partir de ese momento Flow borra la copia en claro de la contraseña de sus preferencias y el cuadro deja de aparecer, así que abre enseguida el formulario de contraseña de la aplicación y define un login y una contraseña propios. Haz el primer inicio de sesión en cuanto arranques una instalación nueva, antes de que nadie más pueda alcanzar la dirección.

Algunos detalles del inicio de sesión, leídos del código fuente:

- La contraseña se guarda como hash SHA-256 con el `cookie_secret` de la instalación como sal, y la sesión es una cookie de un mes cifrada con el mismo secreto. Flow genera el nombre de la cookie y el secreto la primera vez y los guarda en `databases/config.json`.
- Tras varios intentos fallidos se bloquea una dirección (el bloqueo se limpia cada 15 minutos).
- Cuando los ajustes contienen los tokens de un OpenPlatform (`op_reqtoken`, `op_restoken`), la página de acceso se sustituye por el inicio de sesión de ese [OpenPlatform](/en/openplatform/how-an-app-connects/) y los permisos *Create Flows* y *Remove Flows* controlan quién puede crear y eliminar flujos.

## Dónde viven los datos

| Carpeta | Qué contiene |
|---|---|
| `databases/` | `config.json` (nombre y secreto de la cookie) y `memorize_preferences.json` (nombre, tokens, el usuario, el `env`, las URL de los componentes) |
| `flowstream/` | `database.json` con cada FlowStream: su diseño, componentes, variables y notas |
| `private/` | archivos que escriben los flujos y que puedes listar con el token de Flow |
| `public/cdn/` | caché de los componentes de la interfaz que Flow descarga la primera vez que se necesitan |

Para mover Flow a otra máquina, copia `databases/` y `flowstream/`.

## Actualizar

Descarga la nueva versión del repositorio (el archivo `version` te dice cuál ejecutas: `11.1` en la revisión documentada aquí) o descarga la nueva imagen de Docker y arráncala con los mismos volúmenes.
