Quel logiciel de facturation auto-hébergé choisir ?
Comparez Invoice Ninja, InvoiceShelf, InvoicePlane, Kimai et ERPNext sur un VPS : facturation récurrente, taxes, portail client, paiements et licences.
Quel logiciel de facturation auto-hébergé choisir ?
Les logiciels de facturation auto-hébergés se résument à cinq choix réalistes sur un VPS, et ils ne sont pas interchangeables. Invoice Ninja est le produit le plus abouti : les factures récurrentes, le portail client, les passerelles de paiement et les formats de facturation électronique fonctionnent dès l’installation. InvoiceShelf est l’option entièrement open source la plus légère. InvoicePlane est une application PHP simple, sans orchestration particulière. Kimai facture les heures suivies plutôt que les lignes de facture. ERPNext est un système comptable complet qui permet aussi d’imprimer des factures.
Deux problèmes font échouer une installation de facturation auto-hébergée bien plus souvent qu’une fonctionnalité manquante. Le premier est l’e-mail. Une facture qui arrive dans un dossier de courrier indésirable reste une facture impayée, et rien ne vous indique que cela s’est produit. Le second est celui des sauvegardes. C’est la seule base de données auto-hébergée dont la perte devient un problème fiscal plutôt qu’un simple désagrément.
Lisez la licence avant de consulter la liste des fonctionnalités. Trois de ces cinq logiciels sont sous copyleft, un autre utilise une licence permissive, et le dernier fournit son code source avec de réelles restrictions sur les utilisations autorisées.
Les cinq options, et à qui elles s’adressent
Invoice Ninja
Une application Laravel, actuellement en version 5. L’auto-hébergement est gratuit et toutes les fonctions sont débloquées : factures récurrentes, devis, projets, suivi du temps, dépenses, portail client et passerelles de paiement, notamment Stripe et PayPal. Le projet se décrit comme « une application de facturation, de devis, de gestion de projets et de suivi du temps, dont le code source est disponible et qui repose sur Laravel ». Le seul élément payant concerne la marque. Selon les propres termes du projet : « Nous proposons une licence white-label à 40 $ par an pour supprimer la marque Invoice Ninja des parties de l’application visibles par les clients ». Ce tarif est valable en août 2026.
Choisissez cette option si vous voulez le produit le plus complet et acceptez d’exécuter la stack la plus importante.
InvoiceShelf
Un fork de Crater, distribué sous la GNU Affero General Public License version 3 (AGPL-3.0). Il prend en charge les factures, les estimations, la facturation récurrente, les dépenses, les taxes, le multi-devise, un portail client et plusieurs entreprises. Les paiements et le white-labeling sont disponibles dans des dépôts officiels de modules distincts, tous deux sous AGPL-3.0 et gratuits. Le paiement par carte passe par Stripe Checkout.
Choisissez cette option si vous voulez une petite application entièrement open source et n’avez pas besoin de trente passerelles de paiement.
InvoicePlane
Une application PHP basée sur CodeIgniter, distribuée sous licence MIT. C’est la seule option de cette liste qui s’installe en décompressant des fichiers dans la racine web. Pas de Docker ni d’étape de build Node. Les PDF sont générés avec mPDF, les templates sont donc en HTML et CSS. Les clients reçoivent un lien invité pour consulter et payer une facture.
Le point faible concerne les paiements. La documentation indique clairement qu’InvoicePlane 1.6 prend uniquement Stripe en charge par défaut et que les autres fournisseurs ont été supprimés dans cette version. Les prérequis publiés pour la branche 1.6 sont PHP 8.0 à 8.1 avec MySQL 5.5 ou la version MariaDB correspondante. Consultez les notes de la release que vous téléchargez, car la branche 1.7 évolue encore.
Choisissez cette option si vous utilisez un hébergement mutualisé ou un VPS de 512 MB.
Kimai
Un outil de suivi du temps sous AGPL-3.0 qui génère des factures à partir des feuilles de temps. C’est le bon choix si vous facturez des heures. Les templates de facture sont importés sous forme de fichiers DOCX, ODS ou XLSX. La documentation confirme qu’il s’agit des seuls formats acceptés. Ils sont ensuite rendus en PDF ou en HTML. Vous concevez votre facture dans un traitement de texte au lieu d’écrire du CSS, ce que la plupart des utilisateurs trouvent plus simple.
Kimai ne propose ni portail client ni passerelle de paiement. Vous envoyez donc le PDF par e-mail. La facturation électronique structurée est disponible via un plugin payant de la boutique, E-Invoice Plus. En août 2026, son tarif est de 99 EUR par an hors TVA pour une installation auto-hébergée. Il prend en charge les profils EN16931, XRechnung, ZUGFeRD, Factur-X et Peppol.
Choisissez cette option si la facture est le résultat du temps suivi.
ERPNext
GPL-3.0, et une catégorie de logiciel différente. Une facture client est un type de document parmi d’autres dans un système comptable complet, avec un plan comptable, des écritures de journal, la gestion des stocks et la paie. C’est le bon choix lorsque la facturation ne représente plus l’essentiel du travail. Pour un freelance avec huit clients, c’est beaucoup trop logiciel. Sa mise en place constitue un projet à part entière, décrit dans exécuter ERPNext sur un VPS.
Les factures récurrentes dépendent d’un planificateur que vous ne voyez pas
Invoice Ninja, InvoiceShelf, InvoicePlane et ERPNext génèrent tous des factures récurrentes. Kimai ne propose pas de fonctionnalité de facturation récurrente dans son cœur, car une facture y est générée à partir des entrées de feuille de temps pour une période donnée.
Le mode de défaillance est identique dans toutes les applications basées sur Laravel, et il est silencieux. Les factures récurrentes sont créées par une tâche planifiée, php artisan schedule:run, qui doit être appelée toutes les minutes par un élément externe à l’application. Si rien ne l’appelle, la liste des factures récurrentes affiche toujours une prochaine date d’envoi, puis cette date passe simplement. Aucune facture n’apparaît. Aucun message d’erreur n’est journalisé, car aucun code n’a été exécuté.
Après avoir créé votre première facture récurrente, définissez sa prochaine date d’envoi quelques minutes plus tard et attendez. Si rien n’arrive, le planificateur ne fonctionne pas. Dans une installation Docker, cela signifie généralement que le service cron ou le service du planificateur défini dans le fichier compose n’a jamais démarré, ou qu’il s’est arrêté.
docker compose ps
docker compose logs --tail 50Chaque service du fichier doit indiquer running. Un service qui reste dans l’état exited est celui dont vous devez consulter les journaux.
Devises multiples et fiscalité : vérifications avant de vous engager
Les listes de fonctionnalités indiquent « multi-devises », mais cette expression recouvre des réalités très différentes. Effectuez ces quatre vérifications sur une instance de démonstration, avec les chiffres réels de votre activité. Une erreur sur ce point sera repérée par votre comptable, et non par vous.
- La facture conserve-t-elle le taux de change applicable à sa date d’émission ? C’est indispensable. Si l’application recalcule les totaux à partir d’un taux en temps réel, les rapports du dernier trimestre changent chaque fois que vous les ouvrez. Votre comptabilité ne correspond alors plus aux déclarations déjà transmises.
- La taxe est-elle appliquée par ligne, par facture, ou aux deux niveaux ? Un taux unique appliqué à la facture convient jusqu’au moment où une ligne est exonérée.
- Pouvez-vous saisir des prix TTC aussi bien que HT ? Une conversion effectuée après coup introduit des écarts d’arrondi d’un centime par ligne. Ces centimes s’accumulent sur une année.
- Que montre le document pour un client situé dans un autre pays qui ne doit pas payer de TVA ? La facture doit imprimer la mention d’exonération, et pas seulement afficher zéro dans la colonne de taxe.
Invoice Ninja et ERPNext gèrent ces quatre points. InvoiceShelf indique les taxes et les multi-devises parmi ses fonctionnalités. InvoicePlane et Kimai sont plus simples : testez-les avec votre facture la plus complexe, et non avec la plus simple.
Portail client et passerelles de paiement
Un portail client est une page où un client consulte ses factures, télécharge le PDF et paie. Son importance est souvent sous-estimée, car les relances par e-mail prennent plus de temps que la création de la facture.
Invoice Ninja est le plus complet sur ce point, avec un portail complet, de nombreuses passerelles, l’enregistrement des moyens de paiement et la facturation automatique des factures récurrentes. InvoiceShelf propose un portail client et ajoute le paiement Stripe via son module de paiement. InvoicePlane fournit un lien invité pour chaque facture et prend en charge Stripe. Kimai ne propose aucune de ces fonctions : le PDF est donc envoyé en pièce jointe.
Un point prête constamment à confusion. Auto-héberger l’application de facturation ne signifie pas conserver les numéros de carte. Avec Stripe Checkout, le client est redirigé vers Stripe et saisit sa carte sur cette plateforme. Votre VPS ne voit jamais le numéro. Votre périmètre PCI (payment card industry) reste limité précisément parce que vous n’avez pas développé le formulaire de paiement. Si vous avez ensuite besoin de plusieurs prestataires de paiement ou souhaitez acheminer les paiements selon le pays, cette fonction doit être gérée par une couche distincte, comme l’orchestration de paiements auto-hébergée avec Hyperswitch.
Qualité du PDF et modèle que vous allez finalement modifier
Vous allez modifier le modèle. Chaque valeur par défaut place votre adresse au mauvais endroit dans votre pays.
Invoice Ninja convertit les modèles HTML et CSS en PDF avec un Chromium headless intégré à l’image, ce qui explique la taille importante du conteneur. Prévoyez suffisamment de mémoire : le navigateur headless est le processus le plus lourd de la stack, et un VPS de 1 GB est donc juste. InvoicePlane utilise mPDF, qui est écrit uniquement en PHP et reste léger, mais ignore certaines fonctionnalités CSS modernes. Kimai adopte l’approche inverse et vous demande d’importer un fichier DOCX ou ODS. La mise en page est donc réalisée dans LibreOffice ou Word par une personne qui n’a jamais écrit de feuille de style.
Si la mise en page de la facture est importante pour vous, mais pas le CSS, l’approche de Kimai est préférable. Si vous voulez versionner le modèle et pouvoir comparer ses différences, préférez HTML.
La licence autorise-t-elle l’utilisation commerciale ?
Les cinq solutions vous autorisent à facturer vos propres clients. Les différences apparaissent dès que vous allez au-delà.
Invoice Ninja est distribué sous l’Elastic License 2.0. Deux clauses sont importantes.
Vous ne pouvez pas fournir le logiciel à des tiers sous la forme d’un service hébergé ou managé lorsque ce service donne aux utilisateurs accès à un ensemble substantiel des fonctionnalités du logiciel.
Vous ne pouvez pas déplacer, modifier, désactiver ou contourner la fonctionnalité de clé de licence du logiciel.
Vous pouvez donc l’exécuter pour votre propre entreprise, mais pas déployer des instances pour des clients dans le cadre d’un produit. C’est la raison pour laquelle la suppression de la marque coûte $40 sous la forme d’une licence, et non d’un simple correctif du code source.
InvoiceShelf, Kimai et Crater sont sous licence AGPL-3.0. L’utilisation commerciale est libre et aucune offre supérieure ne vous est imposée. L’obligation figure à la section 13 : si vous modifiez le code et permettez à d’autres personnes d’utiliser votre version modifiée sur un réseau, vous devez leur proposer le code source de vos modifications. Une instance non modifiée est déjà couverte par le code source public du projet d’origine ; la plupart des personnes qui s’auto-hébergent ne sont donc jamais concernées.
InvoicePlane est sous licence MIT, qui impose le moins d’obligations du groupe, même si son README précise que le nom et le logo restent la propriété du projet.
ERPNext est sous licence GPL-3.0. Les modifications que vous distribuez doivent être partagées, tandis que l’exécution privée n’impose aucune obligation.
Cette description porte sur le texte des licences et ne constitue pas un avis juridique.
Le projet est-il toujours maintenu ? Consultez l’historique des commits
Crater a été l’application de facturation open source populaire pendant plusieurs années, et de nombreux guides le recommandent encore. Sa branche par défaut n’a reçu aucun commit depuis 741 jours.
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
}
]Parmi les 6 projets de ce bloc, cinq ont reçu un commit au cours de la semaine écoulée. InvoiceShelf est le fork qui a poursuivi le travail de Crater, sous la même licence AGPL-3.0 et avec le même modèle de données. Le passage à InvoiceShelf consiste donc en une migration des données, et non en une réécriture. Installez InvoiceShelf, pas Crater.
Installation de chacune sur un VPS
Toutes les applications sauf InvoicePlane s’exécutent le plus facilement avec Docker Compose. Si vous ne connaissez pas encore Docker Compose, commencez par une première stack Docker Compose sur un VPS, puis revenez ici.
Invoice Ninja fournit son propre dépôt Compose.
git clone https://github.com/invoiceninja/dockerfiles.git
cd dockerfiles
docker run --rm -it invoiceninja/invoiceninja php artisan key:generate --showCopiez cette clé dans le fichier env du dépôt, avec votre véritable APP_URL. Définissez ensuite le propriétaire attendu par l’image et démarrez-la.
chmod 755 docker/app/public
sudo chown -R 1500:1500 docker/app
docker compose up -dLe propriétaire 1500:1500 correspond à l’utilisateur présent dans l’image. Si vous ignorez cette étape, l’application ne pourra pas écrire son cache ni les PDF générés. Dans l’assistant de configuration, indiquez db comme hôte de base de données, car il s’agit du nom du service sur le réseau Compose. localhost désigne le conteneur de l’application lui-même.
InvoiceShelf publie des fichiers Compose prêts à l’emploi, un par moteur de base de données.
curl -fLO https://raw.githubusercontent.com/InvoiceShelf/docker/master/docker-compose.mysql.yml
mv docker-compose.mysql.yml docker-compose.ymlOuvrez ce fichier avant de le démarrer. Tous les mots de passe qu’il contient sont des valeurs d’exemple, comme l’indiquent ses propres commentaires. APP_URL, SESSION_DOMAIN et SANCTUM_STATEFUL_DOMAINS ont tous localhost comme valeur par défaut, et vous devez définir votre véritable nom d’hôte pour les trois avant la première connexion. Démarrez ensuite la stack.
docker compose up -dL’application publie le port 8090 sur l’hôte et utilise le port 8080 dans le conteneur. Placez un reverse proxy avec TLS (transport layer security) devant elle avant d’y envoyer le moindre client.
Fichier Compose de production de Kimai, issu de la documentation du projet
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:Définissez APP_SECRET avec une longue chaîne aléatoire de votre choix et TRUSTED_HOSTS avec le domaine que vous utiliserez réellement. ADMINMAIL et ADMINPASS créent le premier administrateur au premier démarrage. Modifiez donc ensuite ce mot de passe dans l’interface et retirez-le du fichier.
InvoicePlane ne fournit pas de conteneur. Créez d’abord une base de données vide.
sudo mysql -e "CREATE DATABASE invoiceplane CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"Téléchargez l’archive depuis la page des releases du projet, extrayez-la dans la racine web, copiez ipconfig.php.example vers ipconfig.php et définissez votre URL dans ce fichier en suivant ses commentaires. Ouvrez ensuite https://your-domain.example/index.php/setup et suivez les étapes de l’installateur.
Pourquoi votre facture arrive dans le dossier spam
C’est l’échec qui vous coûte de l’argent, et l’application indiquera sans problème que la facture a été envoyée.
N’envoyez pas les e-mails de facturation depuis l’adresse IP du VPS. Une nouvelle adresse IP de VPS n’a aucun historique d’envoi. Les grands fournisseurs considèrent par défaut comme suspect le premier message provenant d’une adresse inconnue dans une plage d’hébergement. Envoyez les messages via un relais SMTP (simple mail transfer protocol) sur un domaine que vous avez authentifié. La mise en place complète fait l’objet d’un guide distinct. envoyer des e-mails de manière fiable depuis une application auto-hébergée couvre le relais, les enregistrements DNS et les tests.
C’est avec l’adresse d’expéditeur que la plupart des configurations de facturation rencontrent des problèmes. Elle doit utiliser un domaine que vous contrôlez et avec lequel votre relais signe les messages avec DKIM (domainkeys identified mail). Mettre l’adresse du client dans le champ From peut sembler plus courtois, mais cela empêche la remise du message. Le serveur destinataire vérifie que le domaine de From correspond au domaine qui a authentifié le message. Gmail rejette immédiatement cette incohérence :
550 5.7.1 Unauthenticated email from example.com is not accepted due to domain's DMARC policyConservez votre propre adresse dans From et placez celle du client dans Reply-To. Vérifiez vos enregistrements publiés avant tout envoi réel.
dig +short TXT example.com
dig +short TXT _dmarc.example.com
dig +short TXT selector1._domainkey.example.comLa première commande doit retourner un enregistrement SPF (sender policy framework) qui désigne votre relais. La deuxième doit retourner une politique DMARC (domain-based message authentication, reporting and conformance). La troisième dépend du sélecteur fourni par votre relais. Une réponse vide signifie que l’enregistrement DKIM est absent ou publié sous un nom incorrect. Dans ce cas, la vérification de signature échouera pour chaque message envoyé.
Envoyez ensuite une vraie facture à un compte que vous possédez chez un grand fournisseur, puis consultez les en-têtes bruts. dkim=pass et spf=pass dans l’en-tête Authentication-Results constituent la seule preuve valable. L’indicateur « envoyé » de l’application signifie uniquement qu’elle a remis le message au relais.
Sauvegardes : l’unique base de données que vous ne pouvez pas perdre
Perdre un serveur multimédia signifie devoir retélécharger les fichiers. Perdre votre base de données de facturation signifie ne plus pouvoir vérifier ce que vous avez facturé, ce qui vous a été payé ou ce qui vous reste à payer. Traitez-la en conséquence.
Sauvegardez quatre éléments. La base de données. Le volume de stockage, qui contient les logos, les PDF générés et les justificatifs de dépenses. Le fichier d’environnement de l’application. Et les PDF générés conservés comme des fichiers ordinaires, car un PDF s’ouvre encore dans dix ans, même sans l’application qui l’a produit.
Le fichier d’environnement est plus important qu’on ne le pense. Laravel chiffre les valeurs sensibles stockées, notamment les identifiants de la passerelle de paiement, à l’aide de APP_KEY dans ce fichier. Si vous restaurez la base de données avec une clé nouvellement générée, ces valeurs ne peuvent pas être déchiffrées. Toutes vos factures sont présentes, mais les paramètres de la passerelle sont illisibles.
Un dump de la stack InvoiceShelf ressemble à ceci. Son service de base de données s’exécute sur mariadb:10, donc l’outil présent dans le conteneur est mariadb-dump.
docker compose exec -T database mariadb-dump \
--user=root --password=YOUR_ROOT_PASSWORD \
--single-transaction --databases invoiceshelf > invoiceshelf.sql--single-transaction crée un snapshot cohérent des tables InnoDB sans les verrouiller. L’application peut donc continuer à répondre pendant l’exécution du dump. -T empêche Docker d’allouer un terminal, ce qui corromprait sinon la sortie redirigée et produirait un fichier de dump impossible à importer.
Transférez ce dump hors du serveur selon une planification, avec des sauvegardes restic chiffrées vers un stockage distant, et définissez une durée de rétention suffisamment longue pour couvrir la période indiquée par votre comptable.
Restaurez ensuite la sauvegarde. Démarrez le dump dans un conteneur temporaire, connectez-vous et ouvrez la facture du mois dernier. Tant que vous ne l’avez pas fait au moins une fois, vous ne savez pas si la sauvegarde fonctionne.
Ce que votre comptable vous demandera
Ne demandez pas de conseils fiscaux à un tutoriel. Le contenu ci-dessous correspond à ce que ce logiciel peut produire. Vous pourrez donc transmettre cette liste à la personne qui vous conseille.
Données exportables. Vous devriez pouvoir exporter vos factures et vos paiements au format CSV depuis l’interface, sans client de base de données et sans ouvrir de ticket auprès du support. Un dump SQL est une sauvegarde, pas un export, car votre comptable ne peut pas l’ouvrir.
Numérotation immuable. Les numéros de facture doivent se suivre dans l’ordre et ne jamais être réutilisés, sans trous dans la séquence. La suppression d’une facture crée un trou qu’il faut ensuite expliquer. Annulez-la ou émettez plutôt un avoir, ce que toutes les applications présentées ici prennent en charge. L’obligation d’utiliser une numérotation sans trous dépend du pays où vous êtes enregistré. Il est préférable de vous renseigner rapidement.
Conservation. Conservez les dumps de la base de données et les PDF générés pendant la durée imposée par votre réglementation. Le PDF est le document qui a réellement été envoyé. C’est cet artefact qui compte si une facture est contestée.
Un historique des modifications. Il est utile de pouvoir montrer qui a modifié une facture et à quel moment. La prise en charge de cette fonction varie le plus entre ces applications. Invoice Ninja conserve un journal d’activité pour chaque enregistrement.
La facturation électronique structurée est devenue une exigence réelle, et non plus une simple fonctionnalité supplémentaire, dans certaines régions de l’UE. Invoice Ninja génère les formats courants, notamment ZUGFeRD et XRechnung, Facturae, FatturaPA et le format générique EN16931. Depuis une instance auto-hébergée, l’envoi sur le réseau Peppol passe par le point d’accès d’Invoice Ninja. Vous devez y enregistrer votre entité et acheter des crédits pour chaque envoi. Il s’agit donc d’un service payant en août 2026. Kimai prend en charge les mêmes formats grâce à son plugin payant. Les trois autres applications ne produisent actuellement aucune facture électronique structurée. C’est la principale raison de choisir Invoice Ninja si vous facturez dans l’UE.
FAQ
Dois-je installer Crater ou InvoiceShelf ?
InvoiceShelf. La branche par défaut de Crater n’a reçu aucun commit depuis 741 jours au 21 août 2026, et son propre issue tracker renvoie les utilisateurs vers le fork. InvoiceShelf utilise la même licence AGPL-3.0 et le même modèle de données : passer de l’un à l’autre consiste donc à migrer la base de données, pas à réécrire l’application. Tout guide qui recommande encore Crater a été rédigé avant que le projet cesse d’être maintenu.
Puis-je utiliser Invoice Ninja pour mon entreprise sans payer ?
Oui. Invoice Ninja auto-hébergé est entièrement fonctionnel et gratuit sous la licence Elastic 2.0, y compris les factures récurrentes, le portail client et les passerelles de paiement. Deux éléments sont payants. La suppression de la marque Invoice Ninja sur les pages visibles par les clients nécessite la licence white-label, soit « $40 par an » selon les propres termes du projet en août 2026. L’envoi de factures électroniques sur le réseau Peppol est facturé séparément selon le volume. Ce que la licence interdit, c’est d’exécuter le logiciel comme service hébergé pour d’autres personnes.
Pourquoi mes e-mails de facture arrivent-ils dans le dossier des spams ?
Presque toujours parce que le message n’est pas authentifié pour le domaine indiqué dans son adresse From. Envoyez les messages via un relais SMTP plutôt que depuis le VPS lui-même, puis publiez les enregistrements SPF et DMARC de votre domaine et ajoutez l’enregistrement DKIM sous le selector fourni par votre relais. Conservez votre propre adresse dans From et placez celle du client dans Reply-To. Définir l’adresse du client comme expéditeur fait rejeter le message par Gmail avec 550 5.7.1 Unauthenticated email from example.com is not accepted due to domain's DMARC policy. Vérifiez la correction en recherchant dkim=pass et spf=pass dans l’en-tête Authentication-Results d’un message de test.
Lequel choisir si je facture à l’heure ?
Kimai. C’est d’abord un outil de suivi du temps : la facture est donc générée à partir des entrées de feuille de temps approuvées, et les lignes correspondent au travail enregistré. Les modèles sont des fichiers DOCX, ODS ou XLSX que vous concevez dans un traitement de texte, ce qui est plus simple que de modifier du CSS. En contrepartie, Kimai n’a ni portail client ni passerelle de paiement : vous envoyez le PDF par e-mail et vous êtes payé par virement. Invoice Ninja suit également le temps et dispose d’un portail. Choisissez-le si le paiement par carte en ligne compte davantage pour vous que le niveau de détail des feuilles de temps.
Que dois-je exactement sauvegarder ?
La base de données, le volume de stockage qui contient les logos et les PDF générés, le fichier d’environnement, ainsi que les PDF générés conservés sous forme de fichiers ordinaires. Le fichier d’environnement est souvent oublié : les applications Laravel telles qu’Invoice Ninja et InvoiceShelf chiffrent les identifiants enregistrés avec APP_KEY. Restaurer une base de données à côté d’une clé nouvellement générée rend donc les paramètres de votre passerelle de paiement illisibles. Restaurez l’ensemble dans une instance temporaire, puis ouvrez une ancienne facture. C’est le seul moyen de vérifier que la sauvegarde fonctionne.