sqlinsight-pro/docs/installation.md
Claude 5bb1c37fef
Some checks are pending
CI / Integration (mcr.microsoft.com/mssql/server:2019-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2022-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2017-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2025-latest) (push) Blocked by required conditions
CI / Build og unit tests (push) Waiting to run
Fase 1: on-prem web UI (IIS or Windows service), light design system
- ASP.NET Core Blazor static SSR: overview with KPI tiles, instance page
  (findings, CPU/batch/PLE trends, top waits, file latency, blocking,
  deadlocks with .xdl download, not-measurable rules, resolved), finding
  detail with explanation, evidence, fix script and references
- Light-first design (sidebar, cards, self-hosted Inter, teal accent),
  optional dark theme via toggle; strict CSP, no inline styles
- Windows authentication (Negotiate/IIS) with optional group restriction;
  refuses to run without authentication outside Development
- Hosting: IIS (in-process ASP.NET Core Module), Windows service with
  Kestrel, or systemd; web reads the repository with db_datareader only
- docs/installation.md for repository, permissions, agent and web
- Fix: CPU used by other processes is not derived on Linux (SystemIdle is
  unreliable there); deadlocks are not re-reported or stored twice after
  an agent restart; Dapper sends datetime2 so time comparisons are exact

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3EExwndy8Z22EK2Qpt6BK
2026-09-29 06:58:51 +00:00

4.8 KiB

Installation

SQLInsight Pro består af to programmer, som begge installeres hos jer (on-prem):

Del Hvad den gør Kører som
SQLInsight Agent Overvåger SQL Server-instanserne og gemmer fund i repository-databasen Windows-tjeneste (eller systemd på Linux)
SQLInsight Web Lokalt websted, der viser fund, trends og anbefalinger IIS-websted eller selvstændig Windows-tjeneste med indbygget webserver (Kestrel)

Begge bruger en repository-database på en SQL Server 2016+-instans, der helst ikke er en af de overvågede.

Installationstrinene er skrevet ud fra Microsofts dokumentation for ASP.NET Core-hosting. De er endnu ikke gennemtestet på en ren Windows Server. Meld gerne afvigelser tilbage som issue.

1. Forudsætninger

  • Windows Server 2016 eller nyere (eller Linux til agenten)
  • .NET 10 Runtime på agent-serveren; ASP.NET Core Hosting Bundle på webserveren, hvis IIS bruges
  • To tjenestekonti, gerne gMSA: én til agenten og én til web-UI'et
  • Til SQL Server 2000: en Windows-agent med en ODBC-driver, der understøtter 2000 (se legacy-versions.md)

2. Repository-databasen

CREATE DATABASE SQLInsight;
GO
USE SQLInsight;
CREATE LOGIN [DOMÆNE\svc-sqlinsight-agent$] FROM WINDOWS;
CREATE USER [DOMÆNE\svc-sqlinsight-agent$];
ALTER ROLE db_owner ADD MEMBER [DOMÆNE\svc-sqlinsight-agent$];   -- agenten opretter og opgraderer skemaet

CREATE LOGIN [DOMÆNE\svc-sqlinsight-web$] FROM WINDOWS;
CREATE USER [DOMÆNE\svc-sqlinsight-web$];
ALTER ROLE db_datareader ADD MEMBER [DOMÆNE\svc-sqlinsight-web$]; -- web-UI'et læser kun

Agenten opretter tabellerne selv ved første start.

3. Rettigheder på de overvågede instanser

Kør db/permissions/grant-least-privilege.sql på hver instans efter at have oprettet agentens login. Agenten bliver aldrig sysadmin.

4. Agenten som Windows-tjeneste

dotnet publish src/SQLInsight.Agent -c Release -r win-x64 --self-contained false -o C:\Program Files\SQLInsight\Agent

Ret C:\Program Files\SQLInsight\Agent\appsettings.json: SQLInsight:Repository:ConnectionString og listen SQLInsight:Instances. Opret derefter tjenesten:

sc.exe create "SQLInsight Agent" binPath= "\"C:\Program Files\SQLInsight\Agent\SQLInsight.Agent.exe\"" obj= "DOMÆNE\svc-sqlinsight-agent$" start= delayed-auto
sc.exe description "SQLInsight Agent" "Overvåger SQL Server og gemmer fund i SQLInsight-repositoriet."
sc.exe start "SQLInsight Agent"

For en gMSA angives ingen adgangskode. Loggen kan ses i Windows' Event Viewer under Application.

5a. Web-UI'et på IIS

  1. Installér ASP.NET Core Hosting Bundle for .NET 10, og kør iisreset.
  2. Publicér:
    dotnet publish src/SQLInsight.Web -c Release -o C:\inetpub\SQLInsight
    
    Publiceringen danner en web.config med ASP.NET Core Module (in-process).
  3. Opret en application pool med .NET CLR version = No Managed Code, og sæt dens identitet til DOMÆNE\svc-sqlinsight-web$.
  4. Opret et websted, der peger på C:\inetpub\SQLInsight, med en HTTPS-binding og et certifikat fra jeres interne CA.
  5. Under Authentication: slå Windows Authentication til og Anonymous Authentication fra.
  6. Ret appsettings.json: SQLInsight:Repository:ConnectionString (Integrated Security, så app pool-identiteten bruges), eventuelt SQLInsight:Web:AllowedGroups, fx ["DOMÆNE\\SQL-Admins"].

5b. Web-UI'et som selvstændig Windows-tjeneste (uden IIS)

Web-UI'et har sin egen webserver (Kestrel) og kan køre som tjeneste på en server uden IIS.

dotnet publish src/SQLInsight.Web -c Release -r win-x64 --self-contained false -o "C:\Program Files\SQLInsight\Web"

Tilføj et HTTPS-endpoint i appsettings.json med et certifikat fra maskinens certifikatlager:

"Kestrel": {
  "Endpoints": {
    "Https": {
      "Url": "https://*:8443",
      "Certificate": { "Subject": "sqlinsight.domæne.local", "Store": "My", "Location": "LocalMachine" }
    }
  }
}

Opret tjenesten og en SPN, så Kerberos-login virker:

sc.exe create "SQLInsight Web" binPath= "\"C:\Program Files\SQLInsight\Web\SQLInsight.Web.exe\"" obj= "DOMÆNE\svc-sqlinsight-web$" start= delayed-auto
setspn -S HTTP/sqlinsight.domæne.local DOMÆNE\svc-sqlinsight-web$
sc.exe start "SQLInsight Web"

Åbn porten i Windows Firewall for de brugere, der skal se UI'et.

Linux (systemd)

Begge programmer understøtter systemd (Type=notify). Windows-login på Linux kræver en Kerberos keytab; se Microsofts dokumentation for Negotiate-autentificering på Linux.

Opdatering

Stop tjenesten (eller app poolen), kopiér de nye filer ind uden at overskrive appsettings.json, og start igen. Agenten opgraderer repository-skemaet selv.