Wie installiere ich Notory (self-hosted)?
Kurzantwort
Abschnitt betitelt „Kurzantwort“Notory läuft als Container-Stack (Backend + Web/Reverse-Proxy + Datenbank). Empfohlen
wird PostgreSQL oder MariaDB; SQLite dient nur zum Ausprobieren ohne separate
Datenbank. Du hinterlegst die Konfiguration in einer .env, startest den Stack mit
Docker Compose, führst die Datenbank-Migrationen aus und legst beim ersten Aufruf
den ersten Mandanten und Administrator an. Ohne gültige Lizenz läuft die Installation im
Nur-Lese-Modus: Daten bleiben sichtbar, aber Änderungen sind gesperrt, bis eine gültige
Lizenz (mindestens Starter) eingespielt wird.
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“- Docker + Docker Compose
- Eine Datenbank: PostgreSQL 16+ oder MariaDB 11.x (als Container oder extern)
- Optional, aber für Produktion empfohlen: Reverse-Proxy (nginx/Traefik) mit TLS-Zertifikat
Anleitung
Abschnitt betitelt „Anleitung“-
Umgebungsvariablen (
.env) anlegen. Datenbank-Verbindung, ein langer zufälligerSECRET_KEYund optional der Lizenzschlüssel:.env # Datenbank (eine Zeile wählen)DATABASE_URL=postgresql://inv:secret@db:5432/notory# DATABASE_URL=mariadb://inv:secret@db:3306/notory# SicherheitSECRET_KEY=bitte-langen-zufallswert-setzen# Lizenz (optional - ohne gültige Lizenz nur Lese-Modus, keine Änderungen)LICENSE_KEY=# Der öffentliche Verifizierungsschlüssel ist im Produkt gebündelt;# alternativ eigener Pfad:# LICENSE_PUBLIC_KEY_PATH=/keys/license_public.pem -
docker-compose.ymlerstellen.docker-compose.yml services:db:image: postgres:16environment:POSTGRES_USER: invPOSTGRES_PASSWORD: secretPOSTGRES_DB: notoryvolumes: [ "dbdata:/var/lib/postgresql/data" ]backend:image: notory/backend:latestenv_file: .envdepends_on: [ db ]web:image: notory/web:latestports: [ "8080:80" ] # nginx reverse proxydepends_on: [ backend ]volumes:dbdata:docker-compose.yml services:db:image: mariadb:11environment:MARIADB_USER: invMARIADB_PASSWORD: secretMARIADB_DATABASE: notoryMARIADB_ROOT_PASSWORD: change-mevolumes: [ "dbdata:/var/lib/mysql" ]backend:image: notory/backend:latestenv_file: .env # DATABASE_URL=mariadb://…depends_on: [ db ]web:image: notory/web:latestports: [ "8080:80" ]depends_on: [ backend ]volumes:dbdata: -
Starten & Migrationen ausführen.
Terminal-Fenster docker compose up -d# Datenbank-Schema anlegen/aktualisieren:docker compose exec backend alembic upgrade headAnschließend ist die Oberfläche unter
http://SERVER:8080erreichbar. -
Ersten Mandanten und Admin anlegen. Beim ersten Aufruf führt dich Notory durch das Anlegen des ersten Mandanten und eines Administrator-Kontos. Danach kannst du dich anmelden.
-
TLS / Reverse-Proxy einrichten (Produktion). Setze für den Produktivbetrieb einen Reverse-Proxy mit Zertifikat (z. B. Let’s Encrypt) vor und leite HTTPS auf den
web-Dienst (Port 8080). -
Lizenz einspielen (optional). Trage den
LICENSE_KEYin die.envein und starte denbackend-Dienst neu. Details, Instanz-Bindung und Status prüfen: Lizenz einspielen.
Was passiert dabei?
Abschnitt betitelt „Was passiert dabei?“- Nur-Lese-Modus als Fallback. Ohne gültige Lizenz läuft die Installation im Nur-Lese-Modus: Daten bleiben sichtbar, aber Änderungen sind gesperrt, bis eine gültige Lizenz (mindestens Starter) eingespielt wird. Ein später eingespielter Schlüssel schaltet Tarif, Limits und Module frei - Daten bleiben erhalten.
- Instanz-ID. Beim ersten Start erzeugt Notory eine eindeutige Instanz-ID (sichtbar unter Verwaltung → Lizenz). Sie wird für instanzgebundene Lizenzen benötigt.
- Migrationen sind wiederholbar.
alembic upgrade headbringt das Schema auf den aktuellen Stand; denselben Befehl nutzt du nach jedem Update.