Hub: nightly retention of resolved findings, the submission log and silent instances; delete-customer erases a customer's data and blocks its licenses; persistent data protection keys and trusted reverse proxies. Docker image and compose file with PostgreSQL. The agent refuses to send the license to a non-https hub. Documentation for the hub, for data processing (GDPR basis for a data processing agreement) and the README roadmap for phase 3. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E3EExwndy8Z22EK2Qpt6BK
3.4 KiB
SQLInsight Hub (for SEOSoft)
SQLInsight Hub modtager fund fra betalende kunders agenter og samler dem i PostgreSQL. Portalen giver supporten overblik over kunder, kritiske fund, de mest udbredte problemer på tværs af kunder, supportsager og licenser. Hubben kan også servere opdateringsfeedet.
Kunder installerer ikke hubben. Den kører hos SEOSoft.
Krav
- PostgreSQL 14 eller nyere (testet med 17)
- .NET 10 runtime (ASP.NET Core), eller Docker
- En reverse proxy med TLS foran. Agenter sender kun til https-adresser, fordi licensen er deres adgangsnøgle.
Med Docker Compose
cd deploy/hub
export HUB_DB_PASSWORD='<langt tilfældigt kodeord>'
docker compose up -d
docker compose exec hub dotnet SQLInsight.Hub.dll add-staff <brugernavn> "<fulde navn>" # adgangskode på stdin, mindst 12 tegn
Ret docker-compose.yml:
SQLInsight__Hub__TrustedKeys__<kid>: den offentlige nøgle, licenserne er signeret med (frakeygen).SQLInsight__Hub__KnownProxies__0: reverse proxyens adresse, så login-begrænsningen ser klientens rigtige IP.
Volumen hubdata indeholder nøglerne til login-cookies (/data/keys) og opdateringsfeedet (/data/feed). Tag backup af den og af PostgreSQL.
Uden Docker
dotnet publish src/SQLInsight.Hub -c Release -o /opt/sqlinsight/hub
appsettings.json:
{
"ConnectionStrings": { "Hub": "Host=db01;Database=sqlinsight_hub;Username=sqlinsight_hub;Password=…" },
"SQLInsight": {
"Hub": {
"TrustedKeys": { "k20260929": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE…" },
"DataProtectionKeysPath": "/var/lib/sqlinsight-hub/keys",
"UpdateFeedPath": "/var/lib/sqlinsight-hub/feed",
"KnownProxies": [ "10.0.0.5" ],
"Retention": { "ResolvedFindings": "365.00:00:00", "Submissions": "90.00:00:00", "SilentInstances": "180.00:00:00" }
}
}
}
Hubben kan køre som Windows-tjeneste eller systemd-enhed (Type=notify) på samme måde som agenten. Databaseskemaet oprettes og opgraderes ved start.
Licenser
# Én gang: nøglepar. Den private nøgle forlader aldrig SEOSofts maskine og må aldrig i git.
dotnet run --project tools/SQLInsight.LicenseTool -- keygen --out ~/sqlinsight-keys
# Pr. kunde
dotnet run --project tools/SQLInsight.LicenseTool -- issue --key ~/sqlinsight-keys/sqlinsight-k20260929.private.pem \
--kid k20260929 --customer "Kunde A/S" --plan Professional --expires 2027-09-30 --instances 10
Den offentlige nøgle lægges i src/SQLInsight.Licensing/trusted-keys.json før en release, så agenterne kan verificere licensen offline. Hubben får den via TrustedKeys. Licenser kan spærres i portalen under Licenser. Agenten får så 403 ved næste afsendelse.
Opbevaring og sletning
Hver nat sletter hubben:
| Data | Efter |
|---|---|
| Løste fund (medmindre de hører til en åben supportsag) | Retention:ResolvedFindings, 365 dage |
| Log over modtagelser | Retention:Submissions, 90 dage |
| Instanser, der ikke har rapporteret, med deres fund | Retention:SilentInstances, 180 dage |
Når en aftale ophører, eller en kunde beder om sletning:
dotnet SQLInsight.Hub.dll delete-customer "Kunde A/S" --confirm
Alle kundens instanser, fund, regelstatus, modtagelser og supportsager slettes. Licenserne spærres, så agenterne ikke kan sende igen, og kunden omdøbes til "Slettet kunde #id". Se også databehandling.md.