Skip to content

How do I install Notory (self-hosted)?

Notory runs as a container stack (backend + web/reverse proxy + database). We recommend PostgreSQL or MariaDB; SQLite is for quick trials only. You put the configuration in a .env, start the stack with Docker Compose, run the database migrations, and create the first tenant and administrator on first launch. Without a valid license the installation runs in read-only mode: data stays visible but changes are blocked until a valid license (Starter or higher) is applied.

  • Docker + Docker Compose
  • A database: PostgreSQL 16+ or MariaDB 11.x (containerized or external)
  • Optional, recommended for production: a reverse proxy (nginx/Traefik) with a TLS certificate
  1. Create environment variables (.env). Database connection, a long random SECRET_KEY, and optionally the license key:

    .env
    # Database (pick one line)
    DATABASE_URL=postgresql://inv:secret@db:5432/notory
    # DATABASE_URL=mariadb://inv:secret@db:3306/notory
    # Security
    SECRET_KEY=set-a-long-random-value
    # License (optional - without a valid license it runs read-only, no changes)
    LICENSE_KEY=
  2. Create docker-compose.yml.

    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:
  3. Start & run migrations.

    Terminal window
    docker compose up -d
    # Create/upgrade the database schema:
    docker compose exec backend alembic upgrade head

    The interface is then reachable at http://SERVER:8080.

  4. Create the first tenant and admin. On first launch, Notory walks you through creating the first tenant and an administrator account. Afterwards you can sign in.

  5. Set up TLS / reverse proxy (production). For production, put a reverse proxy with a certificate (e.g. Let’s Encrypt) in front and route HTTPS to the web service (port 8080).

  6. Install a license (optional). Add the LICENSE_KEY to .env and restart the backend service. Details, instance binding, and status: Install a license.

  • Read-only mode as fallback. Without a valid license the installation runs in read-only mode: data stays visible but changes are blocked until a valid license (Starter or higher) is applied. A key installed later unlocks the plan, limits, and modules - your data is kept.
  • Instance ID. On first start Notory generates a unique instance ID (visible under Administration → License), required for instance-bound licenses.
  • Migrations are repeatable. alembic upgrade head brings the schema up to date; you run the same command after every update.