Lizenzbetrieb
Ohne Lizenzserver
Die produktive WERKSPUR-Ausgabe prüft eine signierte, an genau eine Installation gebundene Lizenz lokal. Sie baut weder bei der Aktivierung noch im laufenden Betrieb eine Verbindung zu einem Lizenzserver auf. Die Anwendung erhält nur den öffentlichen Prüfschlüssel; der private Signierschlüssel bleibt beim Anbieter. Eine Entwicklungs-Ausgabe aus dem Quellcode erzwingt diese Prüfung nicht und ist nicht die ausgelieferte Produktiv-Ausgabe.
Zwei feste Mounts gehören zur Installation:
- Das persistente Volume
license-stateliegt im Container unter/var/lib/werkspur/license. Es enthält die private Installationsidentität und muss vor Zugriff und Verlust geschützt werden. - Das Host-Verzeichnis
deploy/license/wird schreibgeschützt unter/etc/werkspureingebunden. Die aktive Datei heißt auf dem Hostdeploy/license/license.jsonund im Container/etc/werkspur/license.json.
Der Verzeichnis-Mount ist wichtig: Nur damit wird ein atomar umbenannter Ersatz sichtbar. Binden Sie nicht allein die einzelne Datei ein und ändern Sie die Pfade in einer Produktivbereitstellung nicht.
Installationsanfrage erzeugen
Erzeugen Sie die Identität einmal auf dem Zielserver und schreiben Sie die übertragbare Anfrage ausschließlich auf die Standardausgabe:
./deploy/production-compose.sh run --rm -T werkspur \
license-request -out - > license-request.json
Der Befehl legt beim ersten Lauf die Installationsidentität im Volume an; spätere Läufe verwenden dieselbe Identität. license-request.json enthält nur die öffentliche Installationskennung und darf an den Anbieter übertragen werden. Übertragen Sie niemals Dateien aus dem Volume /var/lib/werkspur/license.
Senden Sie license-request.json über den vereinbarten geschützten Übertragungsweg an den Anbieter. Sie erhalten eine signierte license.json zurück. Prüfen Sie Dateiname und Zuordnung zum Standort, legen Sie die Datei vor dem ersten normalen Start ab und starten Sie dann den Stack:
mkdir -p deploy/license
install -m 0644 received-license.json deploy/license/license.json
make production-up
Eine fehlende, beschädigte, mit einem unbekannten Signierschlüssel ausgestellte oder für eine andere Installationsidentität ausgestellte Lizenz verhindert den ersten normalen Start. Erzeugen Sie in diesem Fall die Anfrage auf genau diesem Server erneut und lassen Sie die Zuordnung vom Anbieter prüfen. Ersetzen Sie weder das Installations-Volume noch die Lizenz einzeln durch Material eines anderen Systems.
Zustand als Admin prüfen
Admins sehen den Lizenzzustand in der Oberfläche und können GET /api/license/status mit ihrer Sitzung lesen. Die Antwort enthält Zustand, Lizenz-ID, Kunde, Standort, Gültigkeits- und Kulanzfrist, die verbleibenden Tage sowie die lizenzierte und die verbundene Maschinenanzahl (machines_licensed, machines_connected). Schlüssel, Signatur und vollständiger Lizenzinhalt werden nicht ausgegeben.
active: Alle Funktionen sind verfügbar. Überschreitet die verbundene Maschinenanzahl die lizenzierte, zeigt die Oberfläche Admins zusätzlich einen Hinweis; das schränkt nichts ein. Sonst erscheint kein Banner.grace: Ab dem Ablaufdatum bleiben alle Funktionen 15 Tage lang verfügbar. Nur Admins sehen dauerhaft eine gelbe Warnung mit Ablauf- und Kulanzdatum.restricted: Nach den 15 Tagen bleiben Anmeldung, Fertigungsbuchungen, Maschinen- und Werkzeugzustände, bestehende Aktionen und Trigger, Integrationen, Auswertungen, Exporte, Sicherungen sowie/healthzund/readyzverfügbar. KI und administrative Konfigurationsänderungen werden abgewiesen. Betroffene API-Aufrufe antworten mit HTTP 403 und{"error":"license restricted","code":"license_restricted"}.
Der eingeschränkte Zustand löscht oder verändert keine Fachdaten. Er ist ausdrücklich kein Prozess- oder Readiness-Fehler; die Fertigung soll ohne Neustartschleife weiterlaufen.
Lizenz atomar verlängern
Erzeugen Sie für eine Verlängerung erneut eine Anfrage mit dem obigen Befehl. Solange das Installations-Volume unverändert ist, enthält sie dieselbe Identität. Übertragen Sie die Anfrage an den Anbieter und legen Sie die zurückgegebene Datei zunächst neben der aktiven Datei ab:
install -m 0644 received-license.json deploy/license/license.json.tmp
mv deploy/license/license.json.tmp deploy/license/license.json
mv muss auf demselben Dateisystem stattfinden. Schreiben oder kopieren Sie nicht direkt in license.json; eine teilweise gelesene Datei würde die laufende Installation vorübergehend einschränken. WERKSPUR prüft die atomar ersetzte Datei innerhalb von fünf Sekunden, ein Neustart ist nicht erforderlich. Kontrollieren Sie danach als Admin, dass state und valid_until den erwarteten Stand zeigen.
Fehler im laufenden Betrieb
Wird eine zuvor gültige Datei im Betrieb gelöscht, beschädigt oder durch eine fremde Lizenz ersetzt, läuft WERKSPUR im eingeschränkten Zustand weiter. Der Admin-Status nennt einen sicheren Diagnosecode:
runtime_problem |
Ursache und Maßnahme |
|---|---|
license_file_missing |
deploy/license/license.json fehlt. Stellen Sie die gültige Datei atomar wieder her. |
license_file_invalid |
Datei, Format, Signatur oder Signierschlüssel ist ungültig. Verwenden Sie unverändert die vom Anbieter gelieferte Datei. |
installation_mismatch |
Lizenz und Installations-Volume gehören nicht zusammen. Fordern Sie für die aktuelle Identität eine neue Lizenz an oder stellen Sie das zusammengehörige Paar wieder her. |
Ein später atomar eingespielter gültiger Ersatz beendet die Laufzeitstörung innerhalb von fünf Sekunden. Prüfen Sie zusätzlich die Anwendungslogs mit ./deploy/production-compose.sh logs -f werkspur. Geben Sie private Installations- oder Signierschlüssel nie in Logs, Tickets oder Chatnachrichten weiter.
Umzug und Wiederherstellung
Bei einem geplanten Serverumzug erzeugen Sie auf dem neuen Server ein neues license-state-Volume, führen dort license-request aus und lassen eine neue Lizenz ausstellen. Kopieren Sie nicht nur die alte Lizenzdatei; sie passt nicht zur neuen Identität. Nehmen Sie das alte System entsprechend Ihrer vertraglichen Vereinbarung außer Betrieb.
Für Disaster Recovery derselben logischen Installation sichern und restaurieren Sie zusammen:
- Datenbank-Dump und denselben
FOUNDRY_SECRET_KEYwie unter Backup & Wiederherstellung, - das vollständige persistente
license-state-Volume und - die dazugehörige
deploy/license/license.json.
Ein Datenbank-Dump enthält die beiden Lizenzartefakte nicht. Sichern Sie beide zusammen mit den Datenbank-Dumps:
docker run --rm -v werkspur-prod_license-state:/state -v "$PWD/deploy/backups":/backup \
alpine tar -czf /backup/license-state.tgz -C /state .
cp deploy/license/license.json deploy/backups/license.json
Exportieren Sie das Volume nach der ersten Installationsanfrage; die Lizenzdatei sichern Sie nach jeder Verlängerung erneut. Bewahren Sie beide Dateien zusammen mit den Datenbank-Dumps getrennt vom Server auf.
Bei der Wiederherstellung spielen Sie beide Artefakte ein, bevor die Anwendung zum ersten Mal startet:
docker volume create werkspur-prod_license-state
docker run --rm -v werkspur-prod_license-state:/state -v "$PWD/deploy/backups":/backup \
alpine tar -xzf /backup/license-state.tgz -C /state
mkdir -p deploy/license
install -m 0644 deploy/backups/license.json deploy/license/license.json
Fehlt das Installations-Volume, benötigen Sie eine neue Anfrage und eine neue Lizenz; die alte license.json allein startet die Installation nicht. Testen Sie die Wiederherstellung regelmäßig und schützen Sie die private Installationsidentität wie einen Schlüssel.
docker compose down --volumes und das Entwicklungskommando make dev-reset löschen das Volume license-state und damit die Installationsidentität unwiederbringlich. Verwenden Sie auf einem Produktivsystem zum Stoppen nur make production-down; dieses Kommando erhält alle Volumes.
Grenzen der Offline-Lizenz
Ohne Online-Verbindung kann der Anbieter eine bereits ausgegebene Lizenz vor valid_until nicht technisch widerrufen; ein Widerruf ist bis dahin vertraglich. Wer den Kundenhost vollständig kontrolliert, kann Binärdateien verändern oder Lizenzdatei und Installations-Volume gemeinsam klonen. Auch eine zurückgestellte Systemuhr lässt sich ohne vertrauenswürdige Hardware oder Online-Zeitquelle nicht sicher verhindern. Die Offline-Lizenz erschwert daher versehentliches oder einfaches Kopieren, ist aber kein perfekter Kopierschutz. Der Zugang zu neuen Software-Images wird getrennt über den privaten Release-Kanal gesteuert.