SSD Nodes Learn 🎉 VPS $5.50/माह से
गाइड Matt Connorलेखक: Matt Connor

बेहतरीन self-hosted invoicing software की तुलना

Invoice Ninja, InvoiceShelf, InvoicePlane, Kimai और ERPNext का विश्लेषण करें। recurring billing, tax और payment gateway के आधार पर सही विकल्प चुनें और अपनी डेटा सुरक्षा सुनिश्चित करें।

आपको कौन सा 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 है। यदि कोई invoice spam folder में चला जाए, तो उसका भुगतान नहीं होता, और आपको इसके बारे में पता भी नहीं चलता। दूसरी समस्या backups है। यह एकमात्र ऐसा self-hosted database है जिसका नुकसान एक असुविधा के बजाय tax संबंधी समस्या बन जाता है।

feature list पढ़ने से पहले license पढ़ें। इन पांच में से तीन 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 है। प्रोजेक्ट के अपने शब्दों में: "हम 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 के लिए प्रकाशित requirements 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 तैयार करते हैं, जिसे अधिकांश लोग आसान मानते हैं।

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 आपके द्वारा ट्रैक किए गए समय का परिणाम है।

ERPNext

यह GPL-3.0 है, और एक अलग श्रेणी का software है। Sales invoice एक पूर्ण accounting system के भीतर एक document type है, जिसमें chart of accounts, journal entries, stock और payroll शामिल हैं। जब invoicing केवल एक छोटा काम न रहकर मुख्य व्यवसाय बन जाए, तब यह सही उत्तर है। आठ clients वाले एक freelancer के लिए यह बहुत अधिक software है। इसे set up करना अपने आप में एक प्रोजेक्ट है, जिसे VPS पर ERPNext चलाना में कवर किया गया है।

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 नहीं होता, क्योंकि कोई कोड चला ही नहीं।

इसलिए अपना पहला recurring invoice बनाने के बाद, उसकी अगली भेजने की तारीख को कुछ मिनट आगे सेट करें और प्रतीक्षा करें। यदि कुछ नहीं आता है, तो scheduler नहीं चल रहा है। Docker install में इसका आमतौर पर मतलब है कि compose file में cron या scheduler service कभी शुरू नहीं हुई, या वह बंद हो गई।

docker compose ps
docker compose logs --tail 50

File में मौजूद हर service को running रिपोर्ट करना चाहिए। exited स्थिति में फंसी service वह है जिसके logs आपको पढ़ने की आवश्यकता है।

Multi-currency और tax: commit करने से पहले क्या जाँचें

Feature lists में "multi-currency" का उल्लेख होता है, लेकिन इसका अर्थ अलग-अलग हो सकता है। एक demo instance पर अपने व्यवसाय के वास्तविक आंकड़ों का उपयोग करके ये चार जाँचें करें, क्योंकि यहाँ हुई गलती आपको नहीं, बल्कि आपके accountant को पता चलती है।

  1. क्या invoice उस exchange rate को store करता है जो उसके issue date पर लागू था? इसे ऐसा करना ही चाहिए। यदि application live rate से totals को recalculate करती है, तो पिछली तिमाही की reports हर बार बदलने लगेंगी जब आप उन्हें खोलेंगे, और आपके books उन आंकड़ों से मेल नहीं खाएंगे जो आप पहले ही file कर चुके हैं।
  2. क्या tax प्रति line item, प्रति invoice, या दोनों पर लागू होता है? एक single invoice-level rate तब तक ठीक है जब तक कि कोई एक line zero-rated न हो जाए।
  3. क्या आप prices को tax inclusive और tax exclusive दोनों तरह से enter कर सकते हैं? बाद में conversion करने से प्रति line एक cent का rounding अंतर आ जाता है, और ये cents पूरे साल में जमा होकर बड़ी राशि बन जाते हैं।
  4. किसी दूसरे देश के ऐसे 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 ब्राउज़र पूरे स्टैक में सबसे भारी प्रक्रिया है, इसलिए 1 GB का VPS इसके लिए बहुत कम है। InvoicePlane mPDF का उपयोग करता है, जो कि शुद्ध PHP है और हल्का है, लेकिन इसकी कीमत यह है कि यह कुछ आधुनिक CSS को अनदेखा कर देता है। Kimai इसके विपरीत दृष्टिकोण अपनाता है और आपसे एक DOCX या ODS फ़ाइल अपलोड करवाता है, इसलिए लेआउट LibreOffice या Word में किसी ऐसे व्यक्ति द्वारा तैयार किया जाता है जिसने कभी कोई स्टाइलशीट नहीं लिखी है।

यदि आपके लिए एक डिज़ाइन किया गया इनवॉइस मायने रखता है और CSS नहीं, तो Kimai का दृष्टिकोण बेहतर है। यदि आप टेम्पलेट को version control में रखना चाहते हैं और उसमें अंतर (diff) देखना चाहते हैं, तो HTML बेहतर है।

क्या लाइसेंस आपको व्यावसायिक उपयोग की अनुमति देता है?

ये पाँचों आपको अपने ग्राहकों को इनवॉइस भेजने की अनुमति देते हैं। अंतर तब स्पष्ट होता है जब आप इससे आगे कुछ करते हैं।

Invoice Ninja, Elastic License 2.0 के अंतर्गत आता है। इसमें दो शर्तें महत्वपूर्ण हैं।

आप इस सॉफ़्टवेयर को किसी तीसरे पक्ष को होस्टेड या प्रबंधित सेवा के रूप में प्रदान नहीं कर सकते, जहाँ वह सेवा उपयोगकर्ताओं को सॉफ़्टवेयर की किसी भी महत्वपूर्ण सुविधा या कार्यक्षमता तक पहुँच प्रदान करती हो।
आप सॉफ़्टवेयर में लाइसेंस कुंजी (license key) कार्यक्षमता को हटा, बदल, अक्षम या दरकिनार नहीं कर सकते।

इसलिए, इसे अपने व्यवसाय के लिए चलाना ठीक है, लेकिन ग्राहकों के लिए इसे एक उत्पाद के रूप में चलाना नहीं। दूसरी शर्त का कारण यह है कि ब्रांडिंग हटाना $40 का लाइसेंस है, न कि सोर्स कोड में कोई पैच।

InvoiceShelf, Kimai और Crater, AGPL-3.0 के अंतर्गत आते हैं। व्यावसायिक उपयोग निःशुल्क है और आपके ऊपर कोई उच्च स्तर (tier) नहीं है। इसमें धारा 13 का दायित्व है: यदि आप कोड को संशोधित करते हैं और अन्य लोगों को नेटवर्क के माध्यम से अपने संशोधित संस्करण का उपयोग करने देते हैं, तो आपको उन्हें अपने परिवर्तनों का सोर्स कोड प्रदान करना होगा। एक अपरिवर्तित इंस्टेंस पहले से ही अपस्ट्रीम के सार्वजनिक सोर्स कोड द्वारा कवर किया जाता है, इसलिए अधिकांश सेल्फ-होस्टर्स को इससे कोई सरोकार नहीं होता।

InvoicePlane, MIT लाइसेंस के अंतर्गत है, जो इस समूह में सबसे कम दायित्व वाला है, हालाँकि इसके README में उल्लेख है कि नाम और लोगो प्रोजेक्ट के पास ही रहेंगे।

ERPNext, GPL-3.0 के अंतर्गत है। आपके द्वारा वितरित किए गए संशोधनों को साझा किया जाना चाहिए, और इसे निजी तौर पर चलाने पर कोई दायित्व नहीं है।

यह लाइसेंस टेक्स्ट का विवरण है, न कि कानूनी सलाह।

क्या यह प्रोजेक्ट अभी भी मेंटेन किया जा रहा है? कमिट लॉग देखें

Crater कई वर्षों तक एक लोकप्रिय ओपन सोर्स इनवॉइसिंग एप्लिकेशन रहा है, और कई गाइड अभी भी इसकी अनुशंसा करती हैं। इसकी डिफ़ॉल्ट ब्रांच में 741 दिनों से कोई कमिट नहीं हुआ है।

ChartGap since the last commit on the default branch, in days, checked 21 August 2026
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 के साथ कॉपी करें। फिर ownership को उस तरह सेट करें जैसा image अपेक्षा करती है और इसे start करें।

chmod 755 docker/app/public
sudo chown -R 1500:1500 docker/app
docker compose up -d

1500:1500 ownership image के अंदर के user से मेल खाती है। इसे छोड़ देने पर application अपना cache या generate की गई 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 है और फाइल की टिप्पणियों (comments) में यह स्पष्ट लिखा है। 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 के माध्यम से प्रक्रिया पूरी करें।

आपका इनवॉइस स्पैम फोल्डर में क्यों जाता है

यह वह विफलता है जो आपको आर्थिक नुकसान पहुँचाती है, और एप्लिकेशन खुशी-खुशी इनवॉइस को 'भेज दिया गया' (sent) के रूप में रिपोर्ट करेगा।

VPS के अपने IP एड्रेस से इनवॉइस मेल न भेजें। एक नए VPS IP का कोई सेंडिंग इतिहास नहीं होता है, और बड़े ईमेल प्रदाता होस्टिंग रेंज के किसी अज्ञात पते से आने वाले पहले संदेश को डिफ़ॉल्ट रूप से संदिग्ध मानते हैं। अपने प्रमाणित डोमेन पर एक SMTP (simple mail transfer protocol) रिले के माध्यम से मेल भेजें। इसे शुरू से अंत तक करना अपने आप में एक विस्तृत प्रक्रिया है, और self-hosted ऐप से विश्वसनीय रूप से मेल भेजना रिले, 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 policy

From में अपना पता रखें और क्लाइंट को 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 रिकॉर्ड गायब है या गलत नाम के तहत प्रकाशित किया गया है, इसलिए आपके द्वारा भेजा गया हर संदेश अपना सिग्नेचर चेक पास करने में विफल रहेगा।

इसके बाद, किसी बड़े प्रदाता पर अपने स्वामित्व वाले अकाउंट पर एक वास्तविक इनवॉइस भेजें और रॉ हेडर्स को पढ़ें। Authentication-Results हेडर में dkim=pass और spf=pass ही एकमात्र प्रमाण है जो मायने रखता है। एप्लिकेशन का अपना "sent" फ्लैग केवल यह दर्शाता है कि उसने संदेश को रिले तक पहुँचा दिया है।

Backups: वह डेटाबेस जिसे आप खो नहीं सकते

मीडिया सर्वर खोने का मतलब है फाइलों को दोबारा डाउनलोड करना। इनवॉइसिंग डेटाबेस खोने का मतलब है कि आप यह नहीं दिखा पाएंगे कि आपने क्या बिल किया, आपको क्या भुगतान मिला, या आप पर अभी भी क्या बकाया है। इसे उसी गंभीरता से लें।

चार चीजों का बैकअप लें। डेटाबेस। स्टोरेज वॉल्यूम, जिसमें लोगो, जेनरेट की गई PDF और खर्च की रसीदें होती हैं। एप्लिकेशन की environment file। और साधारण फाइलों के रूप में रखी गई रेंडर की गई PDF, क्योंकि एक PDF बिना उस एप्लिकेशन के भी दस साल बाद खुल जाएगी जिसने उसे बनाया था।

Environment file लोगों की अपेक्षा से कहीं अधिक महत्वपूर्ण है। Laravel संवेदनशील स्टोर्ड वैल्यूज को, जिसमें payment gateway credentials भी शामिल हैं, उस फाइल में मौजूद APP_KEY का उपयोग करके एन्क्रिप्ट करता है। डेटाबेस को एक नई जेनरेट की गई key के साथ रिस्टोर करें और वे वैल्यूज डिक्रिप्ट नहीं होंगी। आपके इनवॉइस मौजूद रहेंगे लेकिन आपके gateway सेटिंग्स पढ़ने योग्य नहीं होंगे।

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 को टर्मिनल एलोकेट करने से रोकता है, जो अन्यथा रीडायरेक्ट किए गए आउटपुट को करप्ट कर देगा और आपको एक ऐसी डंप फाइल देगा जो इम्पोर्ट नहीं होगी।

इसे encrypted restic backups to off-site storage के साथ एक शेड्यूल पर सर्वर से बाहर भेजें, और रिटेंशन को इतना लंबा रखें कि वह उस अवधि को कवर करे जो आपके अकाउंटेंट ने बताई है।

फिर इसे रिस्टोर करें। डंप को एक थ्रोअवे कंटेनर में लाएं, लॉग इन करें, और पिछले महीने का इनवॉइस खोलें। जब तक आप ऐसा एक बार नहीं कर लेते, तब तक आप नहीं जानते कि बैकअप काम करता है या नहीं।

आपका अकाउंटेंट आपसे क्या मांगेगा

किसी ट्यूटोरियल से टैक्स संबंधी सलाह न लें। नीचे दी गई जानकारी यह बताती है कि यह सॉफ्टवेयर क्या आउटपुट दे सकता है, ताकि आप इस सूची को अपने सलाहकार को दिखा सकें।

Exportable data. आपको अपने इनवॉइस और भुगतान को इंटरफेस से सीधे CSV में एक्सपोर्ट करने में सक्षम होना चाहिए। इसके लिए किसी डेटाबेस क्लाइंट या सपोर्ट टिकट की आवश्यकता नहीं होनी चाहिए। SQL डंप एक बैकअप है, एक्सपोर्ट नहीं, क्योंकि आपका अकाउंटेंट उसे खोल नहीं पाएगा।

Immutable numbering. इनवॉइस नंबर एक क्रम में होने चाहिए और उन्हें कभी भी दोबारा इस्तेमाल नहीं किया जाना चाहिए, साथ ही बीच में कोई खाली जगह (gap) नहीं होनी चाहिए। इनवॉइस डिलीट करने से एक गैप बन जाता है जिसे बाद में स्पष्ट करना पड़ता है। इसके बजाय इनवॉइस को Cancel या Credit करें, जो यहाँ बताए गए सभी एप्लिकेशन में समर्थित है। क्या आपके लिए गैप-रहित नंबरिंग अनिवार्य है, यह इस पर निर्भर करता है कि आप कहाँ रजिस्टर्ड हैं, इसलिए इस बारे में जल्दी पूछ लेना बेहतर है।

Retention. डेटाबेस डंप और रेंडर की गई PDF फाइलों को उतने समय तक सुरक्षित रखें जितने समय तक आपके नियम अनिवार्य करते हैं। PDF ही वह वास्तविक दस्तावेज है जिसे भेजा गया था, और यदि कभी इनवॉइस पर विवाद होता है, तो यही वह साक्ष्य है जो मायने रखता है।

A change history. यह देख पाना कि किस यूजर ने इनवॉइस को कब एडिट किया, काफी उपयोगी होता है। यह सुविधा इन एप्लिकेशनों के बीच सबसे अधिक भिन्न होती है। Invoice Ninja प्रत्येक रिकॉर्ड के लिए एक activity log रखता है।

EU के कुछ हिस्सों में स्ट्रक्चर्ड ई-इनवॉइसिंग अब एक अतिरिक्त सुविधा के बजाय एक वास्तविक आवश्यकता बन गई है। Invoice Ninja सामान्य फॉर्मेट जेनरेट करता है, जिसमें ZUGFeRD, XRechnung, Facturae, FatturaPA और सामान्य EN16931 शामिल हैं। सेल्फ-होस्टेड इंस्टेंस से Peppol नेटवर्क के माध्यम से डिलीवरी Invoice Ninja के अपने एक्सेस पॉइंट से होती है: आप अपनी इकाई को उनके साथ रजिस्टर करते हैं और प्रति सबमिशन क्रेडिट खरीदते हैं, इसलिए अगस्त 2026 तक यह एक सशुल्क (paid) सेवा है। Kimai अपने पेड प्लगइन के माध्यम से इन्हीं फॉर्मेट्स तक पहुँचता है। अन्य तीन एप्लिकेशन आज के समय में कोई भी स्ट्रक्चर्ड ई-इनवॉइस जेनरेट नहीं करते हैं, जो कि यदि आप EU के भीतर इनवॉइसिंग करते हैं, तो Invoice Ninja को चुनने का सबसे मजबूत कारण है।

FAQ

क्या मुझे Crater इंस्टॉल करना चाहिए या InvoiceShelf?

InvoiceShelf का उपयोग करें। 21 अगस्त 2026 तक Crater की डिफ़ॉल्ट ब्रांच में 741 दिनों से कोई कमिट नहीं हुआ है, और इसका अपना इश्यू ट्रैकर लोगों को इसके फोर्क (fork) पर जाने का सुझाव देता है। InvoiceShelf में वही AGPL-3.0 लाइसेंस और डेटा मॉडल है, इसलिए इनके बीच स्विच करना केवल एक डेटाबेस माइग्रेशन है, न कि पूरी तरह से फिर से लिखना। जो भी गाइड अभी भी Crater की सिफारिश करती है, वह प्रोजेक्ट के निष्क्रिय होने से पहले लिखी गई थी।

क्या मैं अपने व्यवसाय के लिए बिना भुगतान किए Invoice Ninja का उपयोग कर सकता हूँ?

हाँ। सेल्फ-होस्टेड Invoice Ninja, Elastic License 2.0 के तहत बिना किसी शुल्क के पूरी तरह कार्यात्मक है, जिसमें आवर्ती इनवॉइस (recurring invoices), क्लाइंट पोर्टल और पेमेंट गेटवे शामिल हैं। केवल दो चीजों के लिए शुल्क लगता है। क्लाइंट-फेसिंग पेजों से Invoice Ninja की ब्रांडिंग हटाने के लिए व्हाइट-लेबल लाइसेंस की आवश्यकता होती है, जिसकी कीमत अगस्त 2026 तक प्रोजेक्ट के अनुसार "$40 प्रति वर्ष" है। Peppol नेटवर्क के माध्यम से ई-इनवॉइस भेजने का शुल्क अलग से लिया जाता है। लाइसेंस केवल इस बात की मनाही करता है कि आप इस सॉफ़्टवेयर को अन्य लोगों के लिए होस्टेड सेवा के रूप में नहीं चला सकते।

मेरे इनवॉइस ईमेल स्पैम फ़ोल्डर में क्यों जाते हैं?

इसका कारण लगभग हमेशा यह होता है कि संदेश उसके 'From' पते वाले डोमेन के लिए प्रमाणित (authenticate) नहीं है। VPS से सीधे भेजने के बजाय SMTP रिले के माध्यम से भेजें, फिर अपने डोमेन के लिए SPF और DMARC रिकॉर्ड प्रकाशित करें और अपने रिले द्वारा दिए गए सेलेक्टर के तहत DKIM रिकॉर्ड जोड़ें। 'From' में अपना पता रखें और क्लाइंट को 'Reply-To' में डालें। क्लाइंट के पते को सेंडर के रूप में सेट करने पर 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। यह मुख्य रूप से एक टाइम ट्रैकर है, इसलिए इनवॉइस स्वीकृत टाइम्सशीट प्रविष्टियों से उत्पन्न होता है और लाइन आइटम वह काम होता है जिसे आपने लॉग किया है। इसके टेम्प्लेट DOCX, ODS या XLSX फाइलें होती हैं जिन्हें आप वर्ड प्रोसेसर में डिज़ाइन करते हैं, जो CSS को एडिट करने से आसान है। इसकी कमी यह है कि Kimai में कोई क्लाइंट पोर्टल और पेमेंट गेटवे नहीं है, इसलिए आप PDF ईमेल करते हैं और ट्रांसफर के माध्यम से भुगतान प्राप्त करते हैं। Invoice Ninja भी समय ट्रैक करता है और इसमें पोर्टल भी है, इसलिए यदि आपके लिए टाइम्सशीट विवरण से अधिक ऑनलाइन कार्ड भुगतान महत्वपूर्ण है, तो उसे चुनें।

मुझे वास्तव में किसका बैकअप लेने की आवश्यकता है?

डेटाबेस, लोगो और उत्पन्न PDF रखने वाला स्टोरेज वॉल्यूम, एनवायरनमेंट फाइल, और सादी फाइलों के रूप में रखी गई रेंडर की गई PDF। एनवायरनमेंट फाइल वह है जिसे लोग अक्सर भूल जाते हैं: Invoice Ninja और InvoiceShelf जैसे Laravel एप्लिकेशन संग्रहीत क्रेडेंशियल्स को APP_KEY के साथ एन्क्रिप्ट करते हैं, इसलिए यदि आप डेटाबेस को नई जनरेट की गई की (key) के साथ रिस्टोर करते हैं, तो आपकी पेमेंट गेटवे सेटिंग्स अपठनीय हो जाएंगी। एक बार पूरी चीज़ को एक अस्थायी इंस्टेंस में रिस्टोर करें और एक पुराना इनवॉइस खोलकर देखें, क्योंकि यही एकमात्र तरीका है जिससे आप जान सकते हैं कि बैकअप काम कर रहा है।

#invoicing#सेल्फ़-होस्टिंग#small-business#Docker#accounting