Self-hosting Invoice Ninja v5 offers businesses full control over their data and operations, but with that control comes significant responsibility. One of the most critical tasks for any self-hosted environment is implementing a reliable, automated backup system. Losing client information, invoices, and payments due to accidental deletions, hardware failures, or cyber attacks can have severe repercussions.
This guide will walk you through how to script automatic backups for your self-hosted Invoice Ninja v5 installation, ensuring data integrity and peace of mind.
Why Automatic Backups Are Essential
Invoice Ninja stores sensitive client data and financial records, making it a prime target for malware or database corruption. Manual backups are prone to human error and inconsistency. Automating this process removes reliance on memory and simplifies disaster recovery.

A comprehensive backup strategy should include:
- Database backups – Invoice Ninja uses a MySQL or PostgreSQL database to store transactional data.
- Application files – These include uploaded receipts, logos, and custom settings.
- Encryption keys and environment files – Essential for decrypting sensitive data stored in the database.
Step-by-Step Guide for Automating Backups
Here’s a detailed breakdown of how you can script backups on a Linux server hosting Invoice Ninja v5.
1. Identify Key Components
- App directory: Usually located at
/var/www/invoiceninja
or similar. - Database credentials: Stored in the
.env
file in the root of the Invoice Ninja directory.
2. Create the Backup Script
You can use a Bash script to handle copying files and dumping the database contents:
#!/bin/bash
TIMESTAMP=$(date +"%F")
BACKUP_DIR="/opt/backups/invoiceninja/$TIMESTAMP"
APP_DIR="/var/www/invoiceninja"
DB_NAME="ninja"
DB_USER="ninja_user"
DB_PASS="your_db_password"
mkdir -p $BACKUP_DIR
# Backup Invoice Ninja files
cp -r $APP_DIR $BACKUP_DIR/app
# Dump the database
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/ninja.sql
# Optional: compress the backup folder
tar -czf /opt/backups/invoiceninja_$TIMESTAMP.tar.gz -C /opt/backups/invoiceninja $TIMESTAMP
# Cleanup old backups (older than 7 days)
find /opt/backups/ -name "*.tar.gz" -type f -mtime +7 -delete
Note: Replace credentials and file paths with values that match your setup. Ensure the script is executable and protect it with limited permissions to avoid unauthorized access.
3. Configure Cron for Automation
To automate the backup process, schedule the script using cron
:
crontab -e
Add the following line to run the backup daily at 2 AM:
0 2 * * * /opt/scripts/backup_invoiceninja.sh >> /var/log/invoiceninja_backup.log 2>&1
This ensures daily, unattended backups that are logged for audit and troubleshooting.
Extra Considerations
1. Encrypt Your Backups
For added security, especially when storing backups off-site or in cloud storage, use tools like gpg
or openssl
to encrypt the backup files.
2. Remote and Offsite Storage
Storing backups on the same server as your Invoice Ninja app invites disaster. Push compressed backups to a remote server using rsync
, scp
, or utilize cloud services like AWS S3, Dropbox, or Google Drive for redundancy.
3. Restoration Testing
Regularly test your backup recovery process. A backup is only as good as your ability to restore it when needed. Schedule periodic dry-run restorations on a staging environment to validate your scripts and data.
Conclusion
Implementing scripted and automated backups for your self-hosted Invoice Ninja v5 is not just a best practice—it’s a business-critical requirement. Whether you operate a small agency or manage financial services, ensuring the safety of transactional data and client records shields your company from data loss and liability.
By investing time into setting up a robust backup system using scripts and automation, you lay the foundation for consistent, secure, and reliable operations. Regular reviews, secure offsite storage, and restoration drills should become part of your standard operating procedures.
With the right backup strategy, you’re not just protecting files—you’re maintaining trust and operational continuity.