Zum Inhalt springen

Installation & Betrieb

buzzle setzt auf bewährte, erprobte Technologien – kein exotischer Stack, sondern eine solide Basis, die sich zuverlässig betreiben und skalieren lässt. Diese Seite richtet sich an Teams, die buzzle selbst betreiben oder eine Installation vorbereiten, und beschreibt Architektur, Systemvoraussetzungen und die wichtigsten Konfigurationsabschnitte.

buzzle ist eine .NET-Webanwendung, die mehrere spezialisierte Datenspeicher kombiniert – jeder für die Aufgabe, die er am besten erfüllt:

KomponenteTechnologieAufgabe
Backend / API.NET 8 (ASP.NET Core)Geschäftslogik, REST-API, Authentifizierung
FrontendVue 3 (als SPA gehostet)Bedienoberfläche, auch als npm-Paket verfügbar
Relationale DBSQL ServerStammkonfiguration, Migrationen, Strukturen
DokumentdatenbankMongoDBBusiness-Object-Werte und -Inhalte
SucheElasticsearchVolltext, Filter, Suchindex-Profile
Cache (optional)Redisverteilter Cache (sonst In-Memory)
WorkflowsElsaJobs und Automatisierung
EchtzeitSignalRBenachrichtigungen und Job-Fortschritt

Datenbank-Schemaänderungen werden über Migrationen automatisch beim Start angewendet – ein Deployment aktualisiert das Schema selbsttätig. Die API ist über Swagger / OpenAPI dokumentiert und direkt erkundbar.

  • .NET 8 Runtime (Hosting des Backends)
  • SQL Server (z. B. SQL Express für Test/Demo)
  • MongoDB
  • Elasticsearch
  • Redis – optional, für verteiltes Caching im Mehrserver-Betrieb
  • Speicherorte für Dateien und das CDN (Dateisystempfade oder angebundener Storage)

Die Anwendung wird über appsettings.json (bzw. Umgebungsvariablen) konfiguriert. Die wichtigsten Abschnitte:

{
"ConnectionStrings": {
"Pim_Database": "Server=…;Database=Buzzle.Pim;Trusted_Connection=True;…",
"Pim_MongoDB": "mongodb://<user>:<password>@<host>:27017/",
"Redis": ""
}
}

Redis leer lassen, um den In-Memory-Cache zu verwenden; ein gesetzter Wert aktiviert den verteilten Redis-Cache.

{
"JWT": {
"ValidAudience": "https://pim.example.com",
"ValidIssuer": "https://pim.example.com",
"Secret": "<langes-zufälliges-geheimnis>",
"TokenValidityInMinutes": 180,
"RefreshTokenValidityInDays": 7
}
}

TokenValidityInMinutes steuert die Lebensdauer des Access-Tokens, RefreshTokenValidityInDays die des Refresh-Tokens. Das Secret gehört in einen sicheren Secret-Store und nie ins Repository.

{
"Search": {
"ElasticBaseUrl": "http://localhost:9200",
"ElasticUsername": "elastic",
"ElasticPassword": "<passwort>",
"MaxResultWindow": 200000,
"TotalFieldsLimit": 10000,
"EnableRequestErrorLogging": true
}
}

MaxResultWindow und TotalFieldsLimit bestimmen, wie gross Ergebnismengen und Indexschemata werden dürfen – relevant für sehr breite Sortimente.

{
"GlobalSearchConfiguration": {
"Products": {
"Name": "products",
"QueryFieldBoosts": { "bo_name": 2 }
}
}
}

Über QueryFieldBoosts lassen sich einzelne Felder in der globalen Suche höher gewichten (siehe Suche).

{
"FileSystem": { "RootFolderForFiles": "…/Dateien" },
"Cdn": {
"StoragePath": "…/CdnStorage",
"UrlBasePath": "https://pim.example.com/api/cdn"
}
}

Hintergrund-Jobs (z. B. Währungskurs-Import) werden über Job-Konfigurationen als JSON eingebunden und laufen über die Workflow-Engine. Das Job-Log lässt sich auf Datei oder andere Provider umstellen.

  • Migrationen laufen automatisch beim Start; ein Deployment aktualisiert das Schema selbsttätig.
  • Skalierung: Im Mehrserver-Betrieb sollte Redis als gemeinsamer Cache aktiv sein.
  • Logging: konfigurierbar über NLog, inkl. separater Konfiguration für Container-Produktion.
  • CORS: in der Entwicklung offen, für Produktion gezielt einschränken.
  • Bewährter Technologie-Stack statt Speziallösungen
  • Automatische Migrationen für reibungslose Updates
  • Skalierbar vom Einzelserver bis zum Cluster mit Redis
  • Transparent über Swagger, Logging und Job-Übersicht
  • .NET-8-Backend mit SQL Server, MongoDB, Elasticsearch und optional Redis
  • Konfiguration über appsettings.json: Verbindungen, JWT, Suche, CDN, Dateien, Jobs
  • Automatische DB-Migrationen, Swagger/OpenAPI, SignalR-Echtzeit
  • Produktiver Betrieb und Container-Setup gemeinsam mit bambit