So richten Sie den Dienst von Hand als Systemdienst ein
Unter Windows richtet das Installationspaket den Dienst ein. Ohne Paket – etwa für einen Testrechner oder unter Linux – richten Sie ihn so ein. Dasselbe Programm läuft als Konsolenprozess, Windows-Dienst oder systemd-Dienst und meldet Start und Stopp an die jeweilige Dienststeuerung.
Lösungsübersicht
Der Dienst nimmt unter der Windows-Dienststeuerung sein Programmverzeichnis als Inhaltsstamm
(appsettings*.json, ein relativer Speicherpfad); unter systemd gilt WorkingDirectory. Das Dienstkonto
braucht Lesezugriff auf Programm und Hauptschlüssel und Schreibzugriff auf den Datenordner mit dem
Verwaltungsspeicher.
Konfiguration, Hauptschlüssel, Berechtigungen des Datenordners und die Firewall-Regel richtet der Befehl
setup-host ein, derselbe, den das Installationspaket aufruft (siehe
Befehle am Server). Von Hand bleiben nur das
Kopieren der Dateien und das Registrieren des Dienstes.
Welches Dienstkonto. Das Installationspaket nimmt das virtuelle Konto
NT SERVICE\Wkl.Data.Gateway: Es braucht kein Kennwort, und seine Rechte gelten nur für diesen
Dienst. NT AUTHORITY\NetworkService geht ebenso, wird aber von vielen Diensten geteilt; was ihm der
Datenordner erlaubt, dürfen dann auch diese. Ein virtuelles Konto lässt sich erst auflösen, wenn der
Dienst registriert ist; deshalb wird der Dienst vor setup-host angelegt.
Umsetzung
Windows (PowerShell als Administrator)
Kopieren Sie die veröffentlichten Dateien in den Programmordner:
$program = Join-Path $env:ProgramFiles 'Wkl\Data Gateway' New-Item -ItemType Directory -Force $program | Out-Null Copy-Item -Recurse .\publish\* $program
Registrieren Sie den Dienst, noch ohne ihn zu starten:
sc.exe create Wkl.Data.Gateway binPath= "`"$program\dbgwsvc.exe`"" start= auto obj= "NT SERVICE\Wkl.Data.Gateway"
Richten Sie Konfiguration, Datenordner und Hauptschlüssel ein. Ohne
--certificatelauscht der Dienst nur aufhttp://127.0.0.1:8434; HTTPS ergänzen Sie danach nach HTTPS und Zertifikat:& "$program\dbgwsvc.exe" setup-host --program $program ` --data (Join-Path $env:ProgramData 'Wkl.Data.Gateway') --service-account 'NT SERVICE\Wkl.Data.Gateway'
Rückgabe
0. Der Befehl schreibtappsettings.Production.jsonin den Programmordner, legt den Datenordner mit Berechtigungen nur für Administratoren, System und das Dienstkonto an und erzeugtgeheim\hauptschluessel.key. Sichern Sie diese Datei außerhalb des Servers.- Registrieren Sie die Ereignisquelle, damit der Dienst ins Ereignisprotokoll schreibt (Windows PowerShell 5.1):
New-EventLog -LogName Application -Source Wkl.Data.Gateway. - Starten Sie den Dienst:
Start-Service Wkl.Data.Gateway. - Legen Sie den ersten Administrator an; siehe Den ersten Administrator anlegen.
- Prüfen Sie:
Invoke-RestMethod http://127.0.0.1:8434/health/liveantwortetHealthy;Get-Service Wkl.Data.GatewaymeldetRunning.
Linux
- Legen Sie ein Konto ohne Anmeldung an (
useradd --system --no-create-home wkl-gateway), kopieren Sie die Dateien der Linux-Version (linux-x64, vom Anbieter als eigenes Archiv geliefert; das Installationspaket enthält nur die Windows-Version) nach/opt/wkl/gatewayund geben Sie dem Konto Schreibrecht nur auf den Datenordner. Die Konfiguration schreiben Sie dort selbst nachappsettings.Production.json: mindestensKestrel:EndpointsundGateway:Storemit Pfad und Hauptschlüssel (siehe Konfiguration);setup-hostrichtet Linux nicht ein. Legen Sie die Unit-Datei
/etc/systemd/system/wkl-gateway.servicean:[Unit] Description=Wkl.Data.Gateway After=network-online.target [Service] Type=notify WorkingDirectory=/opt/wkl/gateway ExecStart=/opt/wkl/gateway/Wkl.Data.Gateway User=wkl-gateway [Install] WantedBy=multi-user.target
Ohne den Abschnitt
[Install]lehntsystemctl enabledie Unit ab.- Starten Sie mit
systemctl enable --now wkl-gateway; das Protokoll steht im Journal (journalctl -u wkl-gateway).
Hinweise
- Einen Ordner, den der Dienst selbst anlegt, dürfen nur das Dienstkonto und die Administratoren lesen; die Administratoren brauchen den Zugriff für die Befehle am Server.
- Aus der Konsole gestartet ändert sich am Verhalten nichts.
- Ohne registrierte Ereignisquelle läuft der Dienst weiter, schreibt aber nichts ins Ereignisprotokoll; siehe Fehlerbehebung.