Invoicerr

Invoicerr is a modern, open‑source invoicing platform built for freelancers and small businesses. It focuses on simplicity, clean design, and practical features that help you create, send, and track invoices without the bloat of enterprise billing systems.

🧾 What Invoicerr Is

🧩 Key Features (from the repo)

🚀 Docker Installation Steps

  1. Update your system
    sudo apt update && sudo apt upgrade -y
  2. Install Docker
    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh
  3. Install Docker Compose
    sudo apt install docker-compose-plugin
  4. Add your user to the Docker group
    sudo usermod -aG docker $USER
  5. Enable Docker at boot
    sudo systemctl enable docker
  6. Reboot
    sudo reboot
  7. Test Docker
    docker run hello-world

📁 Setup Invoicerr

mkdir ~/docker
mkdir ~/docker/invoicerr

🧾 Docker Compose File

In /volume2/docker/invoicerr create docker-compose.yml

services:
  invoicerr:
    image: ghcr.io/invoicerr-app/invoicerr:latest
    ports:
      - "9980:80"
    environment:
      - DATABASE_URL=postgresql://invoicerr:invoicerr@invoicerr_db:5432/invoicerr_db

      - APP_URL=https://192.168.86.146 # Required for email templates, as it redirects to the app
      - CORS_ORIGINS=http://localhost:5173,https://<YOUR_DEVICE_IP>:9980,http://<YOUR_DEVICE_IP>:9980 

      # Required for email features
      - SMTP_HOST=smtp.gmail.com # I use Gmail, use whatever you have
      - SMTP_USER="<YOUR_GMAIL_EMAIL_ADDRESS>@gmail.com"
      #- SMTP_FROM="user-from@example.com" # Not required if SMTP_USER is the same as SMTP_FROM
      - SMTP_PASSWORD="<YOUR_GMAIL_API_KEY>" # NOT your gmail password
      - SMTP_PORT=587 # Change this to your SMTP port (default is 587 for TLS)
      - SMTP_SECURE=false # Set to true if your SMTP server requires a secure connection (default is false)

      # OIDC Configuration (example for Authentik)
      - OIDC_ISSUER="https://auth.chevrier.dev"
      - OIDC_NAME="Pocket ID"
      # Endpoints for OIDC
      - OIDC_AUTHORIZATION_ENDPOINT="https://auth.chevrier.dev/authorize"
      - OIDC_TOKEN_ENDPOINT="https://auth.chevrier.dev/token"
      - OIDC_USERINFO_ENDPOINT="https://auth.chevrier.dev/userinfo"
      - OIDC_TOKEN_REVOKE_ENDPOINT="https://auth.chevrier.dev/revoke"
      - OIDC_END_SESSION_ENDPOINT="https://auth.chevrier.dev/end_session"
      - OIDC_JWKS_URI="https://auth.chevrier.dev/.well-known/jwks.json"
      # Client ID and Secret for OIDC
      - OIDC_CLIENT_ID="your-client-id"
      - OIDC_CLIENT_SECRET="your-client-secret"

      # Optional, but recommended for docker deployments
      - JWT_SECRET="your_jwt_secret" # Used for JWT authentication, can be any random string
    depends_on:
      - invoicerr_db

  invoicerr_db:
    image: postgres:15
    environment:
      POSTGRES_USER: invoicerr
      POSTGRES_PASSWORD: invoicerr
      POSTGRES_DB: invoicerr_db
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:
    driver: local

▶️ Start Invoicerr

From within /volume2/docker/invoicerr run:

docker compose up -d

📜 View Logs

View logs for the Invoicerr server:

docker logs invoicerr

🌐 Access Web Interface

Open your browser and go to http://<YOUR_DEVICE_IP>:9980. Create a user and you're in.

If you find my content useful, please consider supporting this page:

☕ Buy Me a Coffee