Ir al contenido

Montar la instalación de un cliente

Cada cliente estrena su propia copia de la aplicación. No se comparte nada entre clientes: ni base de datos, ni ficheros, ni red.

Se crea una carpeta por cliente con el mismo contenido base: el compose.yaml, la plantilla de variables y el código. Lo único que cambia es el fichero .env.

La variable que lo distingue todo es CLIENTE. Con ella, los contenedores se llaman <cliente>-api y <cliente>-db, los volúmenes <cliente>-pgdata y <cliente>-archivos, y la red <cliente>-net. Sin ella, todo se llamaría organtia y dos clientes chocarían.

Variable Para qué Ejemplo
CLIENTE Nombre corto del cliente: da nombre a contenedores, volúmenes y red acme
RED_SUBNET Subred propia de esa instalación (dos instalaciones no pueden compartirla) 10.99.43.0/24
API_PORT Puerto local donde escucha la api (solo en loopback) 18012
DB_PORT_HOST Puerto local de PostgreSQL para las pruebas 54330
DB_NAME, POSTGRES_USER, POSTGRES_PASSWORD Base de datos de ese cliente —
ACCESO_CLAVE Contraseña inicial de la puerta de la oficina —
ACCESO_DIAS Días que dura la sesión antes de volver a pedir contraseña 7
TZ Zona horaria de la instalación y de sus crones Europe/Madrid
MARCA, CLIENTE Nombre que aparece en la interfaz Acme

Se construye la imagen una vez y se arranca. La misma imagen sirve para todos los clientes: lo que cambia es la configuración.

Al primer arranque se crean las tablas, se aplican las migraciones y se crea el usuario propietario con la contraseña de ACCESO_CLAVE.

Cada cliente tiene su dirección, del tipo nombre_cliente.organtia.com. En el proxy se añade un bloque que:

  1. Escucha ese nombre.
  2. Pide el certificado HTTPS automáticamente.
  3. Reenvía a la api de esa instalación, en su puerto local.

Nada más se publica: la base de datos y los ficheros no tienen puerta a internet.

  • Abrir la dirección y entrar con el usuario propietario.
  • Comprobar que la oficina tiene a la plantilla sentada.
  • Pedir un encargo pequeño y ver que se entrega.
  • Mirar el registro: la entrada de acceso y el encargo deben estar.

Se reconstruye la imagen de la api y se levanta de nuevo. Las migraciones pendientes se aplican solas. Las pruebas se pasan antes, en un contenedor aparte, contra una base de datos desechable.

  • No hace copias de seguridad: las hace el sistema de copias del servidor, a diario, sobre los volúmenes. La aplicación no guarda copias propias.
  • No se actualiza sola: las actualizaciones se deciden y se ejecutan a mano.