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 Provibr | Programa Virtualmin |
|---|---|
| Criar conta | create-domain |
| Suspender | disable-domain |
| Reativar | enable-domain |
| Mudar de plano | modify-domain --plan |
| Ler o estado | list-domains --domain |
| Eliminar | delete-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.
- O excesso é detetado. Recebe uma notificação e uma faixa que nomeia o tipo de recurso e em quanto.
- Tem um dia útil completo para o corrigir: remover contas, ou aumentar a sua capacidade.
- 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.
- 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.