InvoiceShelf logo

InvoiceShelf

Open source invoicing solution for individuals and businesses

Alternative to: freshbooks, invoice ninja, zoho invoice


InvoiceShelf is a self-hosted, multi-tenant invoicing app that helps individuals and small businesses create professional invoices and estimates, record payments, and track expenses. It supports multiple companies, customizable templates, taxes, and recurring invoices through a Laravel and Vue web app.

InvoiceShelf Docker Compose example

Self-host InvoiceShelf on your own server, homelab, or VPS starting from this Docker Compose example. It runs InvoiceShelf in Docker containers using the official invoiceshelf/invoiceshelf:latest image, with persistent volumes and automatic restarts preconfigured. Review the environment variables and adjust them to your setup, save the file as compose.yml (or docker-compose.yml), and start the stack with docker compose up -d.

services:
  webapp:
    image: invoiceshelf/invoiceshelf:latest
    restart: unless-stopped
    volumes:
      - storage:/var/www/html/storage/
      - modules:/var/www/html/Modules/
    environment:
      # Application name shown in the UI.
      APP_NAME: "InvoiceShelf"
      APP_ENV: "production"
      APP_DEBUG: "false"
      # Public URL the app is reached at, including scheme (and port if non-standard). e.g. https://invoices.example.com
      APP_URL: "http://localhost"
      # Host used for session cookies (host only, no scheme). Must match APP_URL's host.
      SESSION_DOMAIN: "localhost"
      # Comma-separated domains allowed to make cookie-authenticated API requests. Must include APP_URL's host[:port].
      SANCTUM_STATEFUL_DOMAINS: "localhost"
      DB_CONNECTION: "sqlite"
      # Path to the SQLite database file inside the storage volume. Do not change.
      DB_DATABASE: "/var/www/html/storage/app/database.sqlite"
      CACHE_STORE: "file"
      SESSION_DRIVER: "file"
      SESSION_LIFETIME: "240"
      AUTORUN_ENABLED: "true"
      AUTORUN_LARAVEL_MIGRATION: "false"
      AUTORUN_LARAVEL_OPTIMIZE: "false"
      PHP_OPCACHE_ENABLE: "1"

volumes:
  storage:
  modules:

Prefer a managed setup? WinterFlow installs, configures, and updates InvoiceShelf for you using this same Docker Compose configuration.