mirror of
https://github.com/InvoiceShelf/InvoiceShelf.git
synced 2026-08-04 07:02:13 +00:00
ae035498c6bc2b4bdcc9d829fe70e76901ecdffb
Fixes InvoiceShelf/docker#75 and #69, and gives InvoiceShelf/docker#77 and #63 an actionable error instead of a cryptic one. storage/framework/{cache,sessions,views}, storage/logs and storage/app hold no tracked content — only .gitignore stubs — so nothing guarantees they exist inside a mounted volume. Docker seeds a named volume from the image exactly once, when the volume is empty, and never again: a volume created by an older image keeps whatever it had through every subsequent upgrade. When those directories are absent Laravel dies at boot with "Please provide a valid cache path", because config/view.php resolves its compiled path with realpath(), which returns false for a missing directory. The sqlite branch also cannot place its database. Reproduced against a locally built image: deleting storage/framework from a named volume fails the container with exactly that message, and passes with this change. The chown is guarded on being root. The image runs as www-data (uid 82), where chown of a foreign-owned file is EPERM and, under `set -e`, would stop the container from starting at all — which is the likely reason it was dropped from this tree previously. Guarding it keeps the benefit for anyone running as root without that failure mode. A mount the container genuinely cannot write to is not something the entrypoint can fix, so it now says so and names the remedy, rather than letting the failure surface later as a Laravel stack trace.
Introduction
InvoiceShelf is an open-source web app that helps you track expenses, record payments, and create professional invoices and estimates. It is self-hosted, multi-tenant, and built for individuals and small businesses that want to keep their books on their own infrastructure.
The web application is built with Laravel and Vue 3.
To get started using Docker Compose, follow the Installation guide.
Table of Contents
Documentation
System Requirements
- PHP 8.4+ is required (since v2.2.0, when InvoiceShelf moved to Laravel 13).
- Database: MySQL, MariaDB, PostgreSQL, or SQLite.
- Before updating from inside the app, verify your server meets the target version's PHP and extension requirements.
- The in-app updater verifies requirements and refuses to proceed if they are not met.
Download
Discord
Join the discussion on the InvoiceShelf Discord: Invite Link
Roadmap
Rough roadmap of things to come, not in any specific order:
- Automatic Update
- Email Configuration
- Installation Wizard
- Address Customisation & Default Notes
- Edit Email before Sending Invoice
- Available as a Docker image
- Performance Improvements
- Customer View Page
- Custom Fields on Invoices & Estimates
- Multiple Companies
- Recurring Invoices
- Customer Portal
- Decoupled system settings from company settings (v3.0)
- Proper multi-tenancy system (v3.0)
- Company member invitations with custom roles (v3.0)
- Dark mode (v3.0)
- Full TypeScript refactor of the frontend (v3.0)
- Improved backend architecture (v3.0)
- Security hardening (v3.0)
- Reworked installation wizard (v3.0)
- Module Directory (v3.0)
- Rewritten Payments module (v3.0)
- Accept Payments (Stripe integration)
- Improved template system for invoices and estimates
Translate
Help us translate InvoiceShelf into your language: https://crowdin.com/project/invoiceshelf
Star History
License
InvoiceShelf is released under the GNU Affero General Public License v3.0. See LICENSE for the full text.
Languages
PHP
59.9%
Vue
36.1%
Blade
3.2%
Shell
0.6%
Dockerfile
0.1%