Arbeitsstand gesichert: Deploymentcenter-Integration (D-0 bis D-5) und Einfenster-Shell
Sicherungscommit vor dem Aufraeumen des Repos, damit nachvollziehbar bleibt, welcher Stand vor der Bereinigung galt. Build gruen, 476 Tests gruen. Zwei Straenge, die sich ueber .csproj, Program.cs und appsettings.json ueberschneiden und darum gemeinsam abgelegt werden: Deploymentcenter-Integration (P3c, Plan D-0 bis D-5 code-seitig fertig): - Deploymentcenter.Client 2.5.0 als lokales Paket, Source-Mapping erweitert - DeploymentcenterOptions, DeploymentcenterErrorReporter, LicenseGate/LicenseCli - WatchdogHeartbeatService auf die Deploymentcenter-API umgestellt (version, os, checks, metrics, status stopped) - Security: MasterKeyResolver, SecretRedactor, FilePermissions - Directory.Build.props mit zentraler Version 0.1.0 (Packager-Versionsdisziplin) - deploy/: Packager-Vorlage und systemd-Unit; echte Zugangsdaten bleiben ueber .gitignore aussen vor - setup.json fuer die Erstinstallation - UMSETZUNGSPLAN-Deploymentcenter-Integration.md; ANALYSE-Linux-Portierung.md verweist auf den neuen Plan Einfenster-Shell (UI-Redesign): - ShellWindow + ShellNavModel als Seitenleisten-Shell - WindowMenuBar und WindowMenuModel entfallen - Modul- und Kernfenster auf die Shell-Einbettung angepasst Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"_comment": "Kopie als packager.config.json in diesem Ordner anlegen und ausfuellen. packager.config.json ist per .gitignore ausgeschlossen. Alternativ ueber Umgebungsvariablen: DC_FTP_HOST, DC_FTP_PORT, DC_FTP_USER, DC_FTP_PASS, DC_API_URL, DC_TOKEN. Siehe docs/umsetzungsplaene/UMSETZUNGSPLAN-Deploymentcenter-Integration.md, Schnitt D-4.",
|
||||
|
||||
"ftpHost": "ftp.example.com",
|
||||
"ftpPort": 21,
|
||||
"ftpUser": "ftp-user",
|
||||
"ftpPass": "ftp-password",
|
||||
"ftpRemoteBaseDir": "/public_html/releases",
|
||||
|
||||
"apiBaseUrl": "https://dc.mhdf.de",
|
||||
"_apiToken_comment": "Token mit dem Recht updateservice:publish. Im Deploymentcenter-WebUI unter Token-Verwaltung erzeugen - NICHT das Dev-Sub-Token aus appsettings.Local.json wiederverwenden (das hat nur watchdog:ping/bugtracker:report).",
|
||||
"apiToken": "",
|
||||
|
||||
"_excludePatterns_comment": "Kommt gar nicht ins Paket. D-6 des Umsetzungsplans: appsettings.Local.json enthaelt das MySQL-Passwort im Klartext, server_settings.xml den Watchdog-Token und den Lizenzschluessel, master.key den AES-Master-Key aller verschluesselten Secrets. Der Packager bricht seit Version 2.5.0 zusaetzlich bei erkannten Zugangsdaten ab (Datei- UND Inhaltspruefung) - diese Liste ist die erste, nicht die einzige Verteidigungslinie.",
|
||||
"excludePatterns": [
|
||||
"appsettings.Local.json",
|
||||
"appsettings.*.Local.json",
|
||||
"*.local.json",
|
||||
"master.key",
|
||||
"openrouter.key",
|
||||
"server_settings.xml",
|
||||
"*.pfx",
|
||||
"*.key",
|
||||
"*.pem",
|
||||
"*.p12",
|
||||
"*.db",
|
||||
"*.sqlite",
|
||||
"*.sqlite3",
|
||||
"Logs/**",
|
||||
"*.pdb",
|
||||
"*.xml",
|
||||
"*.log",
|
||||
"scratch/**"
|
||||
],
|
||||
|
||||
"_preservePatterns_comment": "Wird ausgeliefert, ersetzt am Ziel aber niemals eine vorhandene Datei. appsettings.json enthaelt den Deploymentcenter-Konfigurationsblock (BaseUrl, ProjectSlug, ...) - eine Erstinstallation bekommt die Vorlage, ein Update laesst die vor Ort eingerichteten Werte in Ruhe.",
|
||||
"preservePatterns": [
|
||||
"appsettings.json"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
# systemd-Unit für den kopflosen Linux-Betrieb (--headless, Stufe L2 der Linux-Portierung).
|
||||
# Der Deploymentcenter-Installer legt selbst keinen Dienst an (siehe SETUP_INTEGRATION_GUIDE §7,
|
||||
# "Dienstregistrierung fehlt") - diese Datei ist unser Ersatz dafür.
|
||||
#
|
||||
# Einrichtung:
|
||||
# sudo cp deploy/polytrader.service /etc/systemd/system/polytrader.service
|
||||
# sudo systemctl daemon-reload
|
||||
# sudo systemctl enable --now polytrader
|
||||
#
|
||||
# WICHTIG (D-11 aus dem Umsetzungsplan): server_settings.xml wird relativ zum Arbeitsverzeichnis
|
||||
# geladen, master.key dagegen relativ zur ausführbaren Datei (AppContext.BaseDirectory). Beides
|
||||
# fällt nur zusammen, wenn WorkingDirectory exakt das Installationsverzeichnis ist - deshalb hier
|
||||
# ausdrücklich gesetzt statt dem systemd-Standard (Root des Dienstbenutzers) überlassen. Eine
|
||||
# abweichende WorkingDirectory liest server_settings.xml aus dem falschen Ordner, ohne dass das
|
||||
# irgendwo auffällt (ServerSettings.Load() legt bei fehlender Datei kommentarlos eine neue an).
|
||||
|
||||
[Unit]
|
||||
Description=PolyTrader (Trading- und Analyse-Suite fuer Polymarket)
|
||||
After=network-online.target mysql.service
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
# Anpassen: Installationsverzeichnis und Dienstkonto. Nicht als root betreiben - das
|
||||
# Installationsverzeichnis (inkl. master.key, server_settings.xml, data.db) gehört diesem Konto.
|
||||
User=polytrader
|
||||
Group=polytrader
|
||||
WorkingDirectory=/opt/polytrader
|
||||
ExecStart=/opt/polytrader/PolyTrader.App.Avalonia --headless
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
|
||||
# Absturz vom sauberen Beenden unterscheiden: SIGTERM statt SIGKILL, mit Frist fuer den
|
||||
# geordneten Shutdown-Pfad (offene Positionen, Watchdog-"stopped_graceful", DB-Flush).
|
||||
KillSignal=SIGTERM
|
||||
TimeoutStopSec=45
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Reference in New Issue
Block a user