158 lines
7.3 KiB
Markdown
158 lines
7.3 KiB
Markdown
# Sense Windows 安装与运行
|
||
|
||
本说明适用于 `sense-windows-amd64` 交付包。Sense 后端和管理网页来自冻结的 GoAdmin/go-admin-ui 基线;启动仍使用 GoAdmin Cobra 的 `migrate` 与 `server` 命令。Brain、Bell 不需要启动。
|
||
|
||
## 1. 准备环境
|
||
|
||
- Windows 10/11 或 Windows Server 2019 及以上,amd64。
|
||
- PostgreSQL 17;先由数据库管理员创建独立的 Sense 数据库和最小权限账号。
|
||
- 已审核版本与许可证的 Windows amd64 `mediamtx.exe`,放到 `bin\mediamtx.exe`。
|
||
- 备份、恢复时还需要 PostgreSQL 客户端的 `pg_dump.exe`、`pg_restore.exe`;可把目录加入 PATH,或配置 `SENSE_POSTGRES_BIN`。
|
||
|
||
交付包不包含 PostgreSQL、数据库数据、管理员默认密码、摄像头密码或客户配置。不要把包解压到所有用户都可写的共享目录。
|
||
|
||
## 2. 配置 production
|
||
|
||
编辑 `config\sense.env`。脚本只按 `NAME=value` 读取白名单字段,不会执行文件内容。值中可以包含 `#`、`&`、`;`、空格或 `=`;如首尾使用成对单/双引号,外层引号会被移除。
|
||
|
||
至少填写:
|
||
|
||
```dotenv
|
||
SENSE_DATABASE_URL=host=127.0.0.1 port=5432 user=sense password=请替换 dbname=sense sslmode=disable
|
||
SENSE_JWT_SECRET=请替换为至少32字符的随机值
|
||
SENSE_MEDIAMTX_MODE=managed
|
||
SENSE_MEDIAMTX_BINARY=bin\mediamtx.exe
|
||
SENSE_MEDIAMTX_CONFIG=config\mediamtx.yml
|
||
```
|
||
|
||
用 PowerShell 生成随机值,不要把输出写入工单、Wiki 或 Git:
|
||
|
||
```powershell
|
||
$bytes = New-Object byte[] 48
|
||
[Security.Cryptography.RandomNumberGenerator]::Fill($bytes)
|
||
[Convert]::ToBase64String($bytes)
|
||
```
|
||
|
||
同名的非空进程环境变量优先于 `sense.env`。这便于由服务管理器或秘密管理工具注入值;空进程变量不会覆盖文件值。脚本不会打印数据库连接串、JWT secret、Bootstrap token 或摄像头密钥。
|
||
|
||
运行启动前检查:
|
||
|
||
```bat
|
||
check-sense.bat
|
||
```
|
||
|
||
它会检查配置格式、HTTP 端口、PostgreSQL TCP 连接、数据库名、JWT 长度、网页文件和 MediaMTX 模式。`managed` 模式要求二进制与配置文件存在;`external` 模式要求本机 Control API 已可连接。production 不允许 `disabled`。
|
||
|
||
## 3. 启动、迁移与停止
|
||
|
||
首次及日常启动:
|
||
|
||
```bat
|
||
start-sense.bat
|
||
```
|
||
|
||
脚本先执行 `sense.exe migrate -c data\runtime\settings.yml`,成功后再执行 `sense.exe server -c ...`。迁移失败时不会启动 HTTP 服务。迁移会检查 PostgreSQL 数据库是否存在;脚本不会自动创建生产数据库。
|
||
|
||
`config\db.sql` 与 `config\pg.sql` 是冻结 GoAdmin 首次初始化所需的无秘密基线数据,必须和 `sense.exe` 同版本保留;删除它们会导致空库首次迁移失败。
|
||
|
||
浏览器访问 `http://127.0.0.1:18080/`。当前窗口按 `Ctrl+C` 可让 Sense 优雅停止,并请求停止由它启动的 MediaMTX。也可在另一管理员终端运行:
|
||
|
||
```bat
|
||
stop-sense.bat
|
||
```
|
||
|
||
停止脚本只会强制停止监听配置端口、且可执行文件确实位于当前交付包的 Sense 进程树;端口属于其他程序时会拒绝操作。日常维护优先在启动窗口按 `Ctrl+C` 完成优雅停止,窗口丢失或进程失去响应时再使用停止脚本。
|
||
|
||
只执行迁移或禁用启动时自动迁移:
|
||
|
||
```bat
|
||
migrate-sense.bat
|
||
start-sense.bat -SkipMigration
|
||
```
|
||
|
||
只有已完成备份并明确掌握版本状态时才使用 `-SkipMigration`。也可把 `SENSE_AUTO_MIGRATE=false` 放到外部进程环境中。
|
||
|
||
## 4. 创建首个管理员与修改密码
|
||
|
||
Sense 不提供生产默认管理员。首次初始化:
|
||
|
||
1. 生成至少 32 字符的一次性随机值,临时填入 `SENSE_BOOTSTRAP_TOKEN`。
|
||
2. 启动 Sense。
|
||
3. 在另一个终端运行 `initialize-admin.bat -Username admin`,按隐藏提示输入至少 6 位密码。
|
||
4. 成功后立即清空 `SENSE_BOOTSTRAP_TOKEN` 并重启 Sense。
|
||
|
||
Bootstrap 只允许在用户表为空时执行一次,token 通过请求头传递,不放在 JSON 或命令行中。不要把密码作为 bat 参数。
|
||
|
||
管理员登录后,在右上角头像进入“个人中心 → 修改密码”。密码至少 6 个字符;修改成功后重新登录。其他管理员的密码重置只能由授权管理员通过 GoAdmin 用户管理入口完成并形成审计记录。
|
||
|
||
## 5. 备份与恢复
|
||
|
||
创建 PostgreSQL custom-format 备份:
|
||
|
||
```bat
|
||
backup-sense.bat
|
||
backup-sense.bat -OutputDirectory D:\SenseBackups
|
||
```
|
||
|
||
默认写入包外可单独保护的 `backups` 目录。脚本从连接串移除密码后再构造 `pg_dump` 命令,密码只通过子进程环境传递。
|
||
|
||
恢复会清理并替换目标库中的对象,必须先停止 Sense、备份当前库,并两次确认数据库名:
|
||
|
||
```bat
|
||
restore-sense.bat -BackupFile D:\SenseBackups\sense-sense-20260815-120000.dump -ConfirmDatabaseName sense
|
||
migrate-sense.bat
|
||
```
|
||
|
||
恢复脚本还会交互要求输入 `RESTORE-数据库名`;名称不完全一致时拒绝执行。不要对来源不明或版本不匹配的备份执行恢复。
|
||
|
||
## 6. Demo 隔离
|
||
|
||
Demo 使用独立的 `config\sense.demo.env` 和 `SENSE_DEMO_DATABASE_URL`:
|
||
|
||
```bat
|
||
start-sense.bat demo
|
||
```
|
||
|
||
数据库名必须包含 `demo` 或 `test`,且不会回退到 production 的 `SENSE_DATABASE_URL`。默认 HTTP 端口为 18081、MediaMTX 为 disabled。Demo 数据不属于生产数据,不得迁入生产库或用于客户交付。
|
||
|
||
Demo 启动窗口按 `Ctrl+C` 停止;窗口不可用时执行 `stop-sense.bat -Mode demo`。
|
||
|
||
## 7. 日志与排错
|
||
|
||
- Sense 文件日志:`logs\`
|
||
- 运行时生成的 GoAdmin YAML:`data\runtime\settings.yml`(包含秘密,不得复制到工单或发送给无权限人员)
|
||
- MediaMTX 日志:由 Sense 启动窗口和 MediaMTX 自身输出提供
|
||
- 包完整性:`MANIFEST.sha256`
|
||
|
||
常见错误:
|
||
|
||
- `SENSE_DATABASE_URL is required`:编辑当前包的 `config\sense.env`,或设置非空进程变量。
|
||
- `PostgreSQL is unreachable`:确认服务、地址、端口和防火墙;数据库不存在会在迁移阶段明确失败。
|
||
- `port ... already in use`:先运行 `stop-sense.bat`,或确认占用者后修改 `SENSE_PORT`。
|
||
- `Managed MediaMTX binary not found`:把已审核的 `mediamtx.exe` 放入 `bin`,不要只复制配置文件。
|
||
- `External MediaMTX Control API is unreachable`:启动外部实例并确认 API 只监听回环地址。
|
||
- `migration failed`:不要跳过;先备份,保留错误输出,核对数据库账号权限和版本。
|
||
- 网页返回 404:检查 `web\index.html` 与 `SENSE_WEB_ROOT=web`,不要把源码目录或 `node_modules` 放进包。
|
||
- 网页返回 200 但白屏:在浏览器开发者工具检查 JS/CSS 是否 404;正式包的构建审计会逐项核对 `web\index.html` 引用的本地资源,缺失时拒绝生成交付包。
|
||
|
||
## 8. 构建交付包
|
||
|
||
开发机在仓库根目录执行:
|
||
|
||
```bat
|
||
Sense\scripts\build\build-windows.bat
|
||
```
|
||
|
||
若要把已审核的 MediaMTX 一并放入包:
|
||
|
||
```powershell
|
||
Sense\scripts\build\build-windows.ps1 -MediaMTXPath D:\approved\mediamtx.exe
|
||
```
|
||
|
||
构建严格检查 Go 1.26.5、Node 22.22.1 和 pnpm 9.15.1,生成:
|
||
|
||
- `Sense\dist\sense-windows-amd64\`
|
||
- `Sense\dist\sense-windows-amd64.zip`
|
||
|
||
构建末尾会审计包内容:逐项核对 `web\index.html` 引用的本地 JS/CSS,并拒绝 `node_modules`、嵌套 `dist`、Git/缓存目录、数据库/备份文件、非空秘密字段、常见默认密码和私钥标记。`dist` 为可重建产物,不提交 Git。
|