
La gestione di fatture, preventivi e pagamenti è una delle attività più delicate per ogni azienda, studio professionale o freelance.
Disporre di uno strumento affidabile, flessibile e open source consente non solo di risparmiare sui costi di licenza, ma anche di mantenere il pieno controllo dei propri dati.
InvoiceNinja è una delle soluzioni più apprezzate in questo ambito: una piattaforma moderna per la fatturazione elettronica, la gestione clienti e la contabilità leggera, sviluppata in PHP e basata su framework Laravel.
In questo articolo vedremo come installare e configurare la versione self-hosted di InvoiceNinja su Ubuntu Server 24.04 LTS, utilizzando i pacchetti ufficiali e le best practice più aggiornate.
L’obiettivo è ottenere un sistema funzionante in pochi passaggi, sicuro e pronto per essere utilizzato in ambiente produttivo o di test.
Al termine della guida avrai a disposizione un’installazione completa e autonoma di InvoiceNinja, pronta per emettere fatture, generare preventivi, tracciare pagamenti e gestire clienti direttamente dal tuo server Ubuntu il tutto con la massima libertà e trasparenza garantita dall’open source.
PREREQUISITI
Sistema operativo: Ubuntu Server 24.04 LTS (64 bit)
Accesso amministrativo: Un utente con privilegi sudo per installare e configurare i pacchetti.
Requisiti hardware minimi:
- CPU: almeno 2 core
- RAM: almeno 2 GB (consigliati 4 GB o più)
- Spazio disco: 20 GB liberi (meglio SSD)
- Connessione Internet stabile
- Server web: Nginx (consigliato) oppure Apache2
- PHP: Versione 8.1 o superiore (Ubuntu 24.04 fornisce PHP 8.3).
AGGIORNAMENTO SERVER
Aggiornare il repository dei pacchetti con il comando:
|
0 |
sudo apt update
|
Consentire tutto il traffico HTTP e HTTPS attraverso il firewall con il comando:
|
0 |
sudo ufw allow http && sudo ufw allow https
|
INSTALLAZIONE DELLE DIPENDENZE NECESSARIE
Installare Nginx, MySQL e PHP con il comando:
|
0 |
sudo apt install nginx mysql-server php -y
|
Verificare la versione PHP installata e confermare che sia PHP 8.3 o superiore con il comando:
|
0 |
php -v
|
Installare PHP-FPM e tutte le estensioni PHP necessarie per Invoice Ninja.
|
0 |
sudo apt install php8.3-bcmath php8.3-gmp php8.3-fileinfo php8.3-gd php8.3-mbstring php8.3-pdo php8.3-xml php8.3-cli php8.3-curl php8.3-zip php8.3-gmp php8.3-mysql php8.3-fpm -y
|
Abilitare Nginx all’avvio con il comando:
|
0 |
sudo systemctl enable nginx
|
Avviare il servizio di sistema Nginx con il comando:
|
0 |
sudo systemctl start nginx
|
Controllare lo stato del servizio Nginx e verificare che sia in esecuzione con il comando:
|
0 |
sudo systemctl status nginx
|
Se è tutto ok dovremmo visualizzare il seguente output:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Sat 2025-10-11 21:15:41 CEST; 7min ago
Docs: man:nginx(8)
Main PID: 7706 (nginx)
Tasks: 9 (limit: 979)
Memory: 6.4M (peak: 14.4M)
CPU: 53ms
CGroup: /system.slice/nginx.service
├─7706 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
├─7708 "nginx: worker process"
├─7709 "nginx: worker process"
├─7710 "nginx: worker process"
├─7711 "nginx: worker process"
├─7712 "nginx: worker process"
├─7713 "nginx: worker process"
├─7714 "nginx: worker process"
└─7715 "nginx: worker process"
|
CREAZIONE DEL DATABASE MYSQL
Invoice Ninja richiede un database MySQL per funzionare correttamente.
Utilizzare i seguenti passaggi per creare un nuovo database MySQL per Invoice Ninja.
Accedere a MySQL con il seguente comando:
|
0 |
sudo mysql -u root |
Creare un nuovo database.invoiceninjadb con il comando:
|
0 |
CREATE DATABASE invoiceninjadb;
|
Creare un nuovo utente con una password complessa. Sostituire con la tua password effettiva il campo PASSWORD
|
0 |
CREATE USER 'invoiceninja-admin'@'localhost' IDENTIFIED BY 'PASSWORD'; |
Concedere all’utente i privilegi completi per il database con il comando:
|
0 |
GRANT ALL PRIVILEGES ON invoiceninjadb.* TO 'invoiceninja-admin'@'localhost'; |
Svuotare la tabella dei privilegi MySQL per applicare le modifiche alle autorizzazioni utente con il comando:
|
0 |
FLUSH PRIVILEGES; |
Uscire dalla console del database MySQL con il comando:
|
0 |
EXIT; |
SCARICARE INVOICE NINJA
Seguire i seguenti passaggi per scaricare l’ultimo file di rilascio di Invoice Ninja e installarlo sul server.
Creare una nuova directory in /var/www/ con il comando:
|
0 |
sudo mkdir -p /var/www/invoiceninja
|
Passare alla directory.invoiceninja
|
0 |
cd /var/www/invoiceninja
|
Visitare la pagina delle versioni di Invoice Ninja e verificare l’ultima versione da scaricare al seguente link:
Durante la stesura di questo articolo l’ultima versione stabile disponibile è la v5.12.28
Scaricare InvoiceNinja con il comando:
|
0 |
sudo wget https://github.com/invoiceninja/invoiceninja/releases/download/v5.12.28/invoiceninja.tar.gz
|
Estrarre tutti i file dall’archivio scaricato con il comando:
|
0 |
sudo tar -xvf invoiceninja.tar.gz
|
Rimuovere l’archivio per risparmiare spazio su disco con il comando:
|
0 |
sudo rm invoiceninja.tar.gz
|
Copiare il file env.example per creare un nuovo file .env con il comando:
|
0 |
sudo cp .env.example .env
|
Concedere all’utente e al gruppo Nginx le autorizzazioni complete per la directory www-data invoiceninja con il comando:
|
0 |
sudo chown -R www-data:www-data /var/www/invoiceninja
|
Aprire il crontab di sistema come utente www-data con il comando:
|
0 |
sudo -u www-data crontab -e
|
Aggiungere il seguente comando di pianificazione Laravel per eseguire attività di manutenzione regolari per Invoice Ninja
|
0 |
* * * * * php8.3 /var/www/invoiceninja/artisan schedule:run >> /dev/null 2>&1
|
Salvare e chiudere il file di configurazione di Crontab.
Testare il Crontab del sistema per verificare che l’attività Invoice Ninja sia attiva con il comando:
|
0 |
sudo -u www-data crontab -l
|
Dovremmo visualizzare il seguente output:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
* * * * * php8.3 /var/www/invoiceninja/artisan schedule:run >> /dev/null 2>&1
|
CONFIGURAZIONE DI INVOICE NINJA
Invoice Ninja richiede una configurazione host virtuale per eseguire tutti i file nella directory.
Seguire i seguenti passaggi per creare una nuova configurazione dell’host virtuale Nginx che punti a /var/www/invoiceninja
Creare una nuova configurazione dell’host virtuale nella directory /etc/nginx/sites-available con il comando:
|
0 |
sudo nano /etc/nginx/sites-available/invoiceninja.conf
|
Aggiungere al file le seguenti configurazioni di blocco del server Nginx.
NOTA BENE: Sostituire il nome del server invoiceninja.lab.test con quello corretto
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
server {
listen 80;
listen [::]:80;
server_name invoiceninja.lab.test;
root /var/www/invoiceninja/public;
index index.php index.html index.htm;
client_max_body_size 20M;
charset utf-8;
access_log /var/log/nginx/ininja.access.log;
error_log /var/log/nginx/ininja.error.log;
gzip on;
gzip_types application/javascript application/x-javascript text/javascript text/plain application/xml application/json;
gzip_proxied no-cache no-store private expired auth;
gzip_min_length 1000;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
if (!-e $request_filename) {
rewrite ^(.+)$ /index.php?q= last;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
}
}
|
Salvare e chiudere il file di configurazione
La configurazione dell’host virtuale Nginx precedente serve i file Invoice Ninja dalla directory utilizzando il dominio.
Tutte le richieste PHP vengono inoltrate al servizio PHP 8.3 FPM installato per elaborare e servire la dashboard di Invoice Ninja
Rimuovere la configurazione predefinita dell’host virtuale Nginx con il comando:
|
0 |
sudo rm /etc/nginx/sites-enabled/default
|
Per abilitare l’host virtuale collegare il file alla directory /etc/nginx/sites-enabled con il comando:
|
0 |
sudo ln -s /etc/nginx/sites-available/invoiceninja.conf /etc/nginx/sites-enabled/invoiceninja.conf
|
Testare la configurazione di Nginx per verificare la presenza di errori di sintassi con il comando:
|
0 |
sudo nginx -t
|
Se è tutto OK dovremmo visualizzare il seguente output:
|
0
1
|
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
|
Riavviare il server Nginx per applicare la configurazione con il comando:
|
0 |
sudo systemctl restart nginx
|
CONFIGURARE INVOICE NINJA CON CERTIFICATO SSL
Utilizzare i seguenti passaggi per generare certificati SSL Let’s Encrypt affidabili per proteggere tutte le connessioni a Invoice Ninja.
Installa il plug-in Certbot Let’s Encrypt per Nginx con il comando:
|
0 |
sudo apt install python3-certbot-nginx
|
Richiedere un nuovo certificato TLS utilizzando il tuo dominio host virtuale.
Sostituire invoiceninja.lab.com con il dominio corretto e [email protected] con l’indirizzo mail corretto.
|
0 |
sudo certbot --nginx -d invoiceninja.lab.com -m admin@lab.com --agree-tos
|
Riavviare Nginx per applicare la configurazione con il comando:
|
0 |
sudo systemctl restart nginx
|
CONFIGURAZIONE DI INVOICE NINJA DA WEBGUI
A questo punto da un qualsiasi browser richiamare il seguente link:
https://FQDN-SERVER-O-IP-ADDRESS/setup
Inserire le info relative al server quindi quelle relative al database creato in precedenza.
Cliccare quindi su Test Connection
Se è andato tutto a buon fine dovremmo visualizzare Success come mostrat nell’immagine sovrastante
Inserire quindi Nome, Cognome, Indirizzo Mail, Accettare l’EULA e cliccare su Submit
Se è andato tutto a buon fine dovremmo essere rediretti sulla schermata di Login come mostrato nell’immagine sovrastante
Inserire la mail e la password definiti nel passaggio precedente quindi cliccare Login
Inserire i dati richiesti quindi cliccare Save
Dovremmo visualizzare la Home di Invoice Ninja come mostrato nell’immagine sovrastante
FUNZIONALITA’ DI INVOICE NINJA
1. Gestione Fatture (Invoicing)
InvoiceNinja nasce come sistema di fatturazione open source completo.
Permette di creare, gestire e inviare fatture in modo flessibile, con numerazione automatica, imposte personalizzate e layout professionali.
Funzionalità principali:
- Creazione di fatture personalizzate con logo, colori e dati aziendali.
- Numerazione automatica e configurabile (prefissi, anno, progressivo).
- Possibilità di impostare tasse e IVA multiple, anche per riga.
- Supporto a valute multiple e tassi di cambio automatici.
- Aggiunta di sconti percentuali o fissi per singola voce o per l’intero documento.
- Anteprima PDF immediata e generazione automatica di file scaricabili.
- Invio diretto via email o link pubblico condivisibile.
- Stato dinamico della fattura (bozza, inviata, pagata, scaduta, cancellata).
- Promemoria automatici per fatture non pagate.
- Note personalizzate (pubbliche o private).
In pratica, puoi emettere e gestire tutte le tue fatture digitali da un’unica interfaccia, senza necessità di software esterni.
2. Gestione Pagamenti
- InvoiceNinja integra la gestione completa dei pagamenti associati a fatture e clienti.
- Registrazione manuale dei pagamenti ricevuti (contanti, bonifico, assegno, ecc.).
- Integrazione con gateway di pagamento online come:
Stripe, PayPal, Mollie, Authorize.net, Square, GoCardless e molti altri. - Possibilità di pagamenti ricorrenti automatici per abbonamenti o servizi continuativi.
- Conversione automatica di valute per pagamenti esteri.
- Ricevute e notifiche automatiche al cliente quando un pagamento viene elaborato.
- Puoi così gestire sia incassi manuali che pagamenti online con la massima semplicità.
3. Gestione Clienti (Client Management)
- Anagrafica completa dei clienti: nome, azienda, indirizzo, contatti, codice fiscale/P.IVA, termini di pagamento.
- Storico di tutte le fatture, preventivi e pagamenti relativi a ciascun cliente.
- Possibilità di allegare note, documenti o file a ciascun cliente.
- Portale clienti (Client Portal) con accesso riservato: i clienti possono visualizzare e scaricare fatture, preventivi e pagare online.
- Possibilità di assegnare crediti clienti per pagamenti anticipati o sconti futuri.
- Campi personalizzati (custom fields) per dati aggiuntivi.
4. Preventivi e Proposte (Quotes & Proposals)
- Oltre alle fatture, InvoiceNinja permette di creare preventivi dettagliati da trasformare in fatture con un clic.
- Creazione di preventivi personalizzati con stesso layout delle fatture.
- Possibilità per il cliente di approvare o rifiutare il preventivo online.
- Conversione diretta di un preventivo in fattura.
- Stato del preventivo: bozza, inviato, approvato, scaduto.
- Note, sconti e allegati personalizzabili.
- Perfetto per chi offre servizi o lavora su commessa.
5. Fatture Ricorrenti e Abbonamenti (Recurring Invoices)
- Creazione automatica di fatture periodiche (giornaliere, settimanali, mensili, annuali).
- Possibilità di associare un pagamento ricorrente via gateway (es. Stripe o PayPal).
- Impostazione di una data di inizio e di fine ciclo.
- Notifiche automatiche per rinnovi o scadenze.
- Ideale per chi gestisce servizi in abbonamento o manutenzioni programmate.
6. Gestione Prodotti e Servizi
- Catalogo prodotti/servizi con descrizione, prezzo e imposte.
- Ricerca rapida e inserimento automatico nelle fatture.
- Possibilità di creare categorie di prodotti.
- Gestione di quantità, sconti e prezzi personalizzati.
- Puoi così mantenere un archivio centralizzato di tutti i prodotti e servizi fatturabili.
7. Reportistica e Analisi
- InvoiceNinja include un sistema di report dettagliati per monitorare lo stato finanziario e operativo.
- Report su fatture emesse, pagate, scadute o cancellate.
- Analisi dei pagamenti per periodo, cliente o metodo.
- Statistiche su preventivi convertiti in fatture.
- Esportazione in formato CSV, XLSX o PDF.
- Grafici di riepilogo mensili e annuali.
- Dashboard interattiva con indicatori chiave (totale entrate, fatture non pagate, media tempi di pagamento, ecc.).
8. Multi-utente e permessi
- Creazione di più utenti con ruoli e permessi personalizzati (es. amministratore, contabile, venditore).
- Controllo dettagliato su cosa ciascun utente può vedere o modificare.
- Tracciamento delle attività (audit log).
- Perfetto per team o studi con più collaboratori.
9. Email, notifiche e template personalizzati
- Invio automatico di email per fatture, preventivi e promemoria.
- Template email personalizzabili (HTML e testo).
- Integrazione con servizi SMTP esterni (Gmail, Outlook, Mailgun, ecc.).
- Invio di notifiche automatiche per scadenze e pagamenti ricevuti.
- Possibilità di aggiungere allegati personalizzati alle comunicazioni.
10. Automazioni e API
- Automazioni tramite Laravel Scheduler (cron job) per invii e generazioni automatiche.
- API RESTful completa e documentata per integrazione con CRM, ERP o altri sistemi.
- Webhook configurabili per reagire a eventi (fattura pagata, preventivo approvato, nuovo cliente).
- Supporto all’integrazione con Zapier, Integromat/Make e piattaforme simili.
11. Gestione spese (Expenses)
- Registrazione delle spese aziendali e assegnazione a clienti o progetti.
- Allegato delle ricevute o fatture dei fornitori.
- Categorie di spesa personalizzate.
- Conversione automatica di valute.
- Possibilità di fatturare al cliente le spese sostenute.
️ 12. Gestione progetti e attività (Projects & Tasks)
- Creazione di progetti e task collegati ai clienti.
- Cronometro integrato per tenere traccia del tempo lavorato.
- Fatturazione automatica delle ore registrate.
- Visualizzazione dello stato di avanzamento di ciascun progetto.
13. Sicurezza e controllo accessi
- Autenticazione a due fattori (2FA).
- Gestione utenti e ruoli.
- Connessione HTTPS e cifratura dei dati sensibili.
- File .env con configurazioni protette.
- Supporto per backup automatici del database e dei file.
14. Localizzazione e multilingua
- Tradotto in oltre 30 lingue, incluso l’italiano.
- Supporto per fusi orari e formati data/numerici locali.
- Possibilità di inviare fatture e preventivi nella lingua del cliente.
15. Estendibilità e personalizzazione
- Personalizzazione completa del layout PDF (HTML/CSS/Blade Template).
- Temi grafici diversi per documenti e portale clienti.
- Possibilità di aggiungere campi personalizzati (custom fields) per clienti, prodotti, fatture, preventivi.
- Integrazione con servizi esterni di archiviazione (Amazon S3, Google Drive, Dropbox, ecc.).
⚙️ 16. Backup, aggiornamenti e manutenzione
- Backup manuali o automatici del database e della cartella /storage.
- Aggiornamenti regolari tramite Composer o Docker.
- Versioni LTS stabili per ambienti di produzione.
- Log dettagliati di sistema e degli errori.
✅ In sintesi
Con InvoiceNinja è possibile:
- Creare e inviare fatture, preventivi e ricevute.
- Gestire clienti, prodotti, spese e pagamenti.
- Automatizzare fatture ricorrenti e reminder.
- Collegarti a gateway di pagamento online.
- Tenere sotto controllo tutto con report chiari e dashboard intuitiva.
- Farlo in autonomia, sul tuo server, in piena sicurezza e senza licenze costose.

0 commenti