Ir para o conteúdo

Blogue ·

Automatizar a faturação com o Virtualmin

Da encomenda a uma conta Virtualmin ativa, e o que uma fatura por pagar faz realmente: suspender, reativar e eliminar, com os comandos do painel.

Por Provibr

Duas perguntas decidem se um painel de alojamento consegue sustentar clientes pagantes: uma encomenda torna-se uma conta funcional sem que se lhe toque, e uma fatura por pagar altera realmente alguma coisa no servidor?

Esta página responde a ambas para o Virtualmin, em concreto: que comando Virtualmin está por trás de cada passo, o que fica guardado onde, e onde a automatização para deliberadamente. Tudo foi medido numa instalação real do Virtualmin GPL 8.1.2.

Da encomenda à conta

Uma encomenda precisa de quatro coisas: um domínio, um endereço de e-mail, um plano e uma palavra-passe.

O plano é o ponto interessante. Um plano web do Provibr fixa exatamente um plano Virtualmin em exatamente uma integração e dá-lhe um nome à sua escolha. Essa indireção existe porque um plano Virtualmin é a descrição que o próprio painel faz de uma conta (quota de disco, tráfego mensal, número de caixas de correio e de domínios, que funções estão ativas) e o seu conteúdo pode mudar na sua máquina sem que no-lo digam. Por isso referimo-lo pelo nome e relemos o que realmente aconteceu, em vez de guardar em cache o que julgamos que significa.

Nos bastidores, a encomenda executa create-domain no painel, com o domínio, o plano e a palavra-passe. Depois:

Comando ProvibrPrograma Virtualmin
Criar contacreate-domain
Suspenderdisable-domain
Reativarenable-domain
Mudar de planomodify-domain --plan
Ler o estadolist-domains --domain
Eliminardelete-domain

Dois detalhes do passo de criação valem a pena conhecer.

O utilizador unix vem do domínio. my-client.nl torna-se my-client. Os hífenes são aqui a forma normal, e o limite é o dos próprios 32 caracteres do Linux, ao contrário do DirectAdmin e do cPanel, que impõem regras de nomenclatura mais estritas. Não se escolhe o nome de utilizador; o painel deriva-o.

A palavra-passe nunca é registada. O Provibr guarda o facto de ter fornecido uma, não o valor. A palavra-passe viaja em separado do rasto de auditoria que regista a encomenda, pelo que a palavra-passe de uma conta de alojamento não existe em lado nenhum do histórico da plataforma. Se a perder, define uma nova, não a consulta.

O que fica guardado onde

Uma conta de alojamento torna-se uma linha de servidor comum, do tipo webserver. O seu identificador é o número interno que o Virtualmin atribui ao domínio, não o nome.

Essa escolha é deliberada e conta para a faturação. O Virtualmin pode renomear um domínio, e um cliente ou um administrador acabará por o fazer. Uma chave baseada no nome desliga-se da sua linha da primeira vez que isso acontece: a sua fatura continua a cobrar por algo que a plataforma já não consegue encontrar. Um identificador numérico sobrevive ao renomear.

A fronteira da conta é o utilizador unix, não o domínio. De outro modo, os subservidores e os alias de uma mesma conta cairiam cada um na contagem de capacidade como contas de alojamento distintas, e estaria a pagar capacidade de licença por alias.

⚠️ Há aqui um passo de tradução fácil de errar se construir isto por si próprio. Os programas de mutação do Virtualmin (disable-domain, enable-domain, modify-domain) aceitam apenas --domain como seletor. Medimo-lo no 8.1.2: não existe um seletor --user. Mas a plataforma endereça as contas pelo nome de utilizador, porque é essa a identidade da conta. A tradução compete ao agente, que faz uma única consulta direcionada ao painel para resolver o domínio atual, e não à plataforma, que teria então de manter uma cópia dos seus nomes de domínio e visaria silenciosamente o domínio errado da primeira vez que alguém renomeasse um fora do Provibr.

(Armadilha próxima: modify-domain --user significa renomear, não selecionar. Nunca é enviado.)

O modelo de capacidade num parágrafo

Compra capacidade por tipo de recurso (máquinas virtuais, máquinas dedicadas, contas de alojamento, servidores de jogos) e é, ao mesmo tempo, um limite e um preço. Cada conta conta, esteja em funcionamento ou não. Só uma conta suspensa não conta, e uma conta eliminada também não. Parar algo não liberta, portanto, um lugar: remova-o, ou aumente a sua capacidade. Aumentar tem efeito imediato e o suplemento pelo resto do período é calculado ao pro rata na sua fatura seguinte; diminuir também tem efeito imediato, e a parte não utilizada regressa como crédito.

As contas importadas contam exatamente como as encomendadas. Adotar um painel cheio de clientes existentes é uma decisão de capacidade, não uma ação gratuita.

O que faz uma fatura por pagar

A sua organização tem um único estado de licença: ativo, período de graça ou suspenso. Duas coisas independentes o podem mover (um pagamento pendente e um excesso de capacidade) e quando ambas se aplicam, a mais estrita ganha, para que a faixa não alterne entre duas histórias.

O período experimental é o exemplo mais claro da forma. Uma nova organização funciona com um período experimental de duas semanas, sem que se peçam dados de pagamento e com tudo a funcionar. Quando termina sem um método de pagamento, é-lhe dito, e nada muda ainda. Uma semana depois, o painel começa a avisar. Duas semanas após o fim do período, os servidores são suspensos. Cada passo é anunciado antes de acontecer: é essa a regra em torno da qual todo o calendário está construído, não uma cortesia acrescentada depois.

Para uma subscrição em curso, o mecanismo é o mesmo: o estado passa para período de graça antes de passar para suspenso, a faixa nomeia a causa, e a solução está ligada a partir dela. Uma suspensão por pagamento e uma suspensão por capacidade apresentam-se e leem-se de forma diferente, porque exigem coisas diferentes de si.

O que a suspensão faz no painel

Quando a plataforma suspende uma conta de alojamento, envia disable-domain. O Virtualmin bloqueia a palavra-passe do utilizador de administração e substitui o site por uma página de erro. Os dados ficam.

Três propriedades desse fluxo valem a pena explicitar, porque são as que separam uma verdadeira automatização de um script que se lhe assemelha.

A linha só é marcada como suspensa depois de o agente o confirmar. Enviar um comando não é o mesmo que ele ter acontecido. Se a plataforma marcasse a linha no envio, uma suspensão falhada deixaria uma conta ativa contada como «não conta para o seu limite», exatamente o erro contabilístico que a imposição existe para evitar.

Um agente offline significa adiado, não concluído. Se o agente não puder ser alcançado, a imposição é ignorada, é escrito um evento a dizê-lo, e a ronda seguinte tenta de novo. Nada é discretamente marcado como concluído.

Ler o resultado é uma leitura fresca, não a própria resposta do comando. disable-domain devolve um muro de texto de progresso (Locking administration user's password .., Replacing website with error page ..) e esse texto é uma citação, não um contrato. O estado vem de um list-domains fresco feito a seguir. É uma regra da casa em todos os painéis que integramos: nenhuma mutação é acreditada pela sua própria resposta.

É essa última regra que torna a deteção da suspensão correta, e eis a razão medida. Numa conta suspensa, list-domains ganha um campo chamado disabled. Numa conta ativa, esse campo está simplesmente ausente: não existe disabled: "No". Um analisador que procura um valor não encontra nada e lê todas as contas como ativas, incluindo as suspensas. Num contexto de faturação, isto não é cosmético: uma conta que suspendeu por falta de pagamento declarar-se-ia ativa, e a sua contagem de capacidade estaria errada no sentido que lhe custa dinheiro.

Ultrapassar o seu limite

Ter mais contas em funcionamento do que as que comprou não é bloqueado no momento em que o faz. É detetado, é-lhe dito, e é-lhe dado tempo.

  1. O excesso é detetado. Recebe uma notificação e uma faixa que nomeia o tipo de recurso e em quanto.
  2. Tem um dia útil completo para o corrigir: remover contas, ou aumentar a sua capacidade.
  3. Se o período de graça expirar, a plataforma suspende as contas mais recentes acima do seu limite. As mais recentes primeiro, para que o que construiu mais cedo sobreviva. Uma conta suspensa mantém o seu disco e os seus dados.
  4. Assim que voltar a estar dentro do seu limite, o excesso encerra.

Um segundo excesso na mesma semana recebe uma hora em vez de um dia. Sem isso, o período de graça poderia ser renovado indefinidamente ao descer abaixo do limite e voltar a ultrapassá-lo.

⚠️ Nada é iniciado por si quando o excesso se resolve. Voltar a ligar uma conta é uma decisão, e a plataforma não a toma enquanto ninguém está a ver. É o próprio que a reativa, e isso envia enable-domain.

Há um pequeno cálculo por trás do passo 4 fácil de tomar ao contrário. O excesso conta-se como resolvido quando as contas que contam mais as contas suspensas por este excesso voltam a caber no limite, não apenas o primeiro número. Sem essa soma, a imposição declarar-se-ia resolvida no instante em que agiu, porque a contagem desce abaixo do limite precisamente ao suspender.

O que nunca é automático

A eliminação. Nenhuma fatura por pagar, nenhum excesso e nenhum período experimental expirado elimina uma conta de alojamento. A suspensão mantém o disco e os dados; a eliminação é uma ação distinta e explícita que se toma. O único passo destrutivo do ciclo de vida é precisamente aquele que a plataforma não dá em seu nome.

O acerto parcial a partir do crédito. É possível carregar antecipadamente, e o saldo é um livro-razão: uma linha por movimento, nunca editada, e as correções são linhas inversas com um motivo, e não reescritas. Se o saldo cobrir o mês inteiro, o mês é pago a partir do crédito e nada é cobrado. Se não cobrir, o montante total é cobrado e o saldo fica intacto. Não há meio-a-meio.

A reescrita do histórico. Uma linha de fatura regista o nome do plano tal como estava no momento da faturação. Renomear algo mais tarde não muda o que diz uma fatura antiga.

O que isto muda

O Virtualmin dá-lhe um painel de alojamento sólido e nenhuma camada comercial. A lacuna não está no aprovisionamento (create-domain é um único comando) mas em tudo o que o rodeia: contar o que um cliente tem, saber que uma fatura ficou por pagar, responder a isso de forma reversível, e poder explicar depois o que aconteceu e quando.

O Provibr liga-se a painéis de controlo, hipervisores e painéis de jogo lado a lado. O modelo de faturação acima é o mesmo para todos, o que é o argumento prático para um pequeno alojador: a máquina Virtualmin que já explora continua a funcionar exatamente como hoje, e o VPS ou o painel de jogos que acrescentar no próximo ano cai na mesma contagem de capacidade, na mesma fatura e no mesmo fluxo de suspensão.

Perguntas frequentes

O Virtualmin tem um painel de faturação próprio?

Não. O Virtualmin dá um painel de alojamento sólido e nenhuma camada comercial. A lacuna não está no aprovisionamento, porque create-domain é um único comando; está em contar o que um cliente tem, saber que uma fatura ficou por pagar e fazer algo reversível quanto a isso.

O que acontece no painel quando uma conta é suspensa?

A plataforma envia disable-domain. O Virtualmin bloqueia a palavra-passe do utilizador administrativo e substitui o site por uma página de erro. Os dados ficam.

Uma fatura por pagar elimina uma conta de alojamento?

Nunca. Nenhuma fatura por pagar, nenhum excedente e nenhum período de teste expirado elimina uma conta. O único passo destrutivo do ciclo de vida é precisamente aquele que a plataforma não dá em seu nome.

Como se deteta de forma fiável uma conta Virtualmin suspensa?

Relendo o estado em vez de acreditar na resposta do comando. Numa conta suspensa, list-domains ganha um campo disabled; numa conta ativa esse campo simplesmente não existe, por isso um analisador que procure um valor lê todas as contas como ativas, incluindo as suspensas.

Uma conta suspensa continua a contar para a minha capacidade?

Não. Todas as contas contam, estejam a correr ou não, e só uma conta suspensa ou eliminada deixa de contar. Parar algo não liberta lugar: elimine-o, ou aumente a capacidade.

Comece com um host e um agente

Crie uma conta, instale o agente com um único comando e ligue o seu primeiro host Proxmox. O período experimental dura 14 dias e não pede quaisquer dados de pagamento.