Sentinel API v1

從第一個 API 呼叫到正式環境

Windows 11 · First run

第一次裝 Docker,也能收到第一則 Event

從乾淨的 Windows 11 開始:確認來源、啟用 WSL 2 backend 與 Docker Desktop,再以一個原生 PowerShell 指令跑通 Source → Monitor → JPEG → Event → 圖片證據。首跑不需要 Ubuntu、攝影機、GPU、雲端帳號或 Python;Ubuntu 只供選用的 POSIX 路徑。

1 command

原生 PowerShell

0

攝影機與 GPU

loopback

金鑰只送往本機

這裡不會再出現一個使用者登入畫面:网站 Account 负责组织核准与 Source Kit/license 存取。PowerShell Quickstart 会在本机产生 Sentinel API key 并自动完成 smoke test;使用者不需要把它贴进 Sentinel。之后只有第三方系统呼叫 /v1 时才使用这个 key。若使用桌面 App,则第一次打开时贴入网站 Account 页的 license key。
先認清兩種 shell:在 PowerShell 執行下方只限子程序的 powershell.exe 指令。在 Ubuntu/WSL 才執行 ./quickstart.sh、export、chmod 或 source。不要把 Bash 指令貼進 PowerShell,也不要變更使用者/機器 execution policy。

0. 開始前

Windows 與硬體

64-bit Windows 11;mock 首跑建議至少 8 GB RAM。磁碟沒有通用的 4 GB 保證:下載前請依已驗證 release manifest 的 Source Kit、Docker Desktop、精確 image 大小、選用的模型快取與證據保留量加總,並為 Windows 與容器執行保留充足餘裕。工作管理員 → 效能 → CPU 必須顯示 Virtualization: Enabled。

授權的 Source Kit

目前沒有匿名公開 image/source download。向供應方取得 archive、SHA-256 與 release/source revision;不要改用非官方 repo。

先確認 Docker Desktop Windows 系統需求與授權條款。Windows Server 不是本指南的支援路徑。

1. 驗證 Source Kit

供應方必須從已認證管道提供 archive、64 字元 SHA-256 與 revision。替換下列值;不一致就停止,不要解壓縮或執行。

$Kit = Resolve-Path "$HOME\Downloads\Sentinel-Monitor-source-kit.zip"
$ExpectedSha256 = "paste-the-supplied-64-character-sha256-here"
$ActualSha256 = (Get-FileHash -LiteralPath $Kit -Algorithm SHA256).Hash.ToLowerInvariant()
if ($ActualSha256 -ne $ExpectedSha256.ToLowerInvariant()) {
  throw "Source-kit SHA-256 mismatch. Do not run this archive."
}

解壓後再比較 release manifest 或 git rev-parse HEAD。沒有 out-of-band checksum/revision 的 archive 無法獨立驗證,應要求補齊。

2. 啟用 WSL 2 backend

以系統管理員身分開啟 PowerShell:

wsl --install --no-distribution

重新開機,再回到系統管理員 PowerShell。原生 PowerShell Quickstart 不需要安裝 Linux distro;只有稍後选择 POSIX 路徑才安裝 Ubuntu。

wsl --update
wsl --set-default-version 2
wsl --version
wsl --status

若目前 Windows build 不支援 --no-distribution,先依 Microsoft 指南完成 WSL 更新;安装 Ubuntu 也可继续,但不是原生路徑的必要条件。完整例外處理請看 Microsoft WSL 安裝指南.

3. 安裝並啟動 Docker Desktop

  1. 只從 Docker 官方 Windows 安裝頁.
  2. 一般使用者選擇 per-user 與 WSL 2 backend。
  3. 從開始功能表開啟 Docker Desktop;安裝完成不代表 Engine 已啟動。
  4. 等待 Engine running,並確認 General → Use the WSL 2 based engine。
  5. 只有要在 Ubuntu 內執行 POSIX 腳本時,才到 Resources → WSL Integration 啟用該 distro,再 Apply & restart;原生 PowerShell 路徑跳過。

若看不到 WSL Integration,從 Docker tray 切換為 Linux containers。不要在 Ubuntu 另裝第二套 Docker Engine;官方說明衝突風險.

docker version
docker compose version
docker info --format '{{.OSType}}'

docker version 要有 Client 與 Server,OSType 必須是 linux。Compose 是 docker compose(中間有空格),不需另裝舊版 docker-compose。

4. 原生 PowerShell Quickstart

把已驗證 kit 解壓到 C:\Users\you\Sentinel-Monitor 之類的個人目錄。避免 Program Files、OneDrive、網路磁碟,並確認 backend、frontend、deploy 與 docs 都存在。

Set-Location "$HOME\Sentinel-Monitor\deploy\api"
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\quickstart.ps1

它會驗證 Linux Docker Engine、建立只限目前使用者的 .env、只啟動 api + mock-model、等待 readiness,再執行不依賴 Python 的完整第一則 Event 與 SHA-256 驗證。

API readiness passed.
PASS: evt_... -> ...sentinel-first-event-powershell.jpg (... bytes)
Quickstart complete. The API node remains running at http://127.0.0.1:8000.
Quickstart 不會印出 API key,也不會採用繼承的遠端 SENTINEL_BASE_URL;它只從已驗證 port 推導 127.0.0.1。不要分享 .env 或含 secret 的截圖。

只做 configuration preflight,不啟動容器(若缺少 .env,會安全建立它):

powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\quickstart.ps1 -PreflightOnly

5. 驗收

docker compose ps
curl.exe --fail http://127.0.0.1:8000/healthz
curl.exe --fail http://127.0.0.1:8000/readyz

兩者必須是 HTTP 200。接著開啟 http://127.0.0.1:8000/v1/docs.

6. 繼續整合,不把 key 放進指令列

Quickstart 的子程序不會修改父層 PowerShell。後續呼叫時,從 ACL 限制的 .env 只載入目前 shell,以 PowerShell HTTP client 送出,再立即移除環境變數:

$ApiKeyLine = Get-Content -LiteralPath .\.env |
  Where-Object { $_.StartsWith("SENTINEL_API_KEY=") } |
  Select-Object -First 1
if (-not $ApiKeyLine) { throw "SENTINEL_API_KEY is missing from .env" }

$env:SENTINEL_API_KEY = $ApiKeyLine.Substring("SENTINEL_API_KEY=".Length)
try {
  $Headers = @{ Authorization = "Bearer $env:SENTINEL_API_KEY" }
  Invoke-RestMethod -Uri "http://127.0.0.1:8000/v1/system" -Headers $Headers
} finally {
  Remove-Item Env:SENTINEL_API_KEY -ErrorAction SilentlyContinue
  Clear-Variable Headers, ApiKeyLine -ErrorAction SilentlyContinue
}
不要印出 key、貼到 Swagger UI、存進 shell history,或把 .env 放進支援檔。

POSIX 腳本:只在 Ubuntu/WSL

直接操作 shell scripts 時,把另一個 checkout 放到 ~/Sentinel-Monitor(不要用 /mnt/c),在 Ubuntu 安裝 Python 3,再執行:

cd ~/Sentinel-Monitor
chmod +x deploy/api/*.sh deploy/api/recovery/*.sh
cd deploy/api
./quickstart.sh

不要用 PowerShell、Command Prompt、Git Bash 或按兩下方式執行這條路徑。

常見問題

Script 被封鎖

重新驗證 checksum/revision。乾淨 Windows 若仍是 Restricted,使用上方只限該子程序的 powershell.exe -ExecutionPolicy Bypass;不要變更使用者/機器政策。Group Policy 封鎖時找管理員核准。

找不到 docker

重新開啟 PowerShell,啟動 Docker Desktop,並等到 Engine running。

Windows containers

Docker tray → Switch to Linux containers;OSType 必須是 linux。

Port 8000 被佔用

用 Get-NetTCPConnection 找到已知程式,或暫設 $env:SENTINEL_PORT = "18000"。

readyz 是 503

執行 docker compose ps 與 docker compose logs --tail=100 api mock-model;不要用重新啟動迴圈掩蓋 false check。

WSL 卡住

關閉 WSL 工作後執行 wsl --shutdown。不要用 wsl --unregister 當作 reset。

GPU 事實,不做模糊承諾

mock 首跑不需要 GPU。deploy/api 的 local_* 是 NVIDIA/vLLM 容器路徑;Windows 上需要 WSL 2、支援的 NVIDIA GPU、最新版 WSL kernel 與支援 WSL 的 NVIDIA Windows driver。

Docker 目前只支援 WSL2 + NVIDIA GPU-PV. AMD/Intel 與原生 DirectML 不是這個 Docker vLLM profile。NVIDIA 也要求不要在 WSL 裝 Linux display driver;安裝 Windows driver.

LAN、TLS 與 Windows Firewall

首跑保持 127.0.0.1,不要做 router forwarding 或開放 Public network。同機 TLS proxy 應保持 loopback;遠端 proxy 才設定 SENTINEL_ALLOW_LAN=1,並把 SENTINEL_BIND_HOST 綁到這台 PC 的精確 private management IP(不要用 0.0.0.0)。防火牆只允許 proxy IP/CIDR、使用精確 CORS;client 絕不能直接連 8000 或讓 Bearer key 走明文 LAN。

停止、開機恢復與解除安裝

docker compose stop

stop 會保留 named volumes。不要加 --volumes/-v,也不要使用 docker system prune --volumes。

restart: unless-stopped 不能啟動 Docker Desktop。Windows 重新開機後,只有 Docker Desktop 在登入後啟動,容器才會恢復。可開啟 Start Docker Desktop when you sign in,再用真實 reboot + readyz 驗收;這不等於無人登入前恢復。

解除安裝 Docker Desktop 會刪除 containers、images 與 volumes;這是 Docker 的明確警告. 必須先把經過 verify 的 volume backup、精確 API image tar/checksum 與 kit revision 複製到加密、受控的外部/off-PC 儲存,並把 .env 分開保存在核准的密鑰管理系統。wsl --unregister 也會永久刪除 distro;查看 Microsoft 命令語意.

乾淨 Windows 的完成標準

WSL 是 version 2;Docker 是 Linux OSType;Compose v2 與 hello-world 通過。
Source kit SHA-256/revision 與認證值一致。
.\quickstart.ps1 不安裝 Python 即可結束於 PASS: evt_...。
healthz/readyz 為 200,/v1/docs 可開啟,UI 從未被啟動或依賴。
繼承的不同 SENTINEL_BASE_URL 沒有收到 key。
真實 reboot/login 後 Docker Desktop 啟動,readyz 恢復。
更新/解除安裝前已驗證 restore,並有外部/off-PC backup。