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 simple application PHP, sans orchestration particulière. Kimai facture les heures suivies plutôt que des 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 le dossier de spam reste une facture impayée, et rien ne vous indique que cela s’est produit. Le second est la sauvegarde. 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 la liste des fonctionnalités. Trois de ces cinq logiciels sont sous licence copyleft, un autre sous licence permissive, et le dernier rend son code source disponible tout en imposant de véritables limites à son utilisation.
Les cinq options, et le profil auquel chacune s’adresse
Invoice Ninja
Une application Laravel, actuellement en version 5. L’auto-hébergement est gratuit et toutes les fonctionnalités sont disponibles : factures récurrentes, devis, projets, suivi du temps, dépenses, portail client et passerelles de paiement, notamment Stripe et PayPal. Le projet se présente comme « une application de facturation, de devis, de gestion de projets et de suivi du temps, disponible avec son code source, et développée avec 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 solution 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, plusieurs devises, un portail client et plusieurs entreprises. Les paiements et le white-labeling sont disponibles dans des dépôts de modules officiels distincts, tous deux sous AGPL-3.0 et tous deux gratuits. Le paiement par carte passe par Stripe Checkout.
Choisissez cette solution si vous voulez une petite application entièrement open source et que vous 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 un web root. Pas de Docker ni d’étape de build Node. Les PDF sont générés avec mPDF ; les templates utilisent donc 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é retiré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 correspondante de MariaDB. Consultez les notes de la release que vous téléchargez, car la branche 1.7 évolue encore.
Choisissez cette solution 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 la solution adaptée 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 convertis en PDF ou en HTML. Vous mettez en page votre facture dans un traitement de texte au lieu d’écrire du CSS, ce que la plupart des utilisateurs trouvent plus simple.
Kimai ne fournit ni portail client ni passerelle de paiement. Vous envoyez donc le PDF par e-mail. La facturation électronique structurée est proposée par un plugin payant de la boutique, appelé E-Invoice Plus. Son tarif est de 99 EUR par an hors TVA pour une installation auto-hébergée en août 2026. Il prend en charge les profils EN16931, XRechnung, ZUGFeRD, Factur-X et Peppol.
Choisissez cette solution si la facture est le résultat du temps suivi.
ERPNext
Sous GPL-3.0, et dans une catégorie de logiciels différente. Une facture client est un type de document parmi d’autres dans un système de comptabilité complet, avec plan comptable, écritures de journal, stock et paie. C’est la bonne solution lorsque la facturation n’est plus l’activité principale. Pour un freelance avec huit clients, c’est beaucoup trop lourd. Sa mise en place constitue un projet à part entière, présenté dans exécuter ERPNext sur un VPS.
Les factures récurrentes dépendent d’un scheduler 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 facture récurrente dans son cœur, car une facture y est générée à partir des entrées de feuille de temps d’une période.
Le mode d’échec est identique pour 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, qu’un élément externe à l’application doit appeler toutes les minutes. Si rien ne l’appelle, la liste des factures récurrentes affiche toujours une prochaine date d’envoi, et cette date passe simplement. Aucune facture n’apparaît. Aucune erreur n’est journalisée, car aucun code n’a été exécuté.
Après avoir créé votre première facture récurrente, définissez donc sa prochaine date d’envoi quelques minutes plus tard et attendez. Si rien n’arrive, le scheduler ne fonctionne pas. Dans une installation Docker, cela signifie généralement que le service cron ou scheduler du 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 afficher running. Un service qui reste dans l’état exited est celui dont vous devez consulter les journaux.
Devises et taxes : vérifications à effectuer 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 des montants réels de votre activité. Une erreur à ce niveau sera détectée par votre comptable, pas par vous.
- La facture enregistre-t-elle le taux de change applicable à sa date d’émission ? C’est indispensable. Si l’application recalcule les totaux avec un taux en temps réel, les rapports du trimestre précédent changent chaque fois que vous les ouvrez. Votre comptabilité ne correspond alors plus aux déclarations déjà déposées.
- La taxe est-elle appliquée par ligne, par facture ou aux deux niveaux ? Un taux unique au niveau de la facture convient jusqu’au moment où une ligne est exonérée.
- Pouvez-vous saisir les prix taxes comprises et hors taxes ? Une conversion a posteriori introduit des écarts d’arrondi d’un centime par ligne. Ces centimes s’accumulent sur une année.
- Que présente le document pour un client situé dans un autre pays et 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 mentionne les taxes et les devises multiples parmi ses fonctionnalités. InvoicePlane et Kimai sont plus simples. Testez-les donc 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 : relancer un paiement par e-mail vous prend plus de temps que la création de la facture.
Invoice Ninja est le plus complet dans ce domaine, avec un portail complet, de nombreuses passerelles, des moyens de paiement enregistrés et la facturation automatique des factures récurrentes. InvoiceShelf propose un portail client et ajoute une page de paiement Stripe via son module de paiements. 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. L’auto-hébergement de l’application de facturation ne signifie pas que vous stockez 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 placée dans une couche distincte, par exemple une orchestration des paiements auto-hébergée avec Hyperswitch.
Qualité du PDF et modèle que vous allez modifier
Vous allez modifier le modèle. Chaque valeur par défaut place votre adresse au mauvais endroit pour votre pays.
Invoice Ninja convertit les modèles HTML et CSS en PDF à l’aide d’un Chromium sans interface graphique inclus dans l’image, ce qui explique la taille du conteneur. Prévoyez suffisamment de mémoire : un navigateur sans interface graphique est le processus le plus lourd de la pile, et 1 GB de RAM est juste pour un VPS. InvoicePlane utilise mPDF, qui est léger et entièrement en PHP, 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 conception de la facture est importante pour vous et que le CSS ne l’est pas, l’approche de Kimai est préférable. Si vous voulez conserver le modèle dans un système de gestion de versions et pouvoir comparer ses modifications, le HTML est préférable.
La licence vous autorise-t-elle à l’utiliser à des fins commerciales ?
Les cinq solutions vous permettent de 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 géré lorsque ce service leur donne accès à une partie substantielle des fonctionnalités du logiciel.
Vous ne pouvez pas déplacer, modifier, désactiver ou contourner la gestion de la clé de licence dans le logiciel.
Vous pouvez donc l’exécuter pour votre propre entreprise, mais pas fournir des instances à des clients dans le cadre d’un produit. C’est la raison pour laquelle la suppression de la marque coûte 40 $, au lieu de consister en un simple patch du code source.
InvoiceShelf, Kimai et Crater sont sous licence AGPL-3.0. Leur utilisation commerciale est libre et aucune offre supérieure ne s’applique. 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 amont ; la plupart des auto-hébergeurs ne sont donc jamais concernés.
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 son exécution à titre privé 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 la plus populaire pendant plusieurs années, et de nombreux guides la 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 dernière semaine. InvoiceShelf est le fork qui a poursuivi le développement 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 à migrer les données, et non à réécrire l’application. Installez InvoiceShelf, pas Crater.
Installation de chacun sur un VPS
Tous ces logiciels, sauf InvoicePlane, s’exécutent 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 la propriété attendue par l’image et démarrez-la.
chmod 755 docker/app/public
sudo chown -R 1500:1500 docker/app
docker compose up -dLa propriété 1500:1500 correspond à l’utilisateur présent dans l’image. Si vous l’omettez, l’application ne pourra pas écrire son cache ni les PDF qu’elle génère. Dans l’assistant de configuration, indiquez db comme hôte de la 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. Chaque mot de passe qu’il contient est un placeholder, comme l’indiquent ses propres commentaires. APP_URL, SESSION_DOMAIN et SANCTUM_STATEFUL_DOMAINS valent tous localhost par défaut, et les trois doivent être configurés avec votre véritable hostname avant la première connexion. Démarrez ensuite la stack.
docker compose up -dLe port 8090 de l’hôte est publié et le service écoute sur 8080 dans le conteneur. Placez un reverse proxy avec TLS (transport layer security) devant le service 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 ensuite ce mot de passe dans l’interface et supprimez-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 à l’intérieur en suivant les commentaires du fichier. Ouvrez ensuite https://your-domain.example/index.php/setup et suivez les étapes de l’installateur.
Pourquoi votre facture arrive dans le dossier des spams
C’est l’échec qui vous coûte de l’argent, et l’application indiquera volontiers que la facture a été envoyée.
N’envoyez pas les factures 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 d’une plage d’hébergement. Envoyez les messages via un relais SMTP (simple mail transfer protocol) associé à un domaine que vous avez authentifié. La mise en place complète fait l’objet d’un guide distinct. Envoyer des messages 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édition que la plupart des configurations de facturation posent problème. Elle doit utiliser un domaine que vous contrôlez et que votre relais signe avec DKIM (domainkeys identified mail). Mettre l’adresse du client dans le champ From peut sembler courtois, mais cela empêche la remise du message, car le serveur destinataire vérifie que le domaine du champ 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 le champ 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.comLe premier doit renvoyer un enregistrement SPF (sender policy framework) qui mentionne votre relais. Le deuxième doit renvoyer une politique DMARC (domain-based message authentication, reporting and conformance). Le 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 tous les messages que vous envoyez.
Envoyez ensuite une facture réelle à un compte que vous possédez chez un grand fournisseur et consultez les en-têtes bruts. dkim=pass et spf=pass dans l’en-tête Authentication-Results sont les seules preuves qui comptent. L’état « sent » de l’application signifie seulement qu’elle a transmis le message au relais.
Sauvegardes : l’unique base de données que vous ne pouvez pas perdre
Perdre un serveur multimédia signifie devoir télécharger de nouveau les fichiers. Même un serveur de photos auto-hébergé comme PhotoPrism ou Immich contient généralement une deuxième copie des originaux, qui existent encore sur le téléphone avec lequel ils ont été pris. Perdre votre base de données de facturation signifie que vous ne pouvez plus montrer ce que vous avez facturé, ce qui vous a été payé ni 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 fichiers ordinaires, car un PDF s’ouvre encore dans dix ans 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 présent 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 votre passerelle sont illisibles.
Un dump de la stack InvoiceShelf ressemble à ceci. Son service de base de données s’exécute avec 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 instantané cohérent des tables InnoDB sans les verrouiller. L’application peut donc continuer à répondre pendant le 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 régulièrement ce dump hors du serveur 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. Voici ce que ce logiciel peut produire, afin que vous puissiez 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 : toutes les applications présentées ici le permettent. L’obligation d’utiliser une numérotation sans trous dépend du pays dans lequel 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 aussi longtemps que la réglementation l’exige. Le PDF est le document qui a réellement été envoyé. C’est la pièce qui compte si une facture est contestée.
Historique des modifications. Il est utile de pouvoir montrer qui a modifié une facture et quand. C’est aussi le point qui varie le plus entre ces applications. Invoice Ninja conserve un journal d’activité pour chaque enregistrement.
La facturation électronique structurée est devenue une véritable exigence, et non plus une simple fonctionnalité supplémentaire, dans certaines parties 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 propre access point d’Invoice Ninja : vous y enregistrez votre entité et achetez 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 avec son plugin payant. Les trois autres 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 August 2026, et son propre issue tracker redirige 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 nécessite donc une migration de base de données, pas une réécriture. Tout guide qui recommande encore Crater a été rédigé avant l’abandon du projet.
Puis-je utiliser Invoice Ninja pour ma propre activité sans payer ?
Oui. Invoice Ninja auto-hébergé est pleinement fonctionnel sans frais sous licence Elastic License 2.0, avec notamment les factures récurrentes, le portail client et les payment gateways. Deux éléments sont payants. La suppression de la marque Invoice Ninja des pages visibles par les clients nécessite la licence white-label, à raison de "$40 per year" selon les propres termes du projet en August 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’exploiter le logiciel comme service hébergé pour d’autres personnes.
Pourquoi mes e-mails de facture arrivent-ils dans le dossier spam ?
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 directement depuis le VPS, 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 trouvant 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 time tracker : la facture est donc générée à partir des entrées approuvées de la feuille de temps, et les lignes correspondent au travail que vous avez 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 payment gateway : vous envoyez le PDF par e-mail et vous êtes payé par virement. Invoice Ninja permet également de suivre le temps et dispose d’un portail. Choisissez-le plutôt si le paiement en ligne par carte compte davantage pour vous que le niveau de détail de la feuille de temps.
Que dois-je exactement sauvegarder ?
La base de données, le volume de stockage contenant les logos et les PDF générés, le fichier d’environnement, ainsi que les PDF rendus conservés sous forme de fichiers ordinaires. Le fichier d’environnement est souvent oublié : les applications Laravel comme Invoice Ninja et InvoiceShelf chiffrent les identifiants enregistrés avec APP_KEY. Si vous restaurez ensuite la base de données avec une nouvelle clé, les paramètres de votre payment gateway deviennent 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.