बेहतरीन self-hosted invoicing software की तुलना
Invoice Ninja, InvoiceShelf, InvoicePlane, Kimai और ERPNext का विश्लेषण करें। recurring billing, tax, और payment gateway के साथ सही विकल्प चुनें जो आपके VPS के लिए उपयुक्त है।
आपको कौन सा self-hosted invoicing software चुनना चाहिए?
Self-hosted invoicing software के लिए एक VPS पर पाँच व्यावहारिक विकल्प उपलब्ध हैं, और ये एक-दूसरे के समान नहीं हैं। Invoice Ninja सबसे पूर्ण उत्पाद है: recurring invoices, client portal, payment gateways और e-invoice formats, ये सभी install करने के पहले दिन से ही काम करते हैं। InvoiceShelf एक हल्का और पूर्णतः open source विकल्प है। InvoicePlane एक साधारण PHP application है जिसे किसी orchestration की आवश्यकता नहीं होती। Kimai line items के बजाय track किए गए घंटों का बिल बनाता है। ERPNext एक पूर्ण accounting system है जो invoice भी print करता है।
दो समस्याएँ किसी भी self-hosted invoicing setup को missing feature की तुलना में कहीं अधिक नुकसान पहुँचाती हैं। पहली समस्या email है। Spam folder में पड़ा invoice एक unpaid invoice है, और आपको इसके बारे में कोई सूचना नहीं मिलती। दूसरी समस्या backups है। यह एकमात्र ऐसा self-hosted database है जिसका नुकसान एक असुविधा के बजाय tax संबंधी समस्या बन जाता है।
Feature list पढ़ने से पहले licence पढ़ें। इन पाँच में से तीन copyleft हैं, एक permissive है, और एक source-available है जिसमें आप क्या कर सकते हैं, इस पर वास्तविक सीमाएँ हैं।
पाँच विकल्प, और वे किसके लिए हैं
Invoice Ninja
यह एक Laravel application है, जो वर्तमान में v5 line पर है। Self-hosting मुफ्त और पूरी तरह से अनलॉक है: इसमें recurring invoices, quotes, projects, time tracking, expenses, एक client portal और Stripe तथा PayPal सहित payment gateways शामिल हैं। यह प्रोजेक्ट खुद को "Laravel के साथ निर्मित एक source-available invoice, quote, project और time-tracking app" कहता है। इसका एकमात्र भुगतान वाला हिस्सा branding है। प्रोजेक्ट के शब्दों में: "हम app के client-facing हिस्सों से Invoice Ninja branding हटाने के लिए $40 प्रति वर्ष का white-label license प्रदान करते हैं"। यह कीमत अगस्त 2026 तक मान्य है।
इसे तब चुनें जब आप सबसे संपूर्ण product चाहते हों और सबसे बड़े stack को चलाने के लिए तैयार हों।
InvoiceShelf
यह Crater का एक fork है, जो GNU Affero General Public License version 3 (AGPL-3.0) के अंतर्गत आता है। इसमें invoices, estimates, recurring billing, expenses, taxes, multi-currency, एक customer portal और multi-company की सुविधा है। Payments और white-labelling अलग-अलग आधिकारिक module repositories में उपलब्ध हैं, जो दोनों AGPL-3.0 हैं और मुफ्त हैं। Card payment, Stripe checkout के माध्यम से काम करता है।
इसे तब चुनें जब आप एक छोटा, पूरी तरह से open source application चाहते हों और आपको तीस gateways की आवश्यकता न हो।
InvoicePlane
यह CodeIgniter पर आधारित एक PHP application है, जिसे MIT licence के तहत release किया गया है। यह यहाँ एकमात्र ऐसा विकल्प है जिसे files को web root में unzip करके install किया जाता है। इसमें कोई Docker या Node build step नहीं है। PDFs, mPDF से तैयार होते हैं, इसलिए templates HTML और CSS में होते हैं। Clients को invoice देखने और भुगतान करने के लिए एक guest link मिलता है।
इसमें समस्या payments की है। Documentation स्पष्ट रूप से बताता है कि InvoicePlane 1.6 डिफ़ॉल्ट रूप से केवल Stripe का समर्थन करता है, और अन्य providers को उस version में हटा दिया गया था। 1.6 line के लिए प्रकाशित आवश्यकताएँ PHP 8.0 से 8.1 और MySQL 5.5 या उसके समकक्ष MariaDB हैं। जिस भी release को आप download करें, उसके notes जरूर पढ़ें, क्योंकि 1.7 line अभी भी विकसित हो रही है।
इसे तब चुनें जब आप shared hosting या 512 MB VPS का उपयोग कर रहे हों।
Kimai
यह एक AGPL-3.0 time tracker है जो timesheets से invoices बनाता है। जो कोई भी घंटों के आधार पर billing करता है, उसके लिए यह सही उत्तर है। Invoice templates को DOCX, ODS या XLSX files के रूप में upload किया जाता है, जो documentation के अनुसार स्वीकार्य एकमात्र प्रारूप हैं, और इन्हें PDF या HTML में render किया जाता है। आप CSS लिखने के बजाय word processor में अपना invoice layout तैयार करते हैं, जिसे अधिकांश लोग आसान मानते हैं।
Kimai में कोई client portal या payment gateway नहीं है, इसलिए आपको PDF email करना होगा। Structured e-invoicing एक सशुल्क store plugin है जिसे E-Invoice Plus कहा जाता है, जिसकी कीमत अगस्त 2026 तक self-hosted install के लिए 99 EUR (VAT को छोड़कर) प्रति वर्ष है, जो EN16931, XRechnung, ZUGFeRD, Factur-X और Peppol profiles को कवर करता है।
इसे तब चुनें जब invoice आपके द्वारा track किए गए समय का परिणाम हो।
ERPNext
यह GPL-3.0 है, और एक अलग श्रेणी का software है। Sales invoice एक पूर्ण accounting system के भीतर एक document type है, जिसमें chart of accounts, journal entries, stock और payroll शामिल होते हैं। जब invoicing केवल एक छोटा काम न रह जाए, तब यह सही उत्तर है। आठ clients वाले एक freelancer के लिए यह बहुत अधिक software है। इसे set up करना अपने आप में एक बड़ा project है, जिसे running ERPNext on a VPS में कवर किया गया है।
Recurring invoices एक ऐसे scheduler पर निर्भर करते हैं जिसे आप देख नहीं सकते
Invoice Ninja, InvoiceShelf, InvoicePlane और ERPNext, ये सभी recurring invoices जनरेट करते हैं। Kimai के core में recurring invoice की सुविधा नहीं है, क्योंकि वहाँ invoice एक निश्चित अवधि की timesheet entries से तैयार होता है।
Laravel-आधारित हर application में failure का तरीका एक जैसा है, और यह चुपचाप होता है। Recurring invoices एक scheduled task, php artisan schedule:run द्वारा बनाए जाते हैं, जिसे application के बाहर से हर मिनट कॉल किया जाना चाहिए। यदि कोई इसे कॉल नहीं करता है, तो recurring invoice की सूची में अगली भेजने की तारीख (next send date) दिखाई देती रहती है, और वह तारीख बस निकल जाती है। कोई invoice नहीं बनता है। कोई error log नहीं होता, क्योंकि कोई code चला ही नहीं।
इसलिए अपना पहला recurring invoice बनाने के बाद, उसकी अगली भेजने की तारीख को कुछ मिनट आगे सेट करें और प्रतीक्षा करें। यदि कुछ भी प्राप्त नहीं होता है, तो scheduler नहीं चल रहा है। Docker install में इसका सामान्य अर्थ यह है कि compose file में cron या scheduler service कभी शुरू नहीं हुई, या वह बंद हो गई है।
docker compose ps
docker compose logs --tail 50File की हर service को running रिपोर्ट करना चाहिए। exited state में बैठी service वह है जिसके logs आपको पढ़ने की आवश्यकता है।
Multi-currency और tax: commit करने से पहले क्या जाँचें
Feature lists में "multi-currency" का उल्लेख होता है, लेकिन इसका अर्थ अलग-अलग हो सकता है। अपने व्यवसाय के वास्तविक आंकड़ों का उपयोग करके demo instance पर ये चार जाँचें करें, क्योंकि यहाँ हुई गलती का पता आपको नहीं, बल्कि आपके accountant को चलेगा।
- क्या invoice उस exchange rate को store करता है जो उसके issue date पर लागू था? इसे ऐसा करना ही चाहिए। यदि application live rate से totals को फिर से calculate करता है, तो पिछली तिमाही की reports हर बार खोलने पर बदल जाएंगी, और आपकी books उन आंकड़ों से मेल नहीं खाएंगी जिन्हें आप पहले ही file कर चुके हैं।
- क्या tax प्रति line item, प्रति invoice, या दोनों पर लागू होता है? एक single invoice-level rate तब तक ठीक है जब तक कि कोई एक line zero-rated न हो जाए।
- क्या आप prices को tax inclusive और tax exclusive दोनों तरह से enter कर सकते हैं? बाद में conversion करने से प्रति line एक cent का rounding difference आ जाता है, और ये cents पूरे साल में जमा होकर बड़ी राशि बन जाते हैं।
- किसी दूसरे देश के client के लिए document क्या दिखाता है जिस पर कोई VAT लागू नहीं है? आपको invoice पर exemption note छपा हुआ चाहिए, न कि केवल tax column में शून्य।
Invoice Ninja और ERPNext इन चारों को संभालते हैं। InvoiceShelf अपने features में taxes और multi-currency को सूचीबद्ध करता है। InvoicePlane और Kimai सरल हैं, इसलिए उन्हें अपने सबसे आसान invoice के बजाय सबसे जटिल invoice के साथ test करें।
Client portal और payment gateways
Client portal एक ऐसा पेज है जहाँ client अपने invoices देख सकता है, PDF डाउनलोड कर सकता है और भुगतान कर सकता है। यह सुनने में जितना सरल लगता है, उससे कहीं अधिक महत्वपूर्ण है, क्योंकि ईमेल के जरिए भुगतान के लिए पीछे पड़ने में invoice बनाने की तुलना में आपका अधिक समय खर्च होता है।
Invoice Ninja इस मामले में सबसे मजबूत है, जिसमें एक पूर्ण portal, कई gateways, stored payment methods और recurring invoices पर auto-billing की सुविधा है। InvoiceShelf में एक customer portal है और यह अपने payments module के माध्यम से Stripe checkout को जोड़ता है। InvoicePlane प्रत्येक invoice के लिए एक guest link देता है और Stripe को सपोर्ट करता है। Kimai में इनमें से कोई भी सुविधा नहीं है, इसलिए PDF को attachment के रूप में भेजना पड़ता है।
एक बिंदु को लेकर अक्सर भ्रम होता है। Invoicing application को self-host करने का मतलब card numbers को अपने पास रखना नहीं है। Stripe checkout के साथ, client को Stripe पर redirect कर दिया जाता है, वह वहीं card details डालता है, और आपका VPS कभी भी वह number नहीं देखता। आपका PCI (payment card industry) scope छोटा बना रहता है क्योंकि आपने स्वयं payment form नहीं बनाया है। यदि आपको बाद में एक से अधिक processor की आवश्यकता हो, या आप देश के आधार पर payments को route करना चाहते हैं, तो वह self-hosted payment orchestration with Hyperswitch जैसी एक अलग परत (layer) का हिस्सा है।
PDF की गुणवत्ता, और वह टेम्पलेट जिसे आप अंततः एडिट करेंगे
आप टेम्पलेट को एडिट करेंगे। यहाँ मौजूद हर डिफ़ॉल्ट सेटिंग आपके देश के हिसाब से आपके पते को गलत जगह पर रखती है।
Invoice Ninja इमेज में बंडल किए गए headless Chromium का उपयोग करके HTML और CSS टेम्पलेट्स को PDF में रेंडर करता है, यही कारण है कि कंटेनर का आकार बड़ा होता है। इसके लिए मेमोरी का बजट निर्धारित करें: headless browser पूरे स्टैक में सबसे भारी प्रोसेस है, इसलिए 1 GB का VPS इसके लिए कम पड़ सकता है। InvoicePlane mPDF का उपयोग करता है, जो कि शुद्ध PHP है और हल्का है, लेकिन इसकी कीमत यह है कि यह कुछ आधुनिक CSS को सपोर्ट नहीं करता है। Kimai इसके विपरीत दृष्टिकोण अपनाता है और आपसे DOCX या ODS फ़ाइल अपलोड करने के लिए कहता है, इसलिए लेआउट LibreOffice या Word में किसी ऐसे व्यक्ति द्वारा तैयार किया जाता है जिसने कभी stylesheet नहीं लिखी है।
यदि आपके लिए डिज़ाइन किया गया इनवॉइस मायने रखता है और CSS नहीं, तो Kimai का दृष्टिकोण बेहतर है। यदि आप टेम्पलेट को version control में रखना चाहते हैं और उसमें अंतर (diff) देखना चाहते हैं, तो HTML बेहतर है।
क्या लाइसेंस आपको व्यावसायिक उपयोग की अनुमति देता है?
ये पाँचों ही आपको अपने ग्राहकों को इनवॉइस भेजने की अनुमति देते हैं। अंतर तब आता है जब आप इससे आगे कुछ करते हैं।
Invoice Ninja, Elastic License 2.0 के अंतर्गत आता है। इसमें दो शर्तें महत्वपूर्ण हैं।
आप इस सॉफ़्टवेयर को किसी तीसरे पक्ष को होस्टेड या प्रबंधित सेवा के रूप में प्रदान नहीं कर सकते, जहाँ वह सेवा उपयोगकर्ताओं को सॉफ़्टवेयर की किसी भी महत्वपूर्ण सुविधा या कार्यक्षमता तक पहुँच प्रदान करती हो।
आप सॉफ़्टवेयर में लाइसेंस कुंजी कार्यक्षमता को हटा, बदल, अक्षम या दरकिनार नहीं कर सकते।
इसलिए, इसे अपने व्यवसाय के लिए चलाना ठीक है, लेकिन ग्राहकों के लिए एक उत्पाद के रूप में इसके इंस्टेंस चलाना नहीं। दूसरी शर्त यही कारण है कि ब्रांडिंग हटाने के लिए $40 का लाइसेंस लेना पड़ता है, न कि सोर्स कोड में पैच लगाना।
InvoiceShelf, Kimai और Crater, AGPL-3.0 के अंतर्गत आते हैं। व्यावसायिक उपयोग निःशुल्क है और आपके ऊपर कोई अन्य स्तर नहीं है। इसमें धारा 13 का दायित्व है: यदि आप कोड को संशोधित करते हैं और अन्य लोगों को नेटवर्क पर अपने संशोधित संस्करण का उपयोग करने देते हैं, तो आपको उन्हें अपने परिवर्तनों का सोर्स कोड उपलब्ध कराना होगा। एक अपरिवर्तित इंस्टेंस पहले से ही अपस्ट्रीम के सार्वजनिक सोर्स द्वारा कवर किया जाता है, इसलिए अधिकांश self-hosters को इसकी चिंता करने की आवश्यकता नहीं होती।
InvoicePlane, MIT लाइसेंस के अंतर्गत है, जो इस समूह में सबसे कम दायित्व वाला है, हालाँकि इसके README में उल्लेख है कि नाम और लोगो प्रोजेक्ट के पास ही रहेंगे।
ERPNext, GPL-3.0 के अंतर्गत है। आपके द्वारा वितरित किए गए संशोधनों को साझा किया जाना चाहिए, और इसे निजी तौर पर चलाने पर कोई दायित्व नहीं है।
यह लाइसेंस टेक्स्ट का विवरण है, न कि कानूनी सलाह।
क्या यह प्रोजेक्ट अभी भी मेंटेन किया जा रहा है? कमिट लॉग देखें
Crater कई वर्षों तक एक लोकप्रिय ओपन सोर्स इनवॉइसिंग एप्लिकेशन रहा है, और कई गाइड अभी भी इसकी अनुशंसा करती हैं। इसकी डिफ़ॉल्ट ब्रांच में 741 दिनों से कोई कमिट नहीं हुआ है।
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
}
]उस ब्लॉक में मौजूद 6 प्रोजेक्ट्स में से, पांच में पिछले एक सप्ताह के भीतर कमिट हुआ है। InvoiceShelf वह फोर्क है जिसने Crater के काम को आगे बढ़ाया है, यह उसी AGPL-3.0 लाइसेंस के तहत और उसी डेटा मॉडल के साथ उपलब्ध है, इसलिए इस पर स्विच करना पूरी तरह से रीराइट करने के बजाय केवल डेटा माइग्रेशन जैसा है। Crater के बजाय InvoiceShelf इंस्टॉल करें।
VPS पर प्रत्येक को इंस्टॉल करना
InvoicePlane को छोड़कर बाकी सब Docker Compose के तहत सबसे आसानी से चलते हैं। यदि यह आपके लिए नया है, तो VPS पर पहली Docker Compose stack से शुरुआत करें और फिर यहाँ वापस आएँ।
Invoice Ninja अपनी खुद की compose repository के साथ आता है।
git clone https://github.com/invoiceninja/dockerfiles.git
cd dockerfiles
docker run --rm -it invoiceninja/invoiceninja php artisan key:generate --showउस key को repository की env फ़ाइल में, अपने वास्तविक APP_URL के साथ कॉपी करें। फिर image द्वारा अपेक्षित ownership सेट करें और इसे start करें।
chmod 755 docker/app/public
sudo chown -R 1500:1500 docker/app
docker compose up -d1500:1500 ownership image के अंदर के user से मेल खाती है। इसे छोड़ देने पर application अपना cache या generated PDFs नहीं लिख पाएगी। सेटअप विज़ार्ड में, database host के रूप में db दें, क्योंकि compose नेटवर्क पर यही service का नाम है। वहाँ localhost का अर्थ स्वयं application container है।
InvoiceShelf तैयार compose फ़ाइलें प्रकाशित करता है, जो प्रति database engine एक होती हैं।
curl -fLO https://raw.githubusercontent.com/InvoiceShelf/docker/master/docker-compose.mysql.yml
mv docker-compose.mysql.yml docker-compose.ymlइसे start करने से पहले उस फ़ाइल को खोलें। इसमें मौजूद हर password एक placeholder है और फ़ाइल अपनी टिप्पणियों में यह बताती भी है। APP_URL, SESSION_DOMAIN और SANCTUM_STATEFUL_DOMAINS सभी डिफ़ॉल्ट रूप से localhost पर सेट होते हैं, और पहली बार login करने से पहले इन तीनों में आपका वास्तविक hostname सेट होना आवश्यक है। फिर इसे up करें।
docker compose up -dयह host पर port 8090 प्रकाशित करता है और container के अंदर 8080 पर सेवा देता है। किसी भी client को भेजने से पहले इसके सामने TLS (transport layer security) वाला एक reverse proxy लगाएँ।
Kimai production compose फ़ाइल, प्रोजेक्ट डॉक्यूमेंटेशन से
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:APP_SECRET को अपनी एक लंबी random string पर और TRUSTED_HOSTS को उस domain पर सेट करें जिसका आप वास्तव में उपयोग करेंगे। ADMINMAIL और ADMINPASS पहली बार boot होने पर पहले administrator को बनाते हैं, इसलिए बाद में interface में वह password बदल दें और उसे फ़ाइल से हटा दें।
InvoicePlane का कोई container नहीं है। पहले एक खाली database बनाएँ।
sudo mysql -e "CREATE DATABASE invoiceplane CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"प्रोजेक्ट के releases पेज से archive डाउनलोड करें, इसे अपनी web root में extract करें, ipconfig.php.example को ipconfig.php पर कॉपी करें, और उस फ़ाइल में दी गई टिप्पणियों का पालन करते हुए अपना URL सेट करें। फिर https://your-domain.example/index.php/setup खोलें और installer के माध्यम से प्रक्रिया पूरी करें।
आपका इनवॉइस स्पैम फोल्डर में क्यों जाता है
यह वह विफलता है जो आपको आर्थिक नुकसान पहुँचाती है, और एप्लिकेशन खुशी-खुशी इनवॉइस को 'भेज दिया गया' के रूप में रिपोर्ट कर देगा।
VPS के अपने IP एड्रेस से इनवॉइस मेल न भेजें। एक नए VPS IP का कोई सेंडिंग इतिहास नहीं होता है, और बड़े ईमेल प्रदाता होस्टिंग रेंज के किसी अज्ञात पते से आने वाले पहले संदेश को डिफ़ॉल्ट रूप से संदिग्ध मानते हैं। अपने द्वारा प्रमाणित डोमेन पर SMTP (simple mail transfer protocol) रिले के माध्यम से मेल भेजें। इसे पूरी तरह से सेटअप करना एक अलग विषय है, और self-hosted app से विश्वसनीय रूप से मेल भेजना लेख में रिले, DNS रिकॉर्ड और टेस्टिंग के बारे में विस्तार से बताया गया है।
From एड्रेस वह जगह है जहाँ अधिकांश इनवॉइसिंग सेटअप गलत हो जाते हैं। यह आपके नियंत्रण वाले डोमेन पर होना चाहिए, और ऐसा डोमेन जिसे आपका रिले DKIM (domainkeys identified mail) के साथ साइन करता हो। From में क्लाइंट का अपना पता डालना विनम्र लग सकता है, लेकिन यह डिलीवरी को बाधित करता है, क्योंकि प्राप्त करने वाला सर्वर यह जाँचता है कि From डोमेन उस डोमेन से मेल खाता है या नहीं जिसने संदेश को प्रमाणित किया है। Gmail इस विसंगति को सीधे अस्वीकार कर देता है:
550 5.7.1 Unauthenticated email from example.com is not accepted due to domain's DMARC policyFrom में अपना पता रखें और क्लाइंट को Reply-To में डालें। कुछ भी वास्तविक भेजने से पहले अपने प्रकाशित रिकॉर्ड की जाँच करें।
dig +short TXT example.com
dig +short TXT _dmarc.example.com
dig +short TXT selector1._domainkey.example.comपहले कमांड को एक SPF (sender policy framework) रिकॉर्ड लौटाना चाहिए जिसमें आपके रिले का नाम हो। दूसरे को एक DMARC (domain-based message authentication, reporting and conformance) पॉलिसी लौटानी चाहिए। तीसरा आपके रिले द्वारा दिए गए सेलेक्टर पर निर्भर करता है, और यदि उत्तर खाली है तो इसका मतलब है कि DKIM रिकॉर्ड गायब है या गलत नाम से प्रकाशित किया गया है, इसलिए आपके द्वारा भेजा गया हर संदेश अपने सिग्नेचर चेक में विफल हो जाएगा।
इसके बाद किसी बड़े प्रदाता के पास अपने स्वामित्व वाले अकाउंट पर एक वास्तविक इनवॉइस भेजें और raw headers को पढ़ें। Authentication-Results हेडर में dkim=pass और spf=pass ही एकमात्र प्रमाण है जो मायने रखता है। एप्लिकेशन का अपना "sent" फ्लैग केवल यह दर्शाता है कि उसने संदेश को रिले तक पहुँचा दिया है।
बैकअप: वह डेटाबेस जिसे आप खो नहीं सकते
मीडिया सर्वर खोने का मतलब है फाइलों को दोबारा डाउनलोड करना। यहाँ तक कि PhotoPrism या Immich जैसा self-hosted फोटो सर्वर भी आमतौर पर ओरिजिनल फाइलों की दूसरी कॉपी रखता है, जो उन्हें लेने वाले फोन में मौजूद होती हैं। इनवॉइसिंग डेटाबेस खोने का मतलब है कि आप यह नहीं दिखा पाएंगे कि आपने क्या बिल किया, आपको क्या भुगतान मिला, या आप पर अभी भी क्या बकाया है। इसे उसी गंभीरता से लें।
चार चीजों का बैकअप लें। डेटाबेस। स्टोरेज वॉल्यूम, जिसमें लोगो, जनरेट की गई PDF और खर्च की रसीदें होती हैं। एप्लिकेशन की environment फाइल। और साधारण फाइलों के रूप में रखी गई रेंडर की गई PDF, क्योंकि एक PDF उसे बनाने वाले एप्लिकेशन के बिना भी दस साल बाद खुल सकती है।
Environment फाइल लोगों की अपेक्षा से कहीं अधिक महत्वपूर्ण है। Laravel संवेदनशील स्टोर्ड वैल्यूज को, जिसमें पेमेंट गेटवे क्रेडेंशियल्स भी शामिल हैं, उस फाइल में मौजूद APP_KEY का उपयोग करके एन्क्रिप्ट करता है। डेटाबेस को एक नई जनरेट की गई की (key) के साथ रिस्टोर करने पर वे वैल्यूज डिक्रिप्ट नहीं होंगी। आपके सभी इनवॉइस मौजूद रहेंगे लेकिन आपके गेटवे सेटिंग्स अपठनीय हो जाएंगे।
InvoiceShelf स्टैक से लिया गया डंप कुछ इस तरह दिखता है। इसका डेटाबेस सर्विस mariadb:10 चलाता है, इसलिए कंटेनर के अंदर का टूल mariadb-dump है।
docker compose exec -T database mariadb-dump \
--user=root --password=YOUR_ROOT_PASSWORD \
--single-transaction --databases invoiceshelf > invoiceshelf.sql--single-transaction InnoDB टेबल्स का एक कंसिस्टेंट स्नैपशॉट लेता है, बिना उन्हें लॉक किए, ताकि डंप चलते समय भी एप्लिकेशन काम करती रहे। -T Docker को टर्मिनल एलोकेट करने से रोकता है, जो अन्यथा रीडायरेक्ट किए गए आउटपुट को करप्ट कर देगा और आपको एक ऐसी डंप फाइल देगा जो इम्पोर्ट नहीं होगी।
इसे off-site स्टोरेज पर एन्क्रिप्टेड restic बैकअप के साथ एक शेड्यूल पर सर्वर से बाहर भेजें, और रिटेंशन को इतना लंबा रखें कि वह आपके अकाउंटेंट द्वारा बताई गई अवधि को कवर कर सके।
फिर इसे रिस्टोर करें। डंप को एक थ्रोअवे कंटेनर में लाएं, लॉग इन करें, और पिछले महीने का इनवॉइस खोलें। जब तक आप ऐसा एक बार नहीं कर लेते, तब तक आप नहीं जानते कि बैकअप काम करता है या नहीं।
आपका अकाउंटेंट आपसे क्या मांगेगा
किसी ट्यूटोरियल से टैक्स संबंधी सलाह न लें। नीचे दी गई जानकारी वह है जो यह सॉफ्टवेयर तैयार कर सकता है, ताकि आप इस सूची को अपने सलाहकार को दिखा सकें।
निर्यात योग्य डेटा (Exportable data)। आप बिना किसी डेटाबेस क्लाइंट का उपयोग किए और बिना सपोर्ट टिकट खोले, इंटरफ़ेस से अपने इनवॉइस और भुगतान को CSV में निर्यात करने में सक्षम होने चाहिए। SQL डंप एक बैकअप है, निर्यात नहीं, क्योंकि आपका अकाउंटेंट इसे खोल नहीं सकता है।
अपरिवर्तनीय नंबरिंग (Immutable numbering)। इनवॉइस नंबर क्रम में होने चाहिए, कभी भी दोबारा उपयोग नहीं किए जाने चाहिए और उनके बीच कोई अंतराल (gap) नहीं होना चाहिए। इनवॉइस को डिलीट करने से एक अंतराल बन जाता है जिसे बाद में स्पष्ट करना पड़ता है। इसके बजाय इनवॉइस को कैंसिल या क्रेडिट करें, जो यहाँ बताए गए सभी एप्लिकेशन सपोर्ट करते हैं। क्या आपके लिए गैपलेस नंबरिंग अनिवार्य है, यह इस पर निर्भर करता है कि आप कहाँ पंजीकृत हैं, और इस बारे में जल्दी पूछ लेना उचित है।
रिटेंशन (Retention)। डेटाबेस डंप और रेंडर की गई PDF फाइलों को तब तक सुरक्षित रखें जब तक आपके नियम इसकी मांग करते हैं। PDF वह दस्तावेज़ है जिसे वास्तव में भेजा गया था, और यदि कभी इनवॉइस पर विवाद होता है, तो यही वह साक्ष्य है जो मायने रखता है।
परिवर्तन इतिहास (A change history)। यह देख पाना कि किसने और कब इनवॉइस में बदलाव किया, काफी उपयोगी होता है, और यह इन एप्लिकेशनों के बीच सबसे अधिक भिन्न होता है। Invoice Ninja प्रत्येक रिकॉर्ड के लिए एक एक्टिविटी लॉग रखता है।
यूरोपीय संघ (EU) के कुछ हिस्सों में स्ट्रक्चर्ड ई-इनवॉइसिंग अब एक अतिरिक्त सुविधा के बजाय एक वास्तविक आवश्यकता बन गई है। Invoice Ninja सामान्य फॉर्मेट तैयार करता है, जिसमें ZUGFeRD, XRechnung, Facturae, FatturaPA और सामान्य EN16931 शामिल हैं। सेल्फ-होस्टेड इंस्टेंस से Peppol नेटवर्क के माध्यम से डिलीवरी Invoice Ninja के अपने एक्सेस पॉइंट से होती है: आप उनके साथ अपनी इकाई को पंजीकृत करते हैं और प्रति सबमिशन क्रेडिट खरीदते हैं, इसलिए अगस्त 2026 तक यह एक सशुल्क सेवा है। Kimai अपने सशुल्क प्लगइन के माध्यम से इन्हीं फॉर्मेट्स तक पहुँचता है। अन्य तीन एप्लिकेशन वर्तमान में कोई भी स्ट्रक्चर्ड ई-इनवॉइस तैयार नहीं करते हैं, जो कि यदि आप EU के भीतर इनवॉइसिंग करते हैं, तो Invoice Ninja को चुनने का सबसे मजबूत कारण है।
FAQ
क्या मुझे Crater इंस्टॉल करना चाहिए या InvoiceShelf?
InvoiceShelf चुनें। 21 अगस्त 2026 तक Crater की डिफ़ॉल्ट ब्रांच में 741 दिनों से कोई commit नहीं हुआ है, और इसका अपना issue tracker लोगों को इसके fork पर जाने का सुझाव देता है। InvoiceShelf में वही AGPL-3.0 लाइसेंस और वही डेटा मॉडल है, इसलिए इनके बीच स्विच करना एक पूर्ण rewrite के बजाय केवल डेटाबेस माइग्रेशन है। जो भी गाइड अभी भी Crater की सिफारिश करती है, वह प्रोजेक्ट के शांत होने से पहले लिखी गई थी।
क्या मैं बिना भुगतान किए अपने व्यवसाय के लिए Invoice Ninja का उपयोग कर सकता हूँ?
हाँ। Self-hosted Invoice Ninja, Elastic License 2.0 के तहत बिना किसी शुल्क के पूरी तरह कार्यात्मक है, जिसमें recurring invoices, client portal और payment gateways शामिल हैं। दो चीजों के लिए शुल्क लगता है। क्लाइंट-फेसिंग पेजों से Invoice Ninja की ब्रांडिंग हटाने के लिए white-label लाइसेंस की आवश्यकता होती है, जो अगस्त 2026 तक प्रोजेक्ट के शब्दों में "$40 प्रति वर्ष" है। Peppol नेटवर्क के माध्यम से e-invoices भेजने के लिए अलग से शुल्क लिया जाता है। लाइसेंस केवल इस बात पर रोक लगाता है कि आप इस सॉफ़्टवेयर को अन्य लोगों के लिए एक होस्टेड सेवा के रूप में चलाएं।
मेरे इनवॉइस ईमेल स्पैम फ़ोल्डर में क्यों जाते हैं?
इसका कारण लगभग हमेशा यह होता है कि संदेश उसके From पते में मौजूद डोमेन के लिए प्रमाणित (authenticated) नहीं है। VPS से सीधे भेजने के बजाय SMTP relay के माध्यम से भेजें, फिर अपने डोमेन के लिए SPF और DMARC रिकॉर्ड प्रकाशित करें और अपने relay द्वारा दिए गए सेलेक्टर के तहत DKIM रिकॉर्ड जोड़ें। From में अपना पता रखें और क्लाइंट को Reply-To में डालें। क्लाइंट का पता भेजने वाले (sender) के रूप में सेट करने पर Gmail संदेश को 550 5.7.1 Unauthenticated email from example.com is not accepted due to domain's DMARC policy के साथ अस्वीकार कर देता है। एक टेस्ट संदेश के Authentication-Results हेडर में dkim=pass और spf=pass खोजकर सुधार की पुष्टि करें।
यदि मैं प्रति घंटा बिलिंग करता हूँ तो मुझे किसे चुनना चाहिए?
Kimai। यह मुख्य रूप से एक time tracker है, इसलिए इनवॉइस स्वीकृत timesheet प्रविष्टियों से उत्पन्न होता है और line items वही काम होते हैं जिन्हें आपने लॉग किया है। इसके टेम्प्लेट DOCX, ODS या XLSX फाइलें होती हैं जिन्हें आप वर्ड प्रोसेसर में डिज़ाइन करते हैं, जो CSS को एडिट करने से आसान है। इसकी कमी यह है कि Kimai में कोई client portal और payment gateway नहीं है, इसलिए आप PDF ईमेल करते हैं और ट्रांसफर के माध्यम से भुगतान प्राप्त करते हैं। Invoice Ninja भी समय ट्रैक करता है और इसमें पोर्टल भी है, इसलिए यदि आपके लिए timesheet के विवरण से अधिक ऑनलाइन कार्ड भुगतान महत्वपूर्ण है, तो उसे चुनें।
मुझे वास्तव में किसका बैकअप लेने की आवश्यकता है?
डेटाबेस, लोगो और उत्पन्न PDFs रखने वाला storage volume, environment फाइल, और सादी फाइलों के रूप में रखी गई रेंडर की गई PDFs। लोग अक्सर environment फाइल का बैकअप लेना भूल जाते हैं: Invoice Ninja और InvoiceShelf जैसे Laravel एप्लिकेशन संग्रहीत क्रेडेंशियल्स को APP_KEY के साथ एन्क्रिप्ट करते हैं, इसलिए यदि आप डेटाबेस को नई जनरेट की गई की (key) के साथ रिस्टोर करते हैं, तो आपकी payment gateway सेटिंग्स अपठनीय हो जाएंगी। पूरी प्रक्रिया को एक बार एक अस्थायी इंस्टेंस (throwaway instance) में रिस्टोर करके देखें और एक पुराना इनवॉइस खोलें, क्योंकि यही एकमात्र तरीका है जिससे आप जान सकते हैं कि बैकअप काम कर रहा है।