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
- 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
108 lines
4.8 KiB
Markdown
108 lines
4.8 KiB
Markdown
# 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](https://dotnet.microsoft.com/download/dotnet/10.0) 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](legacy-versions.md))
|
|
|
|
## 2. Repository-databasen
|
|
|
|
```sql
|
|
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`](../db/permissions/grant-least-privilege.sql) på hver instans efter at have oprettet agentens login. Agenten bliver aldrig sysadmin.
|
|
|
|
## 4. Agenten som Windows-tjeneste
|
|
|
|
```powershell
|
|
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:
|
|
|
|
```powershell
|
|
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:
|
|
```powershell
|
|
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.
|
|
|
|
```powershell
|
|
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:
|
|
|
|
```json
|
|
"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:
|
|
|
|
```powershell
|
|
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.
|