Installation (self-hosted)
Notory runs as a container stack. Recommended: PostgreSQL or MariaDB. SQLite is only for testing without a separate database.
Requirements
- Docker + Docker Compose
- A database: PostgreSQL 16+ or MariaDB 11.x
- Optional: reverse proxy (nginx/Traefik) with TLS
1. Environment variables (.env)
# Database (choose one line)
DATABASE_URL=postgresql://inv:secret@db:5432/notory
# DATABASE_URL=mariadb://inv:secret@db:3306/notory
# Security
SECRET_KEY=please-set-a-long-random-value
# License (optional - without a key it runs Community, max 30 assets)
LICENSE_KEY=
# The public verification key is bundled with the product;
# alternatively your own path/content:
# LICENSE_PUBLIC_KEY_PATH=/keys/license_public.pem
2. docker-compose.yml
services:
db:
image: postgres:16
environment:
POSTGRES_USER: inv
POSTGRES_PASSWORD: secret
POSTGRES_DB: notory
volumes: [ "dbdata:/var/lib/postgresql/data" ]
backend:
image: notory/backend:latest
env_file: .env
depends_on: [ db ]
web:
image: notory/web:latest
ports: [ "8080:80" ] # nginx reverse proxy
depends_on: [ backend ]
volumes:
dbdata:
MariaDB instead of PostgreSQL: switch the db service to mariadb:11 and set the DATABASE_URL accordingly.
3. Start & migrations
docker compose up -d
# Create/update the database schema:
docker compose exec backend alembic upgrade head
The interface is then available at http://SERVER:8080. On first launch, create the first tenant and admin.
4. TLS / reverse proxy
For production, put a reverse proxy with a certificate in front (Let's Encrypt). Route HTTPS to the web service (port 8080).
5. Apply a license
Enter the LICENSE_KEY in the .env and restart the backend service. Check the status under Admin → License. See Licensing.
Note: image names/tags are placeholders - you receive the actual sources with your order. Questions?