Skip to main content
Varias instancias explica el mecanismo — una palabra --tenant nombrando la misma instancia para ambos instaladores, y qué aporta --vhost. Esta página es la misma información reunida en una única ejecución, para el momento en que realmente tienes un segundo cliente que añadir. Nada de aquí se comparte con los tenants ya presentes en el host salvo los paquetes, Java, Node y el propio PostgreSQL — consulta Qué necesita cada instancia por su cuenta. Un tenant nuevo obtiene su propia base de datos, sus propios puertos, sus propios tokens operacionales y su propia elección de cuenta de servicio.
1

Elige el nombre y el diseño

Una palabra, usada de forma idéntica en ambos instaladores — es lo que permite a update encontrar más tarde la instancia correcta sin que vuelvas a teclear rutas.
Dos diseños, elige uno:Recurre a --vhost cuando la cuenta SSH o SFTP propia del tenant ya vive bajo /home — es lo que aísla el gateway de los archivos de esa cuenta, no simplemente una ruta distinta. Consulta Un virtualhost.
Bajo --vhost, --user no es opcional. Un directorio personal es 0750 y pertenece a su propia cuenta, y el instalador deliberadamente no cambia el propietario de un directorio que ya existe — de modo que un servicio ejecutándose con cualquier otra cuenta no puede recorrerlo.El fallo llega tarde y se lee como otra cosa: el panel muere en npm ci con can't cd to /home/<name>/panel/app, y el gateway arranca y luego no puede alcanzar su propia configuración. ProtectHome=tmpfs y BindPaths= hacen que el directorio sea visible dentro del namespace de la unidad; ninguno cambia un bit de permisos.Pasa la cuenta que posee el virtualhost a ambos instaladores.
--vhost sin --tenant significa otra cosa. Por sí solo mantiene un diseño plano heredado — PATH/{app,conf,data} — en lugar de PATH/panel. Esa forma existe para que los paneles instalados antes de --tenant sigan funcionando, y para un tenant nuevo deja en silencio el gateway y el panel en diseños diferentes. Pasa siempre ambos flags juntos.
2

Reserva los puertos

Cada tenant existente en el host ya ocupa un puerto SMPP, un puerto HTTP y un puerto de ops. Escoge un rango con el que el nuevo no pueda chocar:
--ops-port nunca se abre en el firewall, independientemente de lo que le pases — enlaza solo en loopback. --http-port es lo que la ESME o el cliente REST del cliente realmente alcanza, así que es el que hay que contrastar con ufw status antes de elegirlo.
3

Su propia base de datos

Un tenant, una base de datos — nunca un esquema compartido con las filas de otro tenant.
No se requiere un rol separado por tenant — un solo rol fireflo puede ser propietario de varias bases de datos — pero implica que una credencial filtrada de un tenant no puede leer la de otro. Consulta La base de datos.
4

Instalar el gateway

Bajo el diseño de virtualhost, añade --vhost /home/$TENANT --user $TENANT — ambos, por las advertencias del paso 1.Pregunta primero y te muestra cada decisión antes de escribir nada — añade --yes solo cuando confíes en la respuesta que imprimiría. --bootstrap escribe lo mínimo que necesita una base de datos nueva: una tabla de enrutamiento default, una tabla MESSAGE vacía, un listener SMPP, un login. Su contraseña generada se imprime una sola vez; captúrala.
Los flags aceptan valores separados por espacio. --vhost=/home/$TENANT es rechazado como opción desconocida en lugar de ser parseado, en ambos instaladores.
--bootstrap solo en una base de datos genuinamente vacía. Se niega en el momento en que encuentra una tabla de enrutamiento, un worker o un login — así que reinstalar un gateway cuya base de datos ya existe necesita --config-source db por sí solo. Pasarlo al revés es como una instalación termina o rechazándose a medias o arrancando sin nada a lo que enrutar.
Lista completa de flags en fireflo-install.
5

Verifica antes de añadir nada

El código de salida 4 aquí es esperado y correcto: el despliegue está bien, simplemente no tiene todavía a dónde enrutar. Se convierte en 0 una vez que existan un proveedor y una regla, en el paso siguiente — consulta Primera configuración.
6

Instalar el panel

Bajo el diseño de virtualhost, añade --vhost /home/$TENANT --user $TENANT y apunta --gateway-conf-dir a /home/$TENANT/gateway/conf. Instala el panel después del gateway — lee ese directorio.
--port nunca se deriva de --tenant. Se queda en 3000 a menos que se indique explícitamente, así que un segundo panel en el mismo host necesita el suyo o el instalador se niega en lugar de sobrescribir la unidad del primer tenant.
Tres cosas que resuelve por sí mismo a partir de --gateway-conf-dir: ambos tokens operacionales, la METRICS_DATABASE_URL de solo lectura y la URL de ops — que construye a partir del FIREFLO_OPS_PORT registrado de ese gateway, de modo que un --ops-port no predeterminado no requiere un segundo flag aquí.
--config-url nunca se deriva, a propósito — es la conexión que puede cambiar lo que se le factura a un cliente. Sin ella, el panel arranca en modo solo lectura para este tenant.Se omite deliberadamente en el comando anterior: pasada como flag, la contraseña de la base de datos acaba en el historial de tu shell y en la salida de ps. Omítela y el instalador la pide en su lugar — y ese prompt acepta la palabra literal same, que significa “reutiliza la conexión que se acaba de derivar del gateway”, que es la respuesta correcta siempre que un solo rol sea propietario de la base de datos del tenant.
7

TLS por delante, un origen por tenant

El panel habla HTTP plano en --port (por defecto 3000, y debe ser único por tenant en un host compartido — pasa uno explícitamente para cada tenant después del primero). Pon nginx o equivalente por delante, terminando TLS en un hostname propio de este tenant:
--public-url arriba debe coincidir exactamente con server_name — se escribe como AUTH_URL, y sin ella un cierre de sesión redirige a localhost independientemente de lo que reenvíe el proxy. Consulta TLS por delante.
8

Termina la configuración

bootstrap deja fuera deliberadamente un proveedor y una tarifa — nadie más puede adivinar las credenciales de un proveedor, y un precio inventado factura en silencio donde uno ausente aparece sin precio. Añade ambos, luego una regla de enrutamiento que nombre al proveedor, luego el primer login de cliente de este tenant — en ese orden, y por qué, en Primera configuración.
9

Envía uno, como haría un cliente

Un 200 significa aceptado, cobrado y encolado — observa el registro de llamada en el panel de este tenant para el resultado de la entrega.

Qué es genuinamente nuevo frente a lo compartido

Relacionado

Varias instancias en un mismo host

El mecanismo que implementan --tenant y --vhost, y la garantía de que update es una búsqueda.

Primera configuración, en orden

Qué escribe bootstrap y el orden que hace que el resto tenga sentido.