To self-host Invoice Ninja, provision a supported Linux VPS, install either the PHP/web-server stack or the official container setup, point a domain to the server, configure the application and HTTPS, then keep Laravel scheduling, queue workers, backups and upgrades under your control. The smallest configuration listed by Invoice Ninja is 1 GB RAM, one vCPU, 20 GB storage, Ubuntu 20.04 or newer (or CentOS 8 or newer), but production capacity depends on invoice volume, PDF generation and integrations.
Need a server to try this on? Antihost offers Linux VPS plans with NVMe storage, full root access and a 14-day free trial.
What self-hosting Invoice Ninja on a VPS involves
A VPS gives you a virtual Linux server with root or administrative access. You operate the operating system, firewall, web server, PHP runtime, database, Invoice Ninja application, mail delivery settings, certificates, backups and updates. Invoice Ninja’s documentation describes the platform as adaptable to different hosting arrangements; a VPS is the middle ground between a fully managed service and running a physical server yourself.
As an Amazon Associate I earn from qualifying purchases.
Free tools Windows power users keep installed
One-click scans. No signup required.
A working installation has several parts:
- A supported Linux distribution and enough CPU, memory and disk space.
- PHP, required extensions, Composer, Node.js/NPM and either MySQL or MariaDB for a manual installation.
- nginx or Apache serving the application’s
publicdirectory rather than the project directory itself. - A DNS name and HTTPS certificate.
- Invoice Ninja’s environment settings, including the final URL, encryption key, database credentials and mail transport.
- A Laravel scheduler that runs every minute and persistent queue workers for notifications and other asynchronous jobs.
- Backups that include the database, application files, secrets and any persistent container volumes, plus a restore test.
Self-hosting terms published by Invoice Ninja (version 1.0.2, February 1, 2026) state that the platform is provided “as is” and “with all faults,” and that the user runs it at their own risk. Treat updates, credentials and recovery procedures as operational responsibilities, not one-time installation tasks.
VPS requirements and sizing
The official getting-started guidance lists the following minimum baseline for Invoice Ninja in 2026. These are published minimums, not a performance guarantee or a capacity benchmark.
#1 Best Overall
- Auto Cutter and High-Speed Printing: The thermal receipt printer features high efficiency with auto cutter and the fastest printing speed of 300mm/sec. Easy for paper installation, easy maintenance, and excellent structure. Plug and play USB PORT, easy to use. Three Interface ports: USB+ LAN + SERIAL PORT. Does NOT support Wifi or Bluetooth. Compatible with WIN2003/WINXP/WIN7/WIN8/WIN10/LINUX/Mac
- Wall Hanging Design: Kitchen printer with two hanging holes on the bottom support wall mount hanging. Easy to use, save the place. With auto cutter and compatible with several operating systems. Print width: 79.50.5mm; Paper Width: 3 1/8 inch (80mm)
- Wide Compatibility and Reasonable Design: Desktop or wall-mounted type for option, lets you use every space more rationally. The humanized auto-cutter ensures the receipt will not fall to the ground after printing. One-button open cover and large paper warehouse design, easy to use and maintain. Works with MUNBYN 3 1/8 x 203ft thermal paper and Gorilla 3 1/8 x 230 Thermal Paper Receipt Rolls
- Cost-Effective Operation: Supports cash drawer driving, compatible with ESC/POS print commands. The network receipt printer does not need ribbon or ink cartridge, resulting in low operating cost. The printer has the function of overheating protection for long service life. Printing characters with high speed and reliable performance for receipt printing in large shopping malls, supermarkets, retail, hotels, canteens, and restaurants
- Compatibility Notice: The receipt printer is not compatible with Grubhub, Doordash, Square, Chromebook, Uber, or Clover systems. Rongta is a brand dedicated to offering high quality products and good shopping experience for customers
| Resource or dependency | Documented requirement | What it means in practice |
|---|---|---|
| Memory | 1 GB RAM minimum | Suitable only as a starting point; leave headroom for the operating system, database, PHP workers, PDF generation and queues. |
| CPU | 1 vCPU core minimum | Enough to begin a small deployment, but concurrent web requests and background jobs may need more capacity. |
| Storage | 20 GB minimum | Count the operating system, database, uploaded files, generated documents, logs, backups and container layers. |
| Operating system | Ubuntu 20.04 or newer, or CentOS 8 or newer | Use a currently supported release offered by your VPS provider and keep its security updates enabled. |
| PHP | PHP 8.1+ in the getting-started requirements; the newer self-host page specifies PHP 8.2 | Follow the version required by the Invoice Ninja release you deploy, rather than assuming the distribution default is acceptable. |
| Database | MySQL 5.7+ or MariaDB 10.3+ | Use a dedicated database and record its credentials in a password manager. |
| Web server | nginx or Apache | Configure the virtual host to serve the application’s public directory. |
| PHP extensions | bcmath, gmp, gd, mbstring, XML, curl, zip, MySQL, FPM, imagick, soap, intl and Saxon are listed for the newer self-host setup | Check the release documentation and confirm every extension is loaded by the PHP-FPM process, not just the command-line PHP binary. |
| Build tools | Composer and Node.js/NPM | Needed for the manual application stack and its dependency or asset workflow. |
| TLS | SSL required | Use HTTPS before entering production data or enabling webhooks and integrations. |
No independent capacity study or throughput figure is published in the cited official materials. Choose more than the minimum when you expect several users, frequent recurring invoices, large attachments, intensive PDF generation or multiple integrations, and monitor memory, CPU, disk and queue latency after launch.
Choose a deployment path
| Path | Best fit | Advantages | Responsibilities and trade-offs |
|---|---|---|---|
| Manual nginx or Apache | Operators who want direct control over Linux packages and the web server | Transparent filesystem layout, native service management and freedom to tune PHP, nginx/Apache and the database | You must maintain package versions, permissions, PHP extensions, virtual-host rules, workers, certificates and upgrades. |
| Docker or Podman | Reproducible deployments, pilots and teams already operating containers | Application and dependency versions are packaged together; moving or recreating a host is more predictable | You still own environment secrets, persistent volumes, image updates, reverse-proxy/TLS integration, backups and container health. |
| Cloudron, Elestio, Softaculous or YunoHost | Administrators who prefer a marketplace, panel or managed workflow | Some installation, certificate, monitoring or update tasks are presented through a higher-level interface | Portability, available settings, backup behavior and administrative responsibility depend on the platform; verify how it exposes the database, files and restore process. |
Do not mix the procedures. A manual installation uses the host’s PHP and database services; a container deployment uses the image and its declared volumes. Decide where the database, uploaded files and generated documents live before importing any data.
Recommended Free Tools
Prepare the VPS before installing
- Create the server. Select a supported Linux image, attach reliable provider snapshots or backups, and create a non-root administrative account with SSH-key authentication where possible.
- Set the hostname and DNS. Choose the final public name, such as
billing.example.com, and create an A/AAAA record pointing to the VPS. Wait for DNS to resolve before requesting a certificate. - Restrict the firewall. Allow SSH from trusted addresses when practical, and allow HTTP and HTTPS only when the web server needs them. Do not expose the database port publicly unless a documented remote-access design requires it.
- Patch the operating system. Apply current security updates, reboot if the kernel or services require it, and confirm the clock is correct. Scheduled invoices and certificate validation depend on reliable time.
- Reserve storage for recovery. Keep backups off the VPS as well as on it. A snapshot on the same provider is useful for quick rollback but is not a complete disaster-recovery plan.
Manual installation with nginx or Apache
Use this route when you want the VPS itself to own the web server and PHP configuration. Exact package names vary by distribution, so use the release’s installation instructions for PHP 8.2 and the listed extensions rather than copying an old PHP tutorial.
1. Install the software stack
Install PHP-FPM, the required PHP extensions, Composer, Node.js/NPM, nginx or Apache, and MySQL 5.7+ or MariaDB 10.3+. Confirm the command-line PHP version and the PHP-FPM version match the supported Invoice Ninja release. Enable the database and web-server services to start at boot.
2. Create the database and account
Create a dedicated database, a dedicated database user and a long random password. Grant that user access only to the Invoice Ninja database. Record the database name, username, host and password for the application environment file; do not put them in a public ticket or shell history.
3. Download and place the release
Download the official Invoice Ninja release tarball, unpack it in the virtual-host document root and set ownership so the web-server/PHP-FPM account can read the application and write only where the application requires it. Keep the release directory separate from unrelated websites and never unpack it into a shared public directory.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problems4. Point the virtual host at public
The web-server document root must be the Invoice Ninja project’s public directory. This prevents private configuration and application files from being served directly. Configure the host to pass PHP requests to PHP-FPM, allow the rewrite rules required by the framework, and reject access to hidden files and environment files.
Rank #2
- 【Fast Printing & Auto Cutter】The pos printer high efficiency with auto cutter and printing speed--250mm/sec. Easy for paper installation, easy maintenance, easy to use.Three Interface ports:USB+ LAN + SERIAL PORT.DO NOT-Wifi-Bluetooth.
- 【Wall Hanging Design】 Kitchen printer with two hanging holes on the bottom support wall mount hanging. Easy to use, save the place. With auto cutter and compatible with several operating systems. Print width:79.5±0.5mm; Paper Width:3 1/8" (80mm).
- 【Wide Compatibility&Reasonable Design】Desktop or wall-mounted type for option, lets you use every space more rationally. The humanized auto-cutter, the receipt will not fall to the ground after printing. One-button open cover and large paper warehouse design, easy to use & maintain. Work with MUNBYN 3 1/8 x 203ft thermal paper,MFLABEL thermal receipt paper.
- 【Most Cost-effective】Support cash drawer driving, compatible ESC/POS print commands.Do not need ribbon/ink cartridge, low operating cost. The printer has the function of overheating protection, long service life. Printing characters with high speed, reliable performance.It is an ideal choice for receipt printing in large shopping malls, supermarkets, retail, hotels, canteens, restaurants, etc.
- 【Buy with Confidence】 Rongta is a brand that is dedicated to offering the highest quality products and good shopping experience for the customer. Warm tips:The receipt printer is not compatible with Ubereats/Grubhub/Doordash/Lightspeed/Postmates/Square/Chromebook/Clover.
The official guide does not support installing the application under a subdirectory URL such as https://example.com/ninja. Use a dedicated hostname or the site root instead.
5. Complete the browser setup
Visit the HTTPS hostname and open /setup. Enter the database details, administrator account and mail settings requested by the installer. If the page reports a missing extension or unwritable directory, correct the server package or ownership problem and reload the setup page; do not make the entire filesystem world-writable.
6. Enable HTTPS
Install a certificate for the final hostname, redirect HTTP to HTTPS, and set the application URL to the HTTPS address. Test both the redirect and a normal login in a private browser window. If a reverse proxy terminates TLS, pass the original scheme correctly so Laravel does not generate HTTP links or mixed-content PDF and email URLs.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Container deployment with Docker or Podman
Containers reduce differences between hosts, but they do not remove operational work. Use the official Invoice Ninja Dockerfiles or Compose repository and pin a deliberate image version instead of silently tracking an unreviewed latest tag.
- Install Docker Engine and Compose, or the equivalent Podman and Compose-compatible tooling, on the supported Linux VPS.
- Retrieve the official container definitions into a dedicated deployment directory.
- Copy the supplied environment template to the deployment’s
.envfile and set the finalAPP_URL, database credentials, mail settings and other required values. - Generate an
APP_KEYusing the documented application workflow and store it securely. Losing this key can make encrypted data or sessions unrecoverable. - Map persistent volumes for the database and Invoice Ninja storage. A container recreation without those volumes can remove the data you intended to keep.
- Put a TLS-capable reverse proxy in front of the application, or use the documented container web-server arrangement, and ensure the public hostname resolves to it.
- Start the stack, inspect container logs, complete
/setupif the image requires browser initialization, and restart containers after changing environment values.
Back up both the database volume and the application’s persistent storage. Treat the Compose file, image tag and environment file as a versioned deployment record, while keeping secrets in a protected password or secret-management system.
Configure the environment safely
The environment reference identifies settings that control URL generation, runtime mode, queues, integrations and retention. Review every variable supplied by your chosen release instead of copying values from an unrelated version.
APP_URL: Set it to the final HTTPS URL, with no temporary IP address. Incorrect values produce broken links in emails, PDFs and callbacks.APP_KEY: Generate it once for the installation and protect it like a master secret. Do not regenerate it casually on an existing database.NINJA_ENVIRONMENT=selfhost: Use the self-host environment value where the release documentation requires it.IS_DOCKER=TRUE: Set the container-specific flag only for a container deployment.- Database variables: Match the database host, port, name, user and password to the service actually reachable from the application. In Compose, the database host is commonly the service name rather than
localhost. - Mail variables: Configure an authenticated SMTP or other supported delivery service, sender identity and encryption. Sending tests should reach a real mailbox before you enable reminders.
- Queue variables: Choose
QUEUE_CONNECTION=databaseor another backend supported by your release, then run the corresponding worker continuously. - Webcron and integration secrets: Keep signing keys and webhook credentials private, rotate them through a planned change procedure, and avoid placing them in client-side code.
- Backup-retention controls: Set retention intentionally, but remember that an in-application retention setting does not replace an off-server backup and restore test.
After changing environment values, run php artisan optimize where the installation method permits it, then restart queue workers and the relevant PHP or application containers so they load the new configuration.
Rank #3
- High-speed printing of 43 receipts per minute (250mm/s) with easy to setup USB connection - just Plug and Print; USB serial number feature means the PC will detect the TSP143IIIU on its Windows platform using any USB port
- Compatible with iOS, Android, and Windows for a simple setup process
- The "Drop-In and Print" clamshell design allows for fast and easy paper loading; patented "De-Curl" function always delivers a flat receipt
- The TSP143IIIU USB model is certified with the following companies: Postmates, Square, Chromebook, and Clover
- The small footprint and embedded power supply saves precious counter space
Make scheduling and queues reliable
Laravel scheduler
Invoice Ninja relies on recurring scheduled work for items such as recurring invoices and reminders. Add a cron entry on a manual host that runs every minute:
* * * * * cd /var/www/invoiceninja && php artisan schedule:run >> /dev/null 2>&1
Replace /var/www/invoiceninja with the actual project path. The cron user must be able to read the application and write the required cache and storage directories. For a container deployment, run the scheduler using the mechanism supplied by the official Compose setup rather than pointing the host at a nonexistent host-side project path.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Repair Windows errors before they cause bigger problemsFix Now →Queue workers
Use Supervisor or another supported process manager to keep production queue workers alive, restart them after failures and start them at boot. Confirm the worker uses the same release directory, PHP binary, environment and queue connection as the web application. After configuration or code changes, restart workers so they do not continue with stale settings.
If Supervisor is unavailable, the official guidance gives a five-minute fallback using php artisan queue:work --stop-when-empty. This can introduce notification delay because a worker is not continuously present; it is a fallback, not an equivalent to a persistent production worker.
Verify the installation before inviting users
- Open the final HTTPS URL and confirm that the certificate, redirect and login work without browser warnings.
- Confirm
/setuphas completed and that the installer is not exposed as an unfinished setup page. - Create a test client and invoice, render a PDF, download it and check that logos, tax values, fonts and totals appear correctly.
- Send a test email and verify delivery, links and attachments. Check the mail provider’s event log if the message is delayed or rejected.
- Create a recurring invoice or reminder test and wait for the scheduler to process it; do not assume a successful login proves cron is working.
- Place a test job on the queue and confirm the worker consumes it. Inspect application, PHP-FPM, web-server and container logs when it does not.
- Check disk usage, memory pressure, CPU load and worker restarts. The published 1 GB/1 vCPU/20 GB figures are minimums, not evidence that every workload will fit.
- Run a backup and restore it into a disposable database or staging instance. A backup that has never been restored is an unverified assumption.
Backups and recovery design
A useful recovery set contains more than a database dump. Back up the Invoice Ninja database, uploaded and generated application files, the complete environment file or an encrypted record of its values, the APP_KEY, deployment definitions and persistent Docker volumes when containers are used. Protect backup copies with access controls and encryption appropriate to the financial information they contain.
Before an update
- Read the release notes and record the current Invoice Ninja version, image tag or release directory.
- Run a fresh database backup and copy application files and volumes to storage outside the VPS.
- Confirm that the latest backup can be read and that you know the restore commands or procedure.
- Schedule the maintenance window, pause nonessential changes and ensure you can access the VPS console if SSH becomes unavailable.
When restoring
Restore into a clean, compatible environment, put the application in maintenance mode or prevent public access while data is being loaded, restore the database and files together, reapply the matching environment values, then run the same PDF, login, email, scheduler and queue checks used for acceptance. Do not restore only the database when the installation also depends on uploaded files or encrypted secrets.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Rank #4
- Compatibility Information: Please ensure that our receipt printer is compatible with your device.The Ethernet interface supports Windows, Mac OS, Linux, VirtualCom, Android, RaspberryPi and iOS. But the USB interface could only support Windows, Mac OS, Linux, VirtualCom and Android. Additionally, it does not support Ubereats, Grubhub, Doordash, Postmates, Clover, or Shopify for POS software.
- Fast Printing & Auto Cutter: This high-efficiency thermal receipt printer boasts a maximum printing speed of 260mm/s, ensuring quick and efficient printing without any paper jams. The automatic cutter is designed to handle heavy usage and can last up to 1.5 million cuts. With a one-button open cover and a spacious paper warehouse, this POS printer is easy to use and maintain. Additionally, the receipt printers utilizes direct thermal printing technology, eliminating the need for ribbons or ink.
- USB & Ethernet Interface: The receipt printer has USB and Ethernet interfaces, as well as cash drawer RJ11 ports. However, it does not support Bluetooth or WiFi printing. With a 203 dpi resolution, the Ethernet receipt printer produces high-quality prints that are sharp and clear. To develop custom applications on Ethernet-supported systems like iOS and Android, a software development kit (SDK) is necessary.
- Wall Mount Option: The kitchen printer has a wall mount option with two hanging holes at the bottom, allowing it to easily fit into any space. This USB receipt printer is an excellent choice for various establishments such as restaurants, kitchens, retail stores, grocery stores, clothing stores, supermarkets, cafes, ticket points, food trucks, banks, shopping malls, hotels, canteens, and more.
- Customer Service in the United States: Our team of customer support based in the United States is ready to help you with any problems you may have regarding the integration of the direct thermal printer. Whether you require assistance with setup, connection, compatibility, or any other issues related to the product, please don't hesitate to reach out to us. Additionally, all Volcora products are backed by a limited lifetime warranty, ensuring your peace of mind when making a purchase.
Upgrade without losing the installation
Pin and document the Invoice Ninja version, PHP version, database engine, image tags and operating-system release. Review release notes before changing any of them. Keep off-server backups and test restores before applying production updates.
Invoice Ninja v5 is not an in-place upgrade from v4.x. A v4 installation therefore needs a clean v5 installation and a tested migration plan rather than an overwrite of the old files. Keep the original v4 system available until the migrated v5 data, documents, users, mail and scheduled jobs have been verified.
For routine v5 updates, use the procedure appropriate to your deployment: update the manual release and dependencies in a controlled window, or pull and recreate the pinned container image while retaining persistent volumes. Run migrations exactly as documented for that release, clear or rebuild caches when required, restart PHP and queue workers, and repeat the operational checks.
Troubleshooting by symptom
| Symptom | Likely area | Checks and corrective action |
|---|---|---|
| HTTP 403, 404 or a directory listing | Web-root or permissions | Verify the virtual host points to public, rewrite rules are enabled, the selected PHP-FPM user can read the release, and the hostname reaches the intended virtual host. |
| Setup reports missing PHP features | Extensions or PHP-version mismatch | Compare loaded CLI and FPM modules with the release list, install the missing extension, restart PHP-FPM and reload the setup page. |
| Links or callbacks use HTTP | URL or proxy configuration | Set APP_URL to the final HTTPS address and configure the reverse proxy to pass the original HTTPS scheme. |
| Invoices or reminders never run | Scheduler cron | Check the every-minute cron entry, its working directory, user permissions and cron logs. Run the scheduler manually once and inspect the application log. |
| Emails are delayed | Queue worker or mail transport | Test SMTP credentials, inspect mail-provider responses, confirm the queue connection and ensure Supervisor or the worker process is running. |
| PDF generation fails | PHP extensions, permissions or resource pressure | Check the listed graphics and PDF-related extensions, writable storage, PHP-FPM logs and available memory; reproduce with a small test invoice before increasing workload. |
| Container data disappears after recreation | Missing persistent volume | Inspect the Compose volume mappings, stop the stack safely, restore the documented volume or backup, and do not treat a container filesystem as durable storage. |
| Updates leave workers on old settings | Long-running processes | Run the documented optimization step, restart queue workers and PHP/application containers, then process a test job. |
When a managed or panel route is a better fit
An unmanaged VPS is appropriate when you can patch Linux, secure SSH, troubleshoot PHP and database services, monitor queues and perform restores. Choose a Cloudron or Elestio-style managed deployment when reducing server administration is more important than having unrestricted package control. Softaculous or YunoHost can suit administrators who already operate those panels.
Ask four questions before committing to a higher-level platform: Can you export the database and uploaded files? Are backups automatic and downloadable? Can you select or pin the Invoice Ninja version and inspect logs? What happens if the platform is unavailable or you move to another VPS? The answers determine portability and lock-in more reliably than the installation button itself.
Operational checklist
- Supported OS, PHP version, extensions, database and web server documented.
- DNS, firewall and HTTPS tested on the final hostname.
- Web root limited to
public; secrets and hidden files not web-accessible. APP_URL,APP_KEY, mail, queue and integration settings recorded securely.- Every-minute scheduler active and queue workers supervised.
- PDF, email, recurring invoice and reminder tests completed.
- Database, files, environment secrets and container volumes backed up off-server.
- Restore procedure rehearsed and release versions pinned.
- Upgrade plan accounts for the separate v4-to-v5 migration path.
With those controls in place, a VPS installation is not merely an Invoice Ninja login page: it is a maintainable application service with a known URL, repeatable deployment, working background processing and a tested way back when an update or host failure goes wrong.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




