Manual Installation
For environments where Docker is not available or when you prefer full control over the server stack.
System Requirements
Note: If you already have Node.js and Composer on another machine, you can build the vendor assets there and copy
templates/default/vendor/andvendor/to the server. Node.js is only needed at build time, not runtime.
Step-by-Step Installation
1. Extract Files
Place the Simple Invoices files in your web server's document root:
2. Create the Database
Create a database and user in your database server:
MySQL / MariaDB:
PostgreSQL:
SQLite: No separate database server is required. The database file will be created automatically in
databases/sqlite/.
3. Configure the Application
Copy the example environment file and edit it:
For manual (non-Docker) installations, set these key variables in .env.local:
Alternatively, you can edit config/config.php directly to set database credentials and other settings.
4. Install Dependencies
On a production server, you may want to run these commands on your development machine and copy the generated
vendor/andtemplates/default/vendor/directories to the server, especially if Node.js or Composer are not available.
5. Set Permissions
The tmp/ directory must be writable by the web server:
6. Configure the Web Server
Apache
The application uses index.php as the front controller. Enable mod_rewrite and configure:
The included .htaccess already handles URL rewriting for clean URLs.
Nginx
7. Run the Application
Open http://your-server/ in your browser. The application will:
- Detect that the database needs initializing
- Run the first-run wizard to create tables and default data
- Prompt you to set the administrator password
Post-Installation
After the first run completes:
- Log in with your administrator credentials
- Configure email settings under Settings → System Preferences
- Add billers (People → Billers), customers (People → Customers), and products (Products → Manage Products)
- Review and adjust tax rates and payment types
Updating
To update an existing manual installation:
Then visit the application: database patches will be detected and can be applied manually from Settings → Options → Database Patches, or automatically if configured.
Troubleshooting
Blank page or 500 error
Check the PHP error log:
Enable display errors temporarily by setting SI_PHP_DISPLAY_ERRORS=1 in .env.local.
Database connection error
Verify:
- Database credentials in
.env.localmatch your database setup - The database server is running and accessible
- PHP extensions are installed:
php -m | grep pdo
Permission denied on tmp/
The tmp/cache/, tmp/log/, and tmp/database_backups/ directories must be writable:
Missing vendor assets (broken CSS/JS)
Frontend assets are built with npm:
Verify that templates/default/vendor/ contains the expected subdirectories (tabler-core, tabler-icons, tom-select, etc.).
mod_rewrite not working (Apache)
Check that:
AllowOverride Allis set in your Apache virtual host configuration- The
.htaccessfile exists in the application root mod_rewriteis enabled:a2enmod rewrite && systemctl restart apache2
Cron for recurring invoices
Recurring invoices require a cron job to trigger generation:
Add this to your crontab to automatically generate recurring invoices every 5 minutes.