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.
sudo apt update && sudo apt upgrade -ycurl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh
sudo apt install docker-compose-pluginsudo usermod -aG docker $USERsudo systemctl enable dockersudo rebootdocker run hello-worldmkdir ~/docker mkdir ~/docker/invoicerr
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
From within /volume2/docker/invoicerr run:
docker compose up -d
View logs for the Invoicerr server:
docker logs invoicerr
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: