Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

To self-host Invoice Ninja on a VPS, provision a supported Linux server, install the PHP and database stack, deploy Invoice Ninja manually or with Docker/Podman, point your web server at the application’s public directory, configure HTTPS and the .env settings, then keep the Laravel scheduler, queue workers, and backups running. The documented minimum is 1 GB RAM, one vCPU, 20 GB of storage, and Ubuntu 20.04 or newer or CentOS 8 or newer. Treat that as an installation baseline rather than a capacity guarantee: no independent throughput or sizing benchmark is published in the official materials.

What a VPS installation needs

A VPS gives you control of the operating system, web server, database, PHP runtime, firewall, backups, and upgrade schedule. That control is useful when you need data residency, custom integrations, or predictable administration, but it also makes you responsible for patching and recovery.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Published minimum server specification

Component Documented minimum How to interpret it
Memory 1 GB RAM Minimum for getting started; actual needs rise with users, PDF generation, imports, and queue activity.
CPU 1 vCPU core Installation baseline, not a published performance target.
Storage 20 GB Reserve additional space for database growth, uploaded files, logs, and backups.
Operating system Ubuntu 20.04 or newer, or CentOS 8 or newer Use a currently supported release offered by your VPS provider and keep it patched.

The getting-started documentation lists PHP 8.1 or newer, MySQL 5.7 or newer or MariaDB 10.3 or newer, nginx or Apache, Composer, Node.js/NPM, and SSL. The newer self-hosting page specifies PHP 8.2 and these extensions: bcmath, gmp, gd, mbstring, XML, curl, zip, MySQL, FPM, imagick, soap, intl, and Saxon for electronic-invoice validation. When the two pages differ, target PHP 8.2 and install the complete extension list rather than choosing the older minimum.

Before you create the VPS

  • A domain name whose DNS can point to the server and whose final hostname can receive an HTTPS certificate.
  • SSH access with a non-root administrative account and a way to recover the server through the provider console.
  • Provider snapshots or another independent backup destination. A snapshot alone is not a substitute for a database export and an off-server copy.
  • A maintenance window for installation, mail testing, upgrades, and restore drills.

Choose a deployment method

Invoice Ninja documents several hosting approaches. Your choice determines who owns PHP and web-server configuration, how updates are reproduced, and how you recover from a failed change.

#1 Best Overall
Sale
Compressed Air Duster,130000RPM Super Power Cordless Air Duster,Rechargeable Brushless Blower,3 Gear Adjustable Blower with LED Light,Dust Remover for Computer/House/Outdoor/Car
  • Powerful Turbo Fan:CAGIWIRU Electric Air Duster have reached speed up to 130000RPM,Can efficient remove dust and debris.With LED light and Three Adjustable Speed to meet with different cleaning tasks.
  • With Attached USB C Fasting Charging cable.Charing 3 hours,Enjoy up to 240 minutes of use on the lowest setting, For third speed can use for 25mins.with four charging options to meet with your needs.
  • Wide Application: attached 5 different nozzles,making it suitable for a variety of scenes, such as car,pet, pc, keyboards, and other electronic devices. It also serves for office and home clean duster.
  • Handy Design & Portable:Cordless air duster electric nozzle is Light weight and small size, design and comfortable to hold and space saving, convenient to carry around. You can put it in your room or inside the car without taking up space.
  • Economical &Reusable: Built durable materials with a long-lasting battery,our CAGIWIRU air duster it's a sustainable alternative to disposable air cans.

Manual nginx or Apache installation

Manual deployment is appropriate when you already administer Linux packages, virtual hosts, PHP-FPM, and a database. You download the official release archive, unpack it in the virtual-host directory, assign ownership to the web-server user, create a MySQL or MariaDB database, and finish setup in a browser. The web server must serve the application’s public directory. The official guide does not support placing the application behind a subdirectory URL such as /ninja; use a dedicated hostname or virtual host instead.

Docker or Podman

Containers are useful for repeatable deployments and quick pilots. Use the official Dockerfiles or Compose repository, place the required values in .env, expose only the intended web endpoint, and map persistent volumes for application storage and database data. Environment changes require a container restart. Containerization does not remove operational duties: you still need TLS, volume backups, image updates, log review, and a tested restore.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Managed and control-panel routes

The official installation material also names Cloudron, Elestio, Softaculous, and YunoHost. These routes can reduce package and web-server work, but compare administrative responsibility, monitoring and backup automation, portability, and provider lock-in before committing. Confirm that you can export the database, uploaded files, configuration secrets, and persistent volumes if you later move to an ordinary VPS.

Manual versus containerized deployment

Decision area Manual nginx/Apache Docker/Podman
Runtime control You own the host PHP, FPM, web server, and package versions. Image definitions package much of the runtime; the host still supplies networking, storage, and security.
Repeatability Reproduce package and virtual-host configuration yourself. Compose files and image tags make rebuilds more consistent.
Backups Back up the database, application files, and .env. Back up the database plus every persistent application and database volume and the Compose environment.
Dependency handling You maintain PHP extensions, Composer, Node.js/NPM, FPM, and PDF-related libraries. The image carries application dependencies, but image and volume compatibility still require review.
Operational effort More initial server configuration and direct troubleshooting. Faster initial deployment, with container lifecycle, image updates, and volume management added to the runbook.

Provision and harden the VPS

  1. Select the operating system and size. Start with the documented 1 GB/1 vCPU/20 GB baseline only for a small installation. Allocate headroom if you expect frequent PDF rendering, imports, several queue workers, or substantial file storage.
  2. Point DNS at the server. Create an A or AAAA record for the hostname you will use as APP_URL. Wait for that record to resolve before requesting a certificate.
  3. Create an administrative account. Disable routine root login, use SSH keys where possible, and retain the provider’s recovery-console credentials separately.
  4. Configure the firewall. Permit SSH from trusted networks and allow only HTTP and HTTPS to the public interface. Keep MySQL or MariaDB private; the application should reach it locally or through a restricted private network.
  5. Enable provider snapshots and off-server backups. Schedule both before importing real invoices. Document how to boot a rescue environment and restore the database.
  6. Patch the operating system. Reboot when kernel or service updates require it, and record the PHP, database, web-server, and Invoice Ninja versions you install.

Manual installation with nginx or Apache

1. Install the required runtime

Install PHP 8.2 with PHP-FPM and the documented extensions, a supported MySQL or MariaDB server, nginx or Apache, Composer, and Node.js/NPM. Distribution package names vary, so verify that the loaded PHP-FPM version and command-line PHP version are both 8.2 and that every required extension is enabled for both. Check the PHP module list before continuing; missing imagick, gd, mbstring, intl, or XML commonly appears later as PDF, validation, or setup errors.

Rank #2
EVEO® Screen Cleaner Spray Kit (Streak-Free) TV Screen Cleaner for Smart TV, Lcd, LEd, Oled | Computer Screen Cleaner Spray and Wipe Microfiber Cloth - TV, Monitor, Laptop, iPad, Car - 6.7oz 1 Pack
  • Screen Cleaner is Your Screen’s New Bestfriend! - EVEO is proud to present a screen cleaner that’s perfectly suited for your TV. Meet your new screen cleaner, computer screen cleaner, laptop cleaner, iPad cleaner, Macbook,tv cleaner or any other electronic device. Our screen cleaner spray and wipe along with the included plush microfiber cloth, easily removes dust, fingerprints & other smudges on the screen’s surface. Clean effectively for a streak-free screen
  • Gentle on your Screens - Our screen cleaner spray and wipes is compatible to be used even for the most sensitive LCD, LED, CRT, and OLED screens in proper use. Be at ease knowing that this product is compatible with all the major brands: LG, SONY, Samsung, Sharp, iPad, iPhone, Android screens, Kindle, PC monitors - we’ve got you covered! Can be used as LCD screen cleaner, tv cleaner, smart tv screen cleaner, and more
  • Premium Super Soft Plush Microfiber Cloth - Included in this efficient screen cleaning kit. This screen cleaner spray and wipe has our signature plush microfiber cloth specially designed to comply with screens and monitors and leave them streak-free. Has been shown to effectively absorbs stubborn stains, zero streaks, and no fiber shedding. Always use this together with our screen cleaner for the best results
  • Easy-to-Use Screen Cleaner Kit + microfiber cleaning cloth - The EVEO Screen Cleaning Kit will easily be your new favorite tool when it comes to taking care of the things you love most, quick and easy solution for a streak-free screen. Simply screw on the sprayer gun on the screen cleaner bottle. Spray the cleaning liquid onto the microfiber cloth, then wipe the screen until desired cleanliness & shine is achieved.
  • Quality Screen Care Kit Worth Purchasing - Enjoy a convenient Screen Cleaner anytime, anywhere you need it. Your satisfaction is our top priority. We stand behind the quality of our products and that’s why, you shouldn’t be worrying at all. We manufacture the Best Screen Cleaner. and can be used for laptop cleaning kit, laptop screen cleaner, tv screen cleaner for smart tv. MacBook screen cleaner, monitor cleaner or screen cleaner spray for electronic devices with microfiber cleaning cloth

2. Place the release in the virtual-host directory

Download the official Invoice Ninja release archive, unpack it under a directory such as /var/www/invoiceninja, and set ownership to the account used by your web server and PHP-FPM. Keep the directory outside unrelated sites so permissions and logs are easy to audit. Do not expose the project’s parent directory as the web root: the public root must be /var/www/invoiceninja/public.

3. Create a dedicated database

Create a database and a least-privilege database user with a strong, unique password. Record the database name, username, host, port, and password in your password manager. Do not reuse the VPS administrator password or place credentials in shell history.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

4. Configure the virtual host

Define the hostname, point the document root at the public directory, pass PHP requests to the matching PHP-FPM socket, and enable URL rewriting as required by your chosen web server. Test the configuration, reload the web server, and confirm that the hostname reaches Invoice Ninja rather than a default server page. A URL such as https://billing.example.com/ninja is not the supported arrangement; use https://billing.example.com as the application URL.

5. Complete browser setup

Open the hostname and complete /setup. Set APP_URL to the final HTTPS address, provide the database settings, generate an APP_KEY, and store that key securely. Configure outgoing mail before inviting users or relying on reminders. Protect any webcron, webhook, or integration secrets as carefully as database credentials.

Rank #3
Sale
BladeHawks RGB Gaming Mouse Pad Extra Large Extended 31.5x12 Inch-Black | LED mouse pad with 14 lighting modes, covers keyboard & mouse, anti-slip rubber base, waterproof surface, USB powered
  • 【Large size】:Measuring 800 x 300 mm/ 31. 5×12 inches, which is wider and taller than others. Large mouse pad can perfectly fit your keyboard and mouse of any size, and there is also ample space for peripherals such as phones, tablets, etc.
  • 【LED backlight mouse pad】:Blade Hawks RGB mouse pad provides 7 static modes and 7 dynamic modes will give you the options you are looking for. Power-off memory function remembers the last lighting mode you selected. The super glow fiber Chroma will give you a colorful gaming setup that you want.
  • 【Anti-slip rubber base】:Made from Natural rubber, this gaming mousepad will firmly grip your desktop, allowing you to enjoy the ultimate precision in the games you are most passionate about. It also comes with a texture that enhances this ability even further.
  • 【Smooth and waterproof surface】: Micro-textured cloth surface, for extremely precise mouse control and a smooth movement. When liquid splashes on the gaming mouse pad, it forms water droplets and slides down. Will not delay your work or gameplay.
  • 【Plug and play】: This mouse and keyboard pad is powered by USB, plug and play, no driver required. One button control light modes. Press one time to change the lighting mode, press twice to change the brightness, press and hold about 3 seconds turn ON/OFF.

6. Enable HTTPS before production use

Install a certificate for the exact hostname, redirect HTTP to HTTPS, and verify that generated invoice links, callbacks, and mail URLs use HTTPS. Renew the certificate automatically and test renewal before the first production expiry.

7. Optimize after configuration

Run php artisan optimize from the application directory after environment changes. Confirm that the command uses the same PHP binary and permissions as the web application. Restart PHP-FPM if your distribution requires it to load changed extensions or configuration.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Deploying with Docker or Podman

  1. Obtain the official Invoice Ninja Dockerfiles or Compose definition and pin an explicit image tag rather than silently tracking an unreviewed latest build.
  2. Copy the environment example into a protected .env file. Set APP_URL to the final HTTPS hostname, create and save APP_KEY, enter database and mail credentials, and set NINJA_ENVIRONMENT=selfhost. Container deployments should set IS_DOCKER=TRUE when required by the supplied configuration.
  3. Define persistent storage for uploaded files, generated documents, and database data. A container recreation must not erase these volumes.
  4. Start the stack with your container tool’s Compose command, then inspect application, web, and database logs. Restart containers after changing environment values.
  5. Put TLS termination in front of the application as designed by your stack, and confirm that the internal service receives the correct HTTPS URL and proxy headers.
  6. Back up the database, all persistent volumes, and the protected Compose environment before changing image tags.

Do not treat a successful container start as a completed deployment. Open /setup, create a test invoice, render its PDF, send a test message, and run the scheduler and worker checks described below.

Configure environment, scheduler, and queues

Essential environment values

  • APP_URL: the canonical HTTPS URL users and integrations should use.
  • APP_KEY: generate it during setup and preserve it in your secret store; losing it can make encrypted data unrecoverable.
  • Database connection values: host, port, database, username, and password.
  • Mail transport values: configure a deliverable SMTP or supported mail service and verify both sender identity and receiving addresses.
  • NINJA_ENVIRONMENT=selfhost: identifies a self-hosted installation.
  • IS_DOCKER=TRUE: use where the container configuration calls for Docker-specific behavior.
  • Queue and backup-retention settings: choose values that match your worker arrangement and available backup storage.

Run Laravel’s scheduler every minute

Recurring invoices, reminders, and other scheduled actions depend on the Laravel scheduler. Add a cron entry for the application user or the account that has the required permissions:

Rank #4
Sale
Vaydeer Wrist Rest for Keyboard and Mouse, Computer Ergonomic Wrist Support Pad, Soft Memory Foam Arm Cushion for Desk, Palm Hand Office Laptop Typing
  • 【Softer and More Comfortable】Vaydeer wrist rest has unique diamond pattern, which is the combination of softness and aesthetics. The materials of wrist rest are improved into higher quality memory foam and covered with silky smooth lycra. The computer wrist rest makes you as comfortable and cushiony as like rest your wrists on clouds.
  • 【Ergonomic Wrist Saver】The wrist rests for keyboard and mouse comes with a 17.32×3.15×0.83 inch keyboard wrist pad and a 5.94×3.15×0.83 inch mouse wrist support. Based on ergonomic design, the unique concave shape is the perfect fit for your wrist joints. The wrist rest pad fits most computer keyboards and laptops, improve hand and wrist posture, release your wrist and arm stress.
  • 【Non-Slip Rubber Bottom】Featuring an anti-skid silicone base on the bottom, this wrist keyboard support stays firmly in place on your desk, preventing the padding from sliding around, ensuring stable and consistent wrist support during extended computer sessions.
  • 【Better Experience & Pain Relief】Our keyboard arm rest is beneficial to alleviate the soreness caused by direct contact and friction between your arm and a hard desk surface, reducing the risk of wrist fatigue or carpal tunnel. The soft texture of memory foam can evenly distribute the pressure around your wrists and provide good support with just enough give.
  • 【Helpful in Multiple Scenarios】Whether you're working, studying, writing, typing, gaming, this keyboard and mouse rest combo is an essential accessory to add comfort and support to your hands and wrists. It’s also a great gift for men, women, family, friend, coworker, gamer, teacher, etc.
* * * * * cd /var/www/invoiceninja && php artisan schedule:run >> /dev/null 2>&1

Adjust the path if you installed elsewhere. Confirm that cron is enabled, the working directory is correct, and the command-line PHP version has the same extensions as PHP-FPM. A scheduler entry that runs in the wrong directory can fail without producing visible browser errors.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Keep queue workers alive

For production, use Supervisor or another supported process manager so workers restart after a crash or reboot. Set QUEUE_CONNECTION=database or another supported backend, run php artisan optimize after configuration changes, and restart workers whenever queue or application settings change. Watch worker logs and the queue depth rather than assuming that a running process is processing jobs.

If Supervisor is unavailable, the official guide describes a five-minute fallback that runs a worker until the queue is empty:

*/5 * * * * cd /var/www/invoiceninja && php artisan queue:work --stop-when-empty

This fallback can delay notifications and other jobs for several minutes, so use a persistent worker for a busy or time-sensitive installation.

Best Value
Sale
Under Desk Cable Management Tray No Drill, Metal Mesh Cable Management Under Desk with Clamp Mount, 2 Hole Cable Tray with Wire Management and Cord Organizer for Home Office Standing Desk
  • 【No Drill Mounted】Cable management tray can be assembled in as little as 3 minutes or less-simply. Side clips easily clampe the edge of desk, pass through the holes on the sides, and secure excess cables with baskets. Desk cable management supports inward or outward installation to meet your needs in different scenarios, and provides you with great convenience when collecting and organizing wires.
  • 【Rubber Pad Protects Desk】Wire organizer under desk built-in soft rubber pads on the clamp protect your desk from scratches, so you will not damage your furniture or office.
  • 【Sturdy and Beautiful】Cord management under desk is made of high-quality carbon steel and holds about 15 lbs. The wire basket has 2 holes on each side of the tray to enable your cables to pass freely. Cable baskets are suitable for desk thickness use from 0.4" to 2.4".
  • 【Space Saving & Keep Organized】Desk cable management tray holds all your power cords, outlet strips, USB hubs and computer transformers hidden from your feet, and the data cables will not enter the vacuum cleaner to keep your desk clean and tidy. Desk wire organizer is also suitable for use in the kitchen and outdoors.
  • 【Reduce Safety Risks】Cable tray under desk keeps all plugs away from your kids, no more worry about tripping. Using 2 holes wire tray saves extra space, helps you easily cabling and wire protection. The mesh design is not easy to accumulate dust, but avoids safety accidents caused by messy wires.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Verify the installation before importing data

  • Web access: the hostname resolves, HTTPS is valid, HTTP redirects, and the setup process is complete.
  • Authentication: create an administrator, sign out, and sign back in from a separate browser session.
  • Documents: create a test client and invoice, render a PDF, and confirm that downloaded files are complete.
  • Email: send a test message to an address outside the VPS provider and inspect both delivery and application logs.
  • Scheduling: create a recurring invoice or reminder test and confirm that the next run occurs.
  • Queues: enqueue a notification, verify that a worker consumes it, and restart the worker to confirm process supervision.
  • Backups: restore a database and files into an isolated test instance and verify that the application can open the restored data.
  • Monitoring: alert on disk exhaustion, failed services, certificate expiry, database errors, and repeated queue failures.

Backups and recovery

Back up four categories together: the MySQL or MariaDB database, uploaded and generated application files, the .env file and other encryption-related secrets, and persistent Docker volumes when containers are used. Keep at least one copy off the VPS. Protect backups with access controls and encryption appropriate to the financial data they contain.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The environment reference includes backup-retention controls. Set retention deliberately so automated cleanup cannot remove every usable restore point. Before an Invoice Ninja update, take a fresh database export and file backup, record the application version, and confirm that the backup can be read. A backup that has never been restored is only an assumption.

Recovery sequence

  1. Stop writes or place the application in maintenance mode so new invoices do not diverge from the backup.
  2. Provision a clean, compatible application environment and install the same Invoice Ninja version recorded in the backup.
  3. Restore the database, application files, persistent volumes, and protected environment values.
  4. Correct ownership and permissions, run the documented cache optimization, and restart PHP-FPM, web services, containers, and workers.
  5. Verify login, invoice PDFs, mail, scheduler activity, and integrations before switching DNS or the proxy back to the restored instance.

Upgrade strategy and the v4 to v5 boundary

Pin and document the Invoice Ninja version, read release notes before every update, and test the update on a disposable copy first. Recheck PHP and database support, Docker image tags, extension availability, and provider backup behavior. Keep the old version and its restore point until the new deployment has passed functional checks.

Invoice Ninja v5 is not an in-place upgrade from v4.x. Plan a clean v5 installation and a tested migration rather than replacing v4 files over the top of an existing directory. Preserve the original database and files until the migration is verified.

Troubleshooting common failures

Symptom Likely cause Corrective action
Setup page reports missing PHP functionality PHP-FPM and command-line PHP use different versions or extensions. Compare both module lists, install the missing documented extensions, restart PHP-FPM, and rerun setup.
Every URL except the home page returns an error The web root or rewrite configuration points at the project directory instead of public. Set the virtual-host document root to /var/www/invoiceninja/public, enable the required rewrite rules, and reload the web server.
Application works at a hostname but fails under /ninja Subdirectory URLs are not supported by the official guide. Use a dedicated hostname or virtual host and set APP_URL to that HTTPS address.
Invoice PDF generation fails Graphics or image-processing dependencies such as gd or imagick are absent, or the worker lacks file permissions. Install and enable the documented extensions, correct ownership of storage directories, and inspect application logs.
Recurring invoices or reminders never run The one-minute scheduler cron is missing, runs from the wrong directory, or uses an incompatible PHP binary. Run the exact schedule:run entry manually, inspect cron logs, and correct the path, user, or PHP version.
Notifications remain queued No persistent worker is running, the queue backend is misconfigured, or workers were not restarted after an environment change. Check QUEUE_CONNECTION, start or restart Supervisor-managed workers, and inspect queue and application logs.
Containers restart with lost invoices or uploads Database or application data was stored only in ephemeral container filesystems. Define persistent volumes, restore from the latest backup, and test a container recreation before using production data.
Mail appears successful but recipients receive nothing SMTP credentials, sender authorization, DNS, or provider filtering is incorrect. Inspect mail logs and delivery responses, verify the sender domain, and test multiple recipient domains.

Security and maintenance routine

  • Apply operating-system, PHP, database, web-server, and container security updates on a schedule.
  • Use unique secrets for APP_KEY, database access, mail, webhooks, and integrations; never commit .env to a public repository.
  • Restrict database exposure to the application network, limit SSH access, and review authentication logs.
  • Monitor free disk space because PDFs, uploads, logs, and database files grow independently.
  • Review release notes and compatibility before changing the Invoice Ninja version or PHP version.
  • Retain off-server backups and perform periodic restore drills, not just backup jobs.
  • Record the deployed version, image tag or release archive, PHP extensions, virtual-host configuration, cron entries, worker settings, and recovery contacts.

Invoice Ninja’s self-hosting terms, version 1.0.2 dated February 1, 2026, state that the platform is provided “as is” and “with all faults” and is used at the operator’s own risk. That makes the recovery and maintenance practices above part of the deployment, not optional extras.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Which VPS approach fits your situation?

  • Choose manual installation when you need direct control of nginx or Apache, PHP-FPM, database configuration, and host-level monitoring, and you are comfortable maintaining those components.
  • Choose Docker or Podman when reproducible builds, isolated dependencies, and a documented Compose workflow matter more than managing packages directly.
  • Choose a managed or panel route when reducing day-to-day system administration is worth accepting that provider’s backup process, update cadence, and portability limits.
  • Choose a larger VPS than the minimum when the baseline resources leave little room for concurrent PDF generation, imports, workers, logs, or database growth. There is no published independent capacity study that converts invoice volume into a guaranteed VPS size.

The reliable pattern is the same in every case: use a supported runtime, serve the public directory over HTTPS, configure the environment deliberately, run the scheduler every minute, supervise queue workers, and prove that backups restore before the server becomes your only copy of financial records.

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.