Skip to main content
Várias instâncias explica o mecanismo — uma palavra --tenant nomeando a mesma instância para ambos os instaladores, e o que --vhost traz. Esta página é a mesma informação organizada em uma única execução, para o momento em que você realmente tem um segundo cliente para adicionar. Nada aqui é compartilhado com os tenants já existentes no host exceto os próprios pacotes, Java, Node e PostgreSQL — veja O que cada instância precisa ter só para si. Um novo tenant recebe seu próprio banco de dados, suas próprias portas, seus próprios tokens operacionais e a sua própria escolha de conta de serviço.
1

Escolha o nome e o layout

Uma palavra, usada identicamente em ambos os instaladores — é o que permite ao update encontrar a instância correta depois, sem você redigitar caminhos.
Dois layouts, escolha um:Recorra a --vhost quando a conta SSH ou SFTP do próprio tenant já mora sob /home — é o que isola o gateway dos arquivos daquela conta, não apenas um caminho diferente. Veja Um virtualhost.
Sob --vhost, --user não é opcional. Um diretório home é 0750 e pertence à sua própria conta, e o instalador deliberadamente não fará chown de um diretório que já existe — portanto um serviço rodando com qualquer outra conta não consegue atravessá-lo.A falha é tardia e se apresenta como outra coisa: o painel morre no npm ci com can't cd to /home/<name>/panel/app, e o gateway inicia e depois não consegue alcançar a sua própria configuração. ProtectHome=tmpfs e BindPaths= tornam o diretório visível dentro do namespace da unidade; nenhum dos dois muda um bit de permissão.Passe a conta dona do virtualhost em ambos os instaladores.
--vhost sem --tenant significa outra coisa. Sozinha, ela preserva um layout plano legado — PATH/{app,conf,data} — em vez de PATH/panel. Essa forma existe para que painéis instalados antes de --tenant continuem funcionando, e para um tenant novo ela silenciosamente coloca o gateway e o painel em layouts diferentes. Sempre passe as duas flags juntas.
2

Reserve portas

Cada tenant existente no host já ocupa uma porta SMPP, uma porta HTTP e uma porta ops. Escolha uma faixa em que o novo não possa colidir:
--ops-port nunca é aberta no firewall, independentemente do que você passar — ela faz bind apenas em loopback. --http-port é a que o ESME ou cliente REST do cliente realmente alcança, então é a que você deve conferir contra ufw status antes de escolher.
3

Seu próprio banco de dados

Um tenant, um banco — nunca um schema compartilhado com as linhas de outro tenant.
Uma role separada por tenant não é obrigatória — uma role fireflo pode ser dona de vários bancos — mas isso significa que uma credencial vazada de um tenant não pode ler as de outro. Veja O banco de dados.
4

Instale o gateway

Sob o layout de virtualhost, acrescente --vhost /home/$TENANT --user $TENANT — ambos, conforme os avisos do passo 1.Ele pergunta antes e mostra cada decisão antes de escrever qualquer coisa — acrescente --yes apenas quando você confiar na resposta que ele imprimiria. --bootstrap escreve o mínimo que um banco novo precisa: uma tabela de roteamento default, uma tabela MESSAGE vazia, um listener SMPP, um login. A senha gerada é impressa uma única vez; capture-a.
Flags aceitam valores separados por espaço. --vhost=/home/$TENANT é rejeitado como opção desconhecida em vez de ser interpretado, em ambos os instaladores.
--bootstrap apenas em um banco genuinamente vazio. Ele recusa no momento em que encontra uma tabela de roteamento, um worker ou um login — então reinstalar um gateway cujo banco já existe precisa apenas de --config-source db. Passar as flags de forma invertida é como uma instalação acaba ou recusando no meio do caminho ou iniciando sem ter para onde rotear.
Lista completa de flags em fireflo-install.
5

Verifique antes de adicionar qualquer coisa

Código de saída 4 aqui é esperado e correto: a implantação está sólida, ela simplesmente ainda não tem para onde rotear. Torna-se 0 assim que um fornecedor e uma regra existirem, no próximo passo — veja Primeira configuração.
6

Instale o painel

Sob o layout de virtualhost, acrescente --vhost /home/$TENANT --user $TENANT e aponte --gateway-conf-dir para /home/$TENANT/gateway/conf. Instale o painel depois do gateway — ele lê esse diretório.
--port nunca é derivado de --tenant. Permanece em 3000 a menos que seja informada explicitamente, então um segundo painel no mesmo host precisa da sua própria, senão o instalador recusa em vez de sobrescrever a unidade do primeiro tenant.
Três coisas que ele descobre por si próprio a partir de --gateway-conf-dir: ambos os tokens operacionais, a METRICS_DATABASE_URL somente leitura e a URL de ops — que ele constrói a partir do FIREFLO_OPS_PORT registrado desse gateway, então uma --ops-port não-padrão não requer uma segunda flag aqui.
--config-url nunca é derivada, propositalmente — é a conexão que pode alterar o que é cobrado de um cliente. Sem ela, o painel sobe em modo somente leitura para este tenant.Ela foi deliberadamente omitida do comando acima: passada como flag, a senha do banco parou no seu histórico de shell e na saída do ps. Omita-a e o instalador pergunta — e esse prompt aceita a palavra literal same, significando “reutilize a conexão recém-derivada do gateway”, que é a resposta certa sempre que uma única role for dona do banco do tenant.
7

TLS na frente, uma origem por tenant

O painel fala HTTP simples em --port (padrão 3000, e deve ser único por tenant em um host compartilhado — passe uma explicitamente para cada tenant depois do primeiro). Coloque nginx ou equivalente na frente, terminando TLS em um hostname próprio deste tenant:
O --public-url acima deve casar exatamente com server_name — é escrito como AUTH_URL, e sem ele um sign-out redireciona para localhost independentemente do que o proxy encaminhe. Veja TLS na frente.
8

Finalize a configuração

O bootstrap deliberadamente deixa de fora um fornecedor e uma tarifa — ninguém mais pode adivinhar as credenciais de um fornecedor, e um preço inventado cobra silenciosamente enquanto um ausente aparece sem preço. Adicione ambos, depois uma regra de roteamento nomeando o fornecedor, e então o primeiro login de cliente deste tenant — nessa ordem, e por que, em Primeira configuração.
9

Envie uma, como faria um cliente

Um 200 significa aceito, cobrado e enfileirado — observe o registro de chamada no painel deste tenant para o desfecho da entrega.

O que é realmente novo versus compartilhado

Relacionados

Várias instâncias em um mesmo host

O mecanismo que --tenant e --vhost implementam, e a garantia de que update-é-uma-busca.

Primeira configuração, em ordem

O que o bootstrap escreve, e a ordem que dá sentido ao resto.