Konfiguration

Der Server liest eine JSON-Datei, angegeben mit --config. Ein Beispiel mit allen Abschnitten liegt in config\annotation-server.example.json. Relative Pfade beziehen sich auf den Ordner der Konfigurationsdatei. Geheimnisse (Passwörter, Schlüssel) können in eigenen Dateien liegen, die nur das Dienstkonto lesen darf: Verwenden Sie dafür die Schlüssel mit der Endung _file.

Beispiel

{
  "bind": "0.0.0.0",
  "port": 8080,
  "public_url": "https://annotation.example.com",
  "projects_root": "../projects",
  "project_folders": ["D:/LumiScan"],
  "data_root": "D:/LumiScan/annotation-data",
  "database": "annotation-server.db",
  "web_root": "../www",
  "log_dir": "../logs",
  "backup": { "dir": "../backups", "every_hours": 24, "keep": 14 },
  "pre_annotation": [
    { "url": "http://gpu-server:8090", "token_file": "preannotate.token" }
  ],
  "auth": {
    "local_login": true,
    "default_role": "annotator",
    "ldap": { "enabled": false },
    "oidc": { "enabled": false }
  }
}

Schlüssel

Schlüssel Bedeutung

bind, port

Adresse (Standard 0.0.0.0, alle Netzwerkschnittstellen) und Port (Standard 8080).

public_url

Die Adresse, die die Benutzer öffnen, z. B. https://annotation.example.com. Nötig hinter einem Reverse Proxy und für Single Sign-on (Rücksprungadresse).

https

auto (Standard), on oder off. Siehe HTTPS.

tls_cert, tls_key

Zertifikat und privater Schlüssel (PEM) für HTTPS. Ohne sie verwendet der Server ein selbstsigniertes Zertifikat. Siehe HTTPS.

tls_names

Optionale Liste: weitere Hostnamen oder IP-Adressen für das selbstsignierte Zertifikat.

web_root

Die Webseiten. Standard: www neben dem Programm.

data_root

Optional: ein Bildordner, der zum Projekt default wird, offen für alle Benutzer. So laufen bestehende Installationen der Version 2.0 unverändert weiter.

projects_root

Ordner für neue und importierte Projekte. Standard: projects neben der Konfiguration.

project_folders

Optionale Liste: Admins dürfen Projekte auf vorhandenen Ordnern nur unterhalb dieser anlegen.

s3_targets

Optionale Liste von S3-Buckets für Projekte, siehe Projekte in S3-Buckets.

pre_annotation

Optional: ein Dienst für Rahmenvorschläge oder eine Liste davon, je mit url, token_file (oder token), timeout_s, enabled. Siehe Dienst für Rahmenvorschläge. Ein Eintrag {"type": "onnx", "networks": "networks"} führt stattdessen die Netze in diesem Ordner im Server aus (Programmversionen mit eingebauten Netzen wie die Einzelplatz-Installation).

update_check

true: Einmal täglich fragt der Server docs.hdvisionsystems.com nach der aktuellen Version und zeigt Projekt-Admins Version … available. Es wird nichts heruntergeladen. Standard: aus; an in der Einzelplatz-Installation.

database

Die Datenbank: Konten, Sitzungen, Projekte, Verlauf, Hinweise. Standard: annotation-server.db neben der Konfiguration. Nur lokale Festplatte, nie auf einer Netzwerkfreigabe.

index_refresh_seconds

Wie oft die Projektordner nach Änderungen außerhalb der Web-App durchsucht werden. Standard 60.

lock_lease_seconds

Wie lange eine Bearbeitungssperre ohne Erneuerung gilt. Standard 60; der Browser erneuert sie, solange das Bild offen ist.

log_dir

Ordner für rotierende Protokolldateien. Ohne ihn geht das Protokoll nur auf die Konsole.

backup.dir, backup.every_hours, backup.keep

Automatische Sicherungen: Ordner (Standard backups neben der Konfiguration), Abstand in Stunden (Standard 24), Anzahl der aufbewahrten (Standard 14). Siehe Sicherung und Wiederherstellung.

auth

Anmeldeverfahren und Sitzungen, siehe Anmeldeverfahren.

license

Für den LumiScan Key vorbereitet; in dieser Version nicht verwendet.

HTTPS

Der Server spricht standardmäßig HTTPS, Passwörter und Sitzungs-Cookies laufen also nie unverschlüsselt. Die Benutzer öffnen https://<Server>:<Port>/, z. B. https://annotation-pc:8080/. Der Port spricht entweder HTTPS oder HTTP: Eine Adresse mit http:// bekommt keine Antwort.

Selbstsigniertes Zertifikat (Standard)

Ohne tls_cert und tls_key erzeugt der Server beim ersten Start ein Zertifikat und legt es im Ordner tls neben der Konfiguration ab (self-signed-cert.pem, self-signed-key.pem). Einzurichten ist nichts.

  • Das Zertifikat nennt den Hostnamen des Rechners, localhost, die Netzwerkadressen des Rechners, den Host aus public_url und die Einträge von tls_names. Tragen Sie in tls_names jeden weiteren Namen oder jede IP-Adresse ein, die Benutzer eingeben, z. B. einen DNS-Alias.

  • Es gilt 825 Tage. Der Server erneuert es 30 Tage vor dem Ablauf, auch im laufenden Betrieb, und wenn ein Name aus public_url oder tls_names darin fehlt.

  • Browser zeigen eine Warnung wie „Dies ist keine sichere Verbindung", bis sie dem Zertifikat vertrauen. Vergleichen Sie den SHA-256-Fingerabdruck in den Zertifikatsdetails der Warnung mit dem, den das Serverprotokoll beim Start zeigt (HTTPS: SHA-256 fingerprint …), und fahren Sie dann fort. Um die Warnung zu vermeiden, importieren Sie self-signed-cert.pem auf den Clients als vertrauenswürdiges Zertifikat (Windows: Vertrauenswürdige Stammzertifizierungsstellen, macOS: Schlüsselbund, Immer vertrauen), oder verwenden Sie ein Zertifikat der Zertifizierungsstelle Ihres Unternehmens.

  • Sichern Sie den Ordner tls mit der Konfiguration (die automatischen Sicherungen enthalten ihn). Ein neues Zertifikat bedeutet eine neue Warnung auf jedem Client.

Eigenes Zertifikat

Setzen Sie tls_cert und tls_key auf die PEM-Dateien eines Zertifikats der Zertifizierungsstelle Ihres Unternehmens oder einer öffentlichen Zertifizierungsstelle (das Zertifikat mit seinen Zwischenzertifikaten) und seines Schlüssels. Der Server prüft beim Start, ob beide zusammengehören, und warnt 30 Tage vor dem Ablauf des Zertifikats. Starten Sie den Server nach dem Austausch der Dateien neu.

  "tls_cert": "tls/annotation.pem",
  "tls_key": "tls/annotation.key",
Hinter einem Reverse Proxy (nginx, IIS, Apache)

Der Proxy beendet TLS und leitet an den Server auf demselben Rechner weiter, z. B. auf 127.0.0.1:8080. Mit "bind": "127.0.0.1" bleibt der Server von selbst bei unverschlüsseltem HTTP ("https": "auto"); andernfalls setzen Sie "https": "off". Setzen Sie public_url auf die Adresse, die die Benutzer öffnen. Der Proxy sollte den Header X-Forwarded-Proto: https senden, damit das Sitzungs-Cookie als sicher markiert wird.

server {
    listen 443 ssl;
    server_name annotation.example.com;
    ssl_certificate     /etc/ssl/annotation.pem;
    ssl_certificate_key /etc/ssl/annotation.key;
    client_max_body_size 64m;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto https;
        proxy_read_timeout 600s;
    }
}

client_max_body_size muss die 8-MB-Stücke eines Projektimports zulassen.

Sitzungen und Sicherheit

  • Die Anmeldung erzeugt ein Sitzungs-Cookie (HttpOnly, SameSite=Lax, Secure über HTTPS). Eine Sitzung endet nach auth.session_hours ohne Aktivität (Standard 12) und spätestens nach auth.max_session_days (Standard 7).

  • Nach 5 fehlgeschlagenen Anmeldungen ist ein Konto für 15 Minuten gesperrt (30 Fehlversuche je Netzwerkadresse).

  • Deaktivieren eines Benutzers oder Zurücksetzen seines Passworts beendet seine Sitzungen sofort.

  • Jede ändernde Anfrage braucht den Header X-Requested-With: lsa; das schützt vor seitenübergreifenden Anfragen.