Software de faturação self-hosted: qual escolher?
Compare Invoice Ninja, InvoiceShelf, InvoicePlane, Kimai e ERPNext num VPS: faturação recorrente, impostos, portal do cliente, gateways e licenças.
Qual software de faturação self-hosted deve escolher?
O software de faturação self-hosted reduz-se a cinco opções realistas num único VPS, e elas não são substitutos equivalentes. O Invoice Ninja é o produto mais completo: faturas recorrentes, portal do cliente, gateways de pagamento e formatos de faturação eletrónica funcionam no dia em que o instala. O InvoiceShelf é a opção totalmente open source mais leve. O InvoicePlane é uma aplicação PHP simples, sem nada para orquestrar. O Kimai fatura horas registadas em vez de itens de linha. O ERPNext é um sistema de contabilidade completo que também emite faturas.
Dois problemas comprometem uma instalação de faturação self-hosted com muito mais frequência do que uma funcionalidade em falta. O primeiro é o email. Uma fatura retida numa pasta de spam é uma fatura não paga, e nada lhe indica que isso aconteceu. O segundo são as cópias de segurança. Esta é a única base de dados self-hosted cuja perda se transforma num problema fiscal, e não apenas num inconveniente.
Leia a licença antes de consultar a lista de funcionalidades. Três destas cinco opções usam licenças copyleft, uma usa uma licença permissiva e uma disponibiliza o código-fonte com limites reais sobre o que pode fazer com ele.
As cinco opções e para quem se destina cada uma
Invoice Ninja
Uma aplicação Laravel, atualmente na linha v5. O self-hosting é gratuito e não impõe limitações: inclui faturas recorrentes, orçamentos, projetos, registo de horas, despesas, um portal do cliente e gateways de pagamento, incluindo Stripe e PayPal. O projeto descreve-se como "uma aplicação de faturas, orçamentos, projetos e registo de horas, com código disponível, criada com Laravel". O único componente pago é a remoção da marca. Nas palavras do próprio projeto: "Disponibilizamos uma licença white-label por $40 por ano para remover a marca Invoice Ninja das partes da aplicação visíveis para os clientes". Esse preço é válido em agosto de 2026.
Escolha-o se quiser o produto mais completo e aceitar executar a stack maior.
InvoiceShelf
Um fork do Crater, licenciado ao abrigo da GNU Affero General Public License version 3 (AGPL-3.0). Abrange faturas, estimativas, faturação recorrente, despesas, impostos, várias moedas, um portal do cliente e várias empresas. Os pagamentos e a remoção da marca estão em repositórios oficiais de módulos separados, ambos com licença AGPL-3.0 e ambos gratuitos. Os pagamentos com cartão são processados pelo checkout do Stripe.
Escolha-o se quiser uma aplicação pequena e totalmente open source e não precisar de trinta gateways.
InvoicePlane
Uma aplicação PHP baseada no CodeIgniter, lançada ao abrigo da licença MIT, e a única opção desta lista que é instalada descompactando ficheiros numa web root. Não requer Docker nem uma etapa de build do Node. Os PDFs são gerados pelo mPDF, pelo que os templates usam HTML e CSS. Os clientes recebem um guest link para consultar e pagar uma fatura.
O problema são os pagamentos. A documentação afirma claramente que o InvoicePlane 1.6 suporta apenas Stripe por predefinição e que os outros fornecedores foram removidos nessa versão. Os requisitos publicados para a linha 1.6 são PHP 8.0 a 8.1 com MySQL 5.5 ou a versão correspondente do MariaDB. Leia as notas da versão que descarregar, porque a linha 1.7 ainda está em desenvolvimento.
Escolha-o se utilizar shared hosting ou um VPS com 512 MB.
Kimai
Um registo de horas com licença AGPL-3.0 que gera faturas a partir de folhas de horas. É a opção certa para quem cobra por hora. Os templates de fatura são carregados como ficheiros DOCX, ODS ou XLSX, que a documentação confirma serem os únicos formatos aceites, e convertidos para PDF ou HTML. Pode criar o layout da fatura num processador de texto em vez de escrever CSS, o que a maioria das pessoas considera mais fácil.
O Kimai não tem portal do cliente nem gateway de pagamento, pelo que terá de enviar o PDF por email. A faturação eletrónica estruturada é disponibilizada por um plugin pago da loja, chamado E-Invoice Plus, listado a 99 EUR por ano, sem IVA, para uma instalação self-hosted em agosto de 2026. Abrange os perfis EN16931, XRechnung, ZUGFeRD, Factur-X e Peppol.
Escolha-o se a fatura for o resultado das horas registadas.
ERPNext
GPL-3.0 e uma categoria de software diferente. Uma fatura de venda é um tipo de documento dentro de um sistema de contabilidade completo, com plano de contas, lançamentos contabilísticos, stock e processamento salarial. É a opção certa quando a faturação deixa de ser a tarefa principal. Para um freelancer com oito clientes, é software a mais. Colocá-lo em funcionamento é um projeto por si só, descrito em executar o ERPNext num VPS.
Faturas recorrentes dependem de um agendador que não é visível
Invoice Ninja, InvoiceShelf, InvoicePlane e ERPNext geram faturas recorrentes. O Kimai não tem uma funcionalidade de faturas recorrentes no núcleo, porque uma fatura é criada a partir dos registos da folha de horas de um período.
O modo de falha é igual em todas as aplicações baseadas em Laravel e é silencioso. As faturas recorrentes são criadas por uma tarefa agendada, php artisan schedule:run, que algum componente externo à aplicação tem de chamar a cada minuto. Se nada a chamar, a lista de faturas recorrentes continua a mostrar uma próxima data de envio, e essa data simplesmente passa. Nenhuma fatura aparece. Nenhum erro é registado, porque nenhum código foi executado.
Depois de criar a primeira fatura recorrente, defina a próxima data de envio para alguns minutos à frente e aguarde. Se nada chegar, o agendador não está a ser executado. Numa instalação Docker, isso normalmente significa que o serviço cron ou o serviço do agendador no ficheiro compose nunca arrancou ou terminou.
docker compose ps
docker compose logs --tail 50Todos os serviços no ficheiro devem indicar running. Um serviço no estado exited é aquele cujos logs deve consultar.
Moedas múltiplas e impostos: o que verificar antes de se comprometer
As listas de funcionalidades dizem "moedas múltiplas", mas essa expressão pode significar coisas muito diferentes. Faça estas quatro verificações numa instância de demonstração, usando valores reais do seu negócio, porque um erro neste ponto será detetado pelo seu contabilista, e não por si.
- A fatura guarda a taxa de câmbio aplicada na data de emissão? Tem de guardar. Se a aplicação recalcular os totais com base numa taxa atualizada, os relatórios do último trimestre mudam sempre que os abre, e a contabilidade deixa de corresponder ao que já declarou.
- O imposto é aplicado por linha, por fatura ou das duas formas? Uma taxa única ao nível da fatura funciona até existir uma linha com taxa zero.
- Pode introduzir preços com impostos incluídos e também sem impostos? A conversão posterior introduz diferenças de arredondamento de um cêntimo por linha, e esses cêntimos acumulam-se ao longo de um ano.
- O que aparece no documento para um cliente noutro país que não deve IVA? A nota de isenção tem de ser impressa na fatura, e não apenas apresentar zero na coluna do imposto.
Invoice Ninja e ERPNext tratam dos quatro pontos. O InvoiceShelf inclui impostos e moedas múltiplas na lista de funcionalidades. O InvoicePlane e o Kimai são mais simples, por isso teste-os com a fatura mais complexa do seu negócio, e não com a mais simples.
Portal do cliente e gateways de pagamento
Um portal do cliente é uma página onde o cliente consulta as faturas, descarrega o PDF e efetua o pagamento. Isto é mais importante do que parece, porque tentar obter o pagamento por email consome mais tempo do que emitir a fatura.
O Invoice Ninja é a opção mais completa neste aspeto, com um portal completo, vários gateways, métodos de pagamento guardados e faturação automática para faturas recorrentes. O InvoiceShelf tem um portal do cliente e adiciona o checkout do Stripe através do seu módulo de pagamentos. O InvoicePlane fornece uma ligação de convidado para cada fatura e suporta o Stripe. O Kimai não oferece nenhuma destas funcionalidades, por isso o PDF é enviado como anexo.
Há um ponto que é frequentemente confundido. Alojar a aplicação de faturação no seu próprio servidor não significa guardar números de cartões. Com o checkout do Stripe, o cliente é redirecionado para o Stripe e introduz o cartão nesse serviço; o seu VPS nunca vê o número. O âmbito PCI (payment card industry) mantém-se reduzido precisamente porque não criou o formulário de pagamento. Se mais tarde precisar de mais de um processador ou quiser encaminhar pagamentos por país, essa função deve ficar numa camada separada, como a orquestração de pagamentos self-hosted com Hyperswitch.
Qualidade do PDF e o modelo que irá editar
Irá editar o modelo. Todas as predefinições aqui colocam o seu endereço no local errado para o seu país.
O Invoice Ninja renderiza modelos HTML e CSS para PDF usando um Chromium headless incluído na imagem, razão pela qual o contentor é grande. Reserve memória para esse processo: um navegador headless é o processo mais pesado da stack, por isso um VPS com 1 GB fica no limite. O InvoicePlane utiliza mPDF, que é escrito apenas em PHP e tem baixo consumo, mas ignora parte do CSS moderno. O Kimai segue a abordagem oposta e exige o carregamento de um ficheiro DOCX ou ODS, pelo que o layout é feito no LibreOffice ou Word por alguém que nunca escreveu uma folha de estilos.
Se um design de fatura for importante para si e o CSS não for, a abordagem do Kimai é a melhor. Se quiser manter o modelo num sistema de controlo de versões e comparar as diferenças, HTML é a melhor opção.
A licença permite o uso comercial?
As cinco soluções permitem faturar os seus próprios clientes. As diferenças surgem quando faz algo além disso.
O Invoice Ninja está sujeito à Elastic License 2.0. Há duas cláusulas importantes.
Não pode fornecer o software a terceiros como um serviço alojado ou gerido quando esse serviço disponibiliza aos utilizadores acesso a um conjunto substancial das funcionalidades ou capacidades do software.
Não pode mover, alterar, desativar ou contornar a funcionalidade de chave de licença do software.
Por isso, executá-lo para a sua própria empresa é permitido, mas executar instâncias para clientes como produto não é. A segunda cláusula explica por que a remoção da marca custa uma licença de $40, em vez de ser uma alteração ao código-fonte.
InvoiceShelf, Kimai e Crater usam a AGPL-3.0. O uso comercial é livre e não existe um nível superior ao seu. A obrigação está na secção 13: se modificar o código e permitir que outras pessoas usem a sua versão modificada através de uma rede, tem de lhes disponibilizar o código-fonte das suas alterações. Uma instância sem modificações já está abrangida pelo código-fonte público do projeto original, por isso a maioria dos utilizadores que alojam estes serviços nunca tem de lidar com esta obrigação.
O InvoicePlane usa a MIT, a licença com menos obrigações deste grupo, embora o README indique que o nome e o logótipo continuam a pertencer ao projeto.
O ERPNext usa a GPL-3.0. As modificações que distribuir têm de ser partilhadas, mas executar o software de forma privada não cria essa obrigação.
Esta é uma descrição do texto das licenças, não aconselhamento jurídico.
O projeto ainda é mantido? Verifique o log de commits
Crater foi uma aplicação de faturação open source popular durante vários anos, e muitos guias ainda a recomendam. A branch predefinida não recebe nenhum commit há 741 dias.
The data behind this chart
[
{
"label": "ERPNext",
"commit_gap": 0
},
{
"label": "Invoice Ninja",
"commit_gap": 1
},
{
"label": "Kimai",
"commit_gap": 1
},
{
"label": "InvoicePlane",
"commit_gap": 3
},
{
"label": "InvoiceShelf",
"commit_gap": 4
},
{
"label": "Crater",
"commit_gap": 741
}
]Dos 6 projetos desse bloco, cinco receberam um commit na última semana. InvoiceShelf é o fork que deu continuidade ao trabalho do Crater, com a mesma licença AGPL-3.0 e o mesmo modelo de dados. Por isso, a migração é uma migração de dados, não uma reescrita. Instale InvoiceShelf, não Crater.
Instalando cada aplicação numa VPS
Tudo, exceto o InvoicePlane, funciona mais facilmente com Docker Compose. Se isto é novidade para si, comece por uma primeira stack do Docker Compose numa VPS e volte aqui.
O Invoice Ninja fornece o seu próprio repositório do Compose.
git clone https://github.com/invoiceninja/dockerfiles.git
cd dockerfiles
docker run --rm -it invoiceninja/invoiceninja php artisan key:generate --showCopie essa chave para o ficheiro env no repositório, juntamente com o seu APP_URL real. Depois, defina o proprietário esperado pela imagem e inicie-a.
chmod 755 docker/app/public
sudo chown -R 1500:1500 docker/app
docker compose up -dO proprietário 1500:1500 corresponde ao utilizador dentro da imagem. Se ignorar este passo, a aplicação não consegue escrever a cache nem os PDFs gerados. No assistente de configuração, indique db como anfitrião da base de dados, porque esse é o nome do serviço na rede do Compose. localhost aponta para o próprio contentor da aplicação.
O InvoiceShelf publica ficheiros Compose prontos, um para cada motor de base de dados.
curl -fLO https://raw.githubusercontent.com/InvoiceShelf/docker/master/docker-compose.mysql.yml
mv docker-compose.mysql.yml docker-compose.ymlAbra esse ficheiro antes de o iniciar. Todas as palavras-passe nele contidas são marcadores de posição, como indicado nos próprios comentários do ficheiro. APP_URL, SESSION_DOMAIN e SANCTUM_STATEFUL_DOMAINS têm todos localhost por predefinição, e os três precisam de ter o seu nome de anfitrião real definido antes do primeiro início de sessão. Depois, inicie os serviços.
docker compose up -dPublica a porta 8090 no anfitrião e disponibiliza a porta 8080 dentro do contentor. Coloque um reverse proxy com TLS (segurança da camada de transporte) à frente dele antes de encaminhar qualquer cliente para o serviço.
Ficheiro Compose de produção do Kimai, da documentação do projeto
services:
sqldb:
image: mysql:8.3
volumes:
- mysql:/var/lib/mysql
environment:
- MYSQL_DATABASE=kimai
- MYSQL_USER=kimaiuser
- MYSQL_PASSWORD=kimaipassword
- MYSQL_ROOT_PASSWORD=changemeplease
command: --default-storage-engine innodb
restart: unless-stopped
healthcheck:
test: mysqladmin -uroot -p$$MYSQL_ROOT_PASSWORD ping -h 127.0.0.1 --silent
interval: 10s
timeout: 5s
retries: 12
start_period: 30s
kimai:
image: kimai/kimai2:stable
depends_on:
sqldb:
condition: service_healthy
restart: true
volumes:
- data:/opt/kimai/var/data
- plugins:/opt/kimai/var/plugins
ports:
- 8001:8001
environment:
- APP_SECRET=your-fantastic-long-random-and-ultra-secure-secret
- TRUSTED_HOSTS=kimai.example.com
- ADMINMAIL=admin@example.com
- ADMINPASS=changemeplease
- DATABASE_URL=mysql://kimaiuser:kimaipassword@sqldb/kimai?charset=utf8mb4&serverVersion=8.3.0
restart: unless-stopped
volumes:
data:
mysql:
plugins:Defina APP_SECRET como uma cadeia longa e aleatória criada por si e TRUSTED_HOSTS como o domínio que vai utilizar efetivamente. ADMINMAIL e ADMINPASS criam o primeiro administrador no primeiro arranque. Altere essa palavra-passe na interface depois e remova-a do ficheiro.
O InvoicePlane não tem contentor. Crie primeiro uma base de dados vazia.
sudo mysql -e "CREATE DATABASE invoiceplane CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"Transfira o arquivo a partir da página de releases do projeto, extraia-o para a raiz web, copie ipconfig.php.example para ipconfig.php e defina o seu URL nesse ficheiro, seguindo os comentários nele contidos. Depois, abra https://your-domain.example/index.php/setup e conclua o instalador.
Por que sua fatura vai parar na pasta de spam
Esta é a falha que custa dinheiro, e a aplicação informará normalmente que a fatura foi enviada.
Não envie mensagens de fatura a partir do próprio endereço IP do VPS. Um novo endereço IP de VPS não tem histórico de envio, e os grandes provedores tratam, por padrão, a primeira mensagem de um endereço desconhecido numa faixa de hospedagem como suspeita. Envie por meio de um relay SMTP (simple mail transfer protocol) num domínio que você tenha autenticado. Fazer isso de ponta a ponta é assunto para um guia próprio, e enviar mensagens de forma confiável a partir de uma aplicação auto-hospedada explica o relay, os registros DNS e os testes.
O campo From é onde a maioria das configurações de faturamento dá errado. Ele deve usar um domínio que você controla e com o qual o relay assina usando DKIM (domainkeys identified mail). Colocar o próprio endereço do cliente em From parece educado, mas prejudica a entrega, porque o servidor receptor verifica se o domínio de From corresponde ao domínio que autenticou a mensagem. O Gmail rejeita a divergência diretamente:
550 5.7.1 Unauthenticated email from example.com is not accepted due to domain's DMARC policyMantenha o seu próprio endereço em From e coloque o cliente em Reply-To. Verifique os registros publicados antes de enviar qualquer mensagem real.
dig +short TXT example.com
dig +short TXT _dmarc.example.com
dig +short TXT selector1._domainkey.example.comO primeiro deve retornar um registro SPF (sender policy framework) que identifique o seu relay. O segundo deve retornar uma política DMARC (domain-based message authentication, reporting and conformance). O terceiro depende do seletor fornecido pelo seu relay, e uma resposta vazia significa que o registro DKIM está ausente ou foi publicado com o nome errado. Nesse caso, todas as mensagens enviadas falharão na verificação da assinatura.
Depois, envie uma fatura real para uma conta sua num grande provedor e leia os cabeçalhos brutos. dkim=pass e spf=pass no cabeçalho Authentication-Results são a única prova que conta. A indicação "sent" da aplicação significa apenas que ela entregou a mensagem ao relay.
Backups: a única base de dados que não pode perder
Perder um servidor de multimédia significa voltar a descarregar os ficheiros. Perder a base de dados de faturação significa deixar de conseguir mostrar o que faturou, o que recebeu e o que ainda tem a receber. Trate-a em conformidade.
Faça cópias de segurança de quatro elementos. A base de dados. O volume de armazenamento, que contém logótipos, PDFs gerados e recibos de despesas. O ficheiro de ambiente da aplicação. E os PDFs renderizados guardados como ficheiros normais, porque um PDF abre daqui a dez anos sem a aplicação que o produziu.
O ficheiro de ambiente é mais importante do que muitas pessoas esperam. O Laravel cifra valores sensíveis armazenados, incluindo as credenciais do gateway de pagamentos, usando o APP_KEY desse ficheiro. Se restaurar a base de dados com uma chave gerada novamente, esses valores não são decifrados. Todas as faturas estão presentes, mas as definições do gateway ficam ilegíveis.
Um dump da stack do InvoiceShelf é semelhante a este. O serviço da base de dados é executado em mariadb:10, por isso a ferramenta dentro do contentor é mariadb-dump.
docker compose exec -T database mariadb-dump \
--user=root --password=YOUR_ROOT_PASSWORD \
--single-transaction --databases invoiceshelf > invoiceshelf.sql--single-transaction cria um snapshot consistente das tabelas InnoDB sem as bloquear, por isso a aplicação continua a servir pedidos enquanto o dump é executado. -T impede que o Docker aloque um terminal, o que poderia corromper a saída redirecionada e produzir um ficheiro de dump que não seria importado.
Envie esse ficheiro para fora do servidor segundo um agendamento, usando cópias de segurança restic cifradas para armazenamento externo, e defina a retenção por tempo suficiente para abranger o período indicado pelo seu contabilista.
Depois, restaure-o. Inicie o dump num contentor temporário, inicie sessão e abra a fatura do mês passado. Enquanto não fizer isso pelo menos uma vez, não sabe se a cópia de segurança funciona.
O que o seu contabilista vai pedir
Não aceite aconselhamento fiscal de um tutorial. O que se segue é aquilo que este software consegue produzir, para que possa levar a lista à pessoa que o aconselha.
Dados exportáveis. Deve conseguir exportar as suas faturas e pagamentos para CSV a partir da interface, sem um cliente de base de dados e sem abrir um pedido de suporte. Um dump SQL é uma cópia de segurança, não uma exportação, porque o seu contabilista não consegue abrir um dump SQL.
Numeração imutável. Os números das faturas devem seguir uma sequência e nunca ser reutilizados, sem intervalos. A eliminação de uma fatura deixa um intervalo que terá de ser explicado. Em vez disso, cancele a fatura ou emita uma nota de crédito, algo que todas as aplicações aqui apresentadas suportam. A obrigatoriedade de uma numeração sem intervalos depende do local onde está registado, por isso vale a pena esclarecer essa questão cedo.
Retenção. Guarde os dumps da base de dados e os PDFs gerados durante o período exigido pelas suas regras. O PDF é o documento que foi efetivamente enviado e é o artefacto relevante se uma fatura for contestada.
Histórico de alterações. É útil conseguir mostrar quem editou uma fatura e quando. Esta funcionalidade varia mais entre estas aplicações. O Invoice Ninja mantém um registo de atividade por registo.
A faturação eletrónica estruturada tornou-se um requisito real, e não apenas uma funcionalidade adicional, em algumas partes da UE. O Invoice Ninja gera os formatos comuns, incluindo ZUGFeRD e XRechnung, Facturae, FatturaPA e EN16931 genérico. A entrega através da rede Peppol a partir de uma instância autoalojada passa pelo próprio ponto de acesso do Invoice Ninja: regista a sua entidade com eles e compra créditos por submissão, pelo que é um serviço pago em agosto de 2026. O Kimai suporta os mesmos formatos através do seu plugin pago. As outras três aplicações não produzem atualmente faturas eletrónicas estruturadas, o que constitui a razão mais forte para escolher o Invoice Ninja se emitir faturas dentro da UE.
FAQ
Devo instalar o Crater ou o InvoiceShelf?
InvoiceShelf. O branch padrão do Crater não recebe um commit há 741 dias em 21 de agosto de 2026, e o próprio sistema de issues direciona os utilizadores para o fork. O InvoiceShelf mantém a mesma licença AGPL-3.0 e o mesmo modelo de dados, portanto a migração entre os dois é uma migração de base de dados, não uma reescrita. Qualquer guia que ainda recomende o Crater foi escrito antes de o projeto ficar inativo.
Posso usar o Invoice Ninja na minha própria empresa sem pagar?
Sim. O Invoice Ninja self-hosted é totalmente funcional sem custos sob a Elastic License 2.0, incluindo faturas recorrentes, o portal do cliente e gateways de pagamento. Há dois custos. Remover a marca Invoice Ninja das páginas voltadas para os clientes requer a licença white-label, "$40 per year", segundo as próprias palavras do projeto em agosto de 2026. O envio de faturas eletrónicas pela rede Peppol é cobrado separadamente conforme o uso. O que a licença proíbe é executar o software como um serviço alojado para outras pessoas.
Por que motivo os emails das minhas faturas vão para a pasta de spam?
Quase sempre porque a mensagem não está autenticada para o domínio usado no endereço From. Envie através de um relay SMTP em vez de enviar diretamente do VPS, publique depois os registos SPF e DMARC do seu domínio e adicione o registo DKIM usando o selector fornecido pelo relay. Mantenha o seu próprio endereço em From e coloque o cliente em Reply-To. Definir o endereço do cliente como remetente faz o Gmail rejeitar a mensagem com 550 5.7.1 Unauthenticated email from example.com is not accepted due to domain's DMARC policy. Confirme a correção procurando dkim=pass e spf=pass no cabeçalho Authentication-Results de uma mensagem de teste.
Qual devo escolher se cobro à hora?
Kimai. É primeiro uma ferramenta de controlo de tempo, portanto a fatura é gerada a partir dos registos de horas aprovados e os itens da fatura correspondem ao trabalho registado. Os modelos são ficheiros DOCX, ODS ou XLSX que cria num processador de texto, o que é mais simples do que editar CSS. A desvantagem é que o Kimai não tem portal do cliente nem gateway de pagamento, portanto envia o PDF por email e recebe o pagamento por transferência. O Invoice Ninja também controla o tempo e tem um portal, por isso escolha-o se o pagamento online com cartão for mais importante para si do que o detalhe dos registos de horas.
O que preciso exatamente de incluir nos backups?
A base de dados, o volume de armazenamento que contém os logótipos e os PDFs gerados, o ficheiro de ambiente e os PDFs renderizados mantidos como ficheiros simples. O ficheiro de ambiente é o elemento que costuma ser esquecido: aplicações Laravel como o Invoice Ninja e o InvoiceShelf encriptam as credenciais armazenadas com APP_KEY, portanto restaurar a base de dados junto de uma chave recém-gerada deixa as configurações do gateway de pagamento ilegíveis. Restaure tudo numa instância descartável e abra uma fatura antiga, porque essa é a única forma de confirmar que o backup funciona.