Intermédiaire ⏱ 35 min de mise en œuvre Mis à jour le 11 août 2026

Héberger Invoice Ninja : facturation et devis open source auto-hébergés

Devis, factures, relances automatiques, portail client : tout sous votre contrôle plutôt que dans un SaaS étranger. Invoice Ninja est l'alternative open source. Voici comment l'héberger.

Gérer ses devis, ses factures et ses relances dans un SaaS étranger revient à confier des données commerciales sensibles à un tiers : identité des clients, montants facturés, historique des paiements et parfois pièces jointes. Avec Invoice Ninja, ces informations restent sur une infrastructure que vous contrôlez.

Invoice Ninja est une plateforme open source destinée aux freelances, indépendants, TPE et agences. Elle permet de créer des devis et des factures, de suivre les règlements, d’automatiser les relances, de générer des factures récurrentes et d’offrir un portail à ses clients. Elle constitue ainsi une alternative auto-hébergée à des services comme FreshBooks ou Zoho Invoice.

Un déploiement sur un hébergeur français comme TalCloud permet de conserver l’application et ses données sur des serveurs situés en France, dans un cadre adapté aux enjeux du RGPD. Les VPS TalCloud bénéficient notamment de stockage NVMe, d’une protection Anti-DDoS Netrix et d’un support humain, à partir de 4,99 € par mois. Le dimensionnement reste à valider selon votre usage.

Prérequis pour héberger Invoice Ninja

Pour mettre Invoice Ninja en production, prévoyez :

  • un VPS Linux avec Docker et le plugin Docker Compose (voir installer Docker sur un VPS) ;
  • un nom de domaine ou un sous-domaine, par exemple factures.example.fr ;
  • un enregistrement DNS pointant vers l’adresse IP du serveur ;
  • une base MySQL ou MariaDB ;
  • un compte SMTP capable d’envoyer les devis, factures et relances ;
  • un reverse proxy assurant le HTTPS ;
  • un mécanisme de sauvegarde externe au VPS.

Le serveur SMTP est indispensable si vous souhaitez envoyer les documents depuis Invoice Ninja. Il peut être fourni par votre hébergeur de messagerie ou par un service transactionnel spécialisé. Vérifiez les limites d’envoi ainsi que la configuration SPF, DKIM et DMARC de votre domaine pour réduire le risque de classement en spam.

Pour un usage professionnel, évitez d’exposer directement la base de données sur Internet. Seuls les services qui doivent être publics, généralement les ports HTTP et HTTPS du reverse proxy, doivent être accessibles.

Déployer Invoice Ninja avec Docker Compose

Le projet Invoice Ninja fournit un environnement Docker. Une installation classique comprend au minimum un service applicatif Invoice Ninja et un service MariaDB ou MySQL. Selon le modèle de déploiement choisi, un serveur web ou un reverse proxy complète cette architecture.

Dans un répertoire dédié, par exemple /opt/invoiceninja, utilisez le fichier Compose correspondant à la version officielle retenue. Épinglez une version d’image précise plutôt qu’une balise flottante, puis contrôlez les notes de mise à jour avant chaque changement de version.

Le fichier d’environnement doit notamment contenir les paramètres suivants :

APP_URL=https://factures.example.fr
APP_KEY=base64:VALEUR_GENEREE

DB_HOST=db
DB_PORT=3306
DB_DATABASE=invoiceninja
DB_USERNAME=invoiceninja
DB_PASSWORD=mot_de_passe_long_et_unique

MAIL_MAILER=smtp
MAIL_HOST=smtp.example.fr
MAIL_PORT=587
MAIL_USERNAME=utilisateur_smtp
MAIL_PASSWORD=mot_de_passe_smtp
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=facturation@example.fr
MAIL_FROM_NAME="Nom de votre société"

APP_URL doit correspondre exactement à l’adresse publique finale, avec HTTPS. Les identifiants de base et SMTP doivent être propres à cette installation et ne pas être enregistrés dans Git.

Invoice Ninja repose sur Laravel et nécessite une APP_KEY. Avec un service Compose nommé app, vous pouvez la générer avant le démarrage définitif :

docker compose run --rm app php artisan key:generate --show

Copiez la valeur complète, y compris son préfixe base64:, dans APP_KEY. Ne remplacez pas cette clé sur une installation déjà utilisée sans en comprendre les conséquences, car elle sert au chiffrement de données applicatives.

Le stockage doit être persistant. La base utilise généralement un volume monté sur /var/lib/mysql, tandis que les fichiers Invoice Ninja doivent conserver le contenu de /var/www/app/public/storage. Ce second volume contient notamment des documents et pièces gérés par l’application. Sans volume persistant, une recréation du conteneur pourrait les faire disparaître.

Une fois les variables renseignées, démarrez les services :

docker compose pull
docker compose up -d
docker compose ps

Pour observer le démarrage de l’application :

docker compose logs -f app

Vérifiez ensuite que le conteneur applicatif communique avec la base, que les migrations sont terminées et qu’aucune erreur de permission n’affecte le volume de stockage.

Activer le scheduler pour les tâches récurrentes

Le scheduler n’est pas facultatif si vous utilisez les factures récurrentes, les relances automatiques ou les autres opérations planifiées. Démarrer uniquement les conteneurs ne garantit pas l’exécution de ces tâches.

Une solution simple consiste à ajouter cette entrée dans la crontab de l’hôte :

* * * * * cd /opt/invoiceninja && /usr/bin/docker compose exec -T app php artisan schedule:run >> /var/log/invoiceninja-scheduler.log 2>&1

Elle demande à Laravel de vérifier chaque minute les tâches arrivées à échéance. L’option -T évite l’allocation d’un terminal interactif pendant l’exécution par cron.

Après l’installation, contrôlez le journal du scheduler et réalisez un test avec une relance ou une facture récurrente programmée. Un cron absent ou défaillant peut passer inaperçu jusqu’au jour où une facture attendue n’est pas créée.

Configurer le premier accès et la société

Ouvrez l’adresse publique d’Invoice Ninja, puis suivez l’assistant pour créer le compte administrateur. Utilisez un mot de passe unique et activez l’authentification à deux facteurs si elle est disponible dans votre configuration.

Renseignez ensuite les informations de l’entreprise :

  • raison sociale ou nom commercial ;
  • adresse et coordonnées ;
  • logo ;
  • devise principale ;
  • règles de taxes ou de TVA ;
  • numéros d’identification applicables ;
  • mentions présentes sur les devis et factures ;
  • conditions de paiement et coordonnées bancaires.

Ces réglages doivent correspondre à votre situation réelle. Un modèle visuellement réussi ne garantit pas que toutes les mentions obligatoires sont présentes. Faites valider les champs et formulations par votre expert-comptable si nécessaire.

Testez aussi l’envoi SMTP depuis l’application. Contrôlez l’adresse d’expédition, le nom affiché, la réception du message et le rendu du PDF avant d’envoyer un premier document à un client.

Du devis au paiement

Commencez par créer une fiche client avec son nom, son adresse, son adresse électronique et ses informations de facturation. Ajoutez ensuite les produits, prestations ou tarifs fréquemment utilisés afin de gagner du temps lors de la saisie.

Créez un devis en sélectionnant le client, les lignes de prestation, les taxes éventuelles et la durée de validité. Une fois accepté, le devis peut être converti en facture sans ressaisir les données.

Lorsqu’un paiement arrive par virement, chèque ou autre moyen hors ligne, enregistrez-le manuellement dans Invoice Ninja. Vous conservez ainsi un suivi cohérent des montants dus, partiellement payés ou soldés. Avant une utilisation réelle, simulez le cycle complet avec un client de test : devis, validation, facture, paiement et reçu.

Portail client, relances et factures récurrentes

Le portail client donne à chaque destinataire un espace pour consulter ses devis, ses factures et l’état de ses paiements. Selon les fonctions activées, il peut aussi accepter un devis ou procéder à un règlement en ligne.

Les relances automatiques permettent d’envoyer un message avant ou après l’échéance. Adaptez leur fréquence à votre activité pour éviter les notifications excessives. Vérifiez également que les modèles utilisent le bon ton et contiennent les références nécessaires au règlement.

Pour les abonnements, forfaits mensuels ou contrats de maintenance, une facture récurrente peut être générée selon un calendrier défini. Cette automatisation dépend directement du scheduler. Surveillez donc son exécution après un redémarrage du serveur, une mise à jour Docker ou une modification du fichier Compose.

Ajouter le paiement en ligne

Invoice Ninja peut être relié à des passerelles comme Stripe ainsi qu’à d’autres prestataires compatibles. Le client peut alors payer depuis son portail ou depuis le parcours associé à la facture.

Cette fonctionnalité réintroduit toutefois un tiers dans le traitement : le paiement, certaines données techniques et les frais de transaction dépendent du prestataire sélectionné. Consultez ses conditions, ses tarifs et sa politique de données avant l’activation. Protégez les clés d’API dans l’environnement du serveur et commencez par le mode de test lorsque celui-ci existe.

Prudence sur la facturation française

Le caractère open source et auto-hébergé d’Invoice Ninja ne signifie pas que l’installation est automatiquement conforme à toutes les obligations françaises.

La conformité dépend notamment de votre régime fiscal, de votre assujettissement à la TVA, des mentions obligatoires, des règles de conservation, de l’inaltérabilité éventuellement applicable et de l’évolution de la facturation électronique. Les exigences peuvent aussi différer selon que vous facturez des particuliers, des entreprises françaises ou des clients étrangers.

Comme pour une installation de Dolibarr, il faut donc éviter toute promesse générale de conformité. Demandez à votre expert-comptable de vérifier votre configuration, vos modèles, votre numérotation et votre processus d’archivage. Vérifiez également que la version et les extensions utilisées répondent bien à votre cas précis.

Mettre l’application derrière HTTPS

Placez Invoice Ninja derrière un reverse proxy comme Nginx, Traefik, Caddy ou Nginx Proxy Manager. Celui-ci doit gérer le certificat TLS, rediriger HTTP vers HTTPS et transmettre correctement le protocole ainsi que l’adresse du client.

N’exposez pas le port interne de l’application au public lorsqu’il n’est utile qu’au reverse proxy. Après configuration, vérifiez l’accès au portail, les ressources statiques, les téléchargements de PDF et les liens générés dans les courriels. Une valeur APP_URL incorrecte peut produire des liens en HTTP ou pointant vers une adresse interne.

Sécurité, mises à jour et sauvegardes

Limitez les accès SSH, activez le pare-feu, installez les correctifs du système et surveillez les journaux. Les mises à jour d’Invoice Ninja doivent être testées avec une sauvegarde préalable.

Pour sauvegarder MariaDB avec un service nommé db :

mkdir -p backups
docker compose exec -T db sh -c 'mariadb-dump -u root -p"$MARIADB_ROOT_PASSWORD" "$MARIADB_DATABASE"' > backups/invoiceninja-$(date +%F).sql

Si votre image fournit mysqldump plutôt que mariadb-dump, utilisez :

docker compose exec -T db sh -c 'mysqldump -u root -p"$MARIADB_ROOT_PASSWORD" "$MARIADB_DATABASE"' > backups/invoiceninja-$(date +%F).sql

Sauvegardez également le volume associé à /public/storage, ainsi que le fichier Compose et les variables nécessaires à la restauration. Conservez au moins une copie chiffrée hors du VPS. Notre guide sur la stratégie de sauvegarde d’un serveur détaille l’automatisation. Enfin, testez régulièrement une restauration dans un environnement isolé : base, fichiers, accès administrateur, génération de PDF, SMTP et scheduler.