Darko Gjorgjijoski 6c8b7d4dde fix(docker): recreate storage directories and guard the chown (#705)
Backport of InvoiceShelf/InvoiceShelf#702 to 2.x. The chown half of it is
a 2.x-only fix — 3.x had already dropped that line.

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
once, when it is empty, and never again — a volume created by an older
image keeps whatever it had through every upgrade. Without those
directories Laravel cannot boot and the sqlite branch cannot place its
database.

The unguarded `chown -R www-data:www-data storage` was worse than
ineffective. The image runs as www-data (uid 82), so chown of any file it
does not own returns EPERM, and under `set -e` that aborts the entrypoint.
A single uploaded file owned by the host user is enough to stop the
container from starting — on exactly the mounted-volume setups the chown
was meant to help. Verified against a built image: entrypoint exits 1
before this change, 0 after.

A mount the container genuinely cannot write to is not something the
entrypoint can repair, so it now says what is wrong and names the remedy
instead of failing later with `cp: can't create ...`.
2026-07-29 12:36:56 +02:00
2026-06-11 08:36:05 +02:00
2026-04-07 18:35:30 +02:00
2026-06-11 08:36:05 +02:00
2021-06-18 15:23:56 +05:30
2025-08-31 03:04:31 +02:00
2024-07-28 17:44:22 -07:00
2026-06-11 08:36:05 +02:00
2024-07-28 17:24:57 +02:00
2026-06-11 08:36:05 +02:00
2024-01-28 19:47:46 +01:00
2024-03-27 11:00:36 +01:00
2021-12-02 21:01:04 +05:30
2024-06-05 11:33:52 +02:00
2026-03-24 07:07:41 +01:00
2024-01-29 04:46:01 -06:00
2021-11-30 18:58:19 +05:30
2026-06-14 23:43:18 +02:00

Introduction

InvoiceShelf is an open-source web & mobile app that helps you track expenses, payments & create professional invoices & estimates.

The Web Application is made using Laravel & VueJS while the Mobile Apps are built using React Native.

To get started with InvoiceShelf using Docker Compose, check out the Installation docs.

Table of Contents

  1. Documentation
  2. Download
  3. Mobile Apps
  4. Discord - NEW 🔥
  5. Roadmap
  6. Credits
  7. Help us translate
  8. License

Documentation

System Requirements

  • Starting from v2.2.0 (Laravel 13 upgrade), InvoiceShelf requires PHP 8.4+.
  • Before updating from the app settings, verify your server PHP version and required extensions.
  • The in-app updater checks requirements and blocks the update if they are not met.

Download

Mobile Apps

  • Andorid - Coming Soon
  • IOS - Coming Soon
  • Source

Discord

Join the InvoiceShelf discord server to discuss: Invite Link

Roadmap

~~Here's a 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
  • Add and Use Custom Fields on Invoices & Estimates.
  • Multiple Companies
  • Recurring Invoices
  • Customer Portal
  • Accept Payments (Stripe Integration)
  • Improved template system (invoices and estimate)
  • Modules and templates marketplace

Credits

InvoiceShelf is made possible thanks to the contributions and support from many people and projects:

  • Crater (project inspiration and code base)
  • All contributors who have provided code, translations, reported issues, or supported the project in any way.

Translate

Help us translate on https://crowdin.com/project/invoiceshelf

License

InvoiceShelf is released under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3. See LICENSE for details.

S
Description
No description provided
Readme AGPL-3.0
70 MiB
Languages
PHP 59.9%
Vue 36.1%
Blade 3.2%
Shell 0.6%
Dockerfile 0.1%