主要更新内容
- 监控数据存储重构:运行期所有监控记录(含 GPU 和 Ping)全部迁移至统一的 metric store(默认 SQLite
./data/metrics.db,支持 MySQL/PostgreSQL),旧的records/gpu_records/ping_records表不再写入。 - 新增首次安装引导流程:首次访问 Web 界面时将显示安装向导,管理员无需再通过环境变量或启动日志设置默认账号,配置站点信息与监控数据库在引导界面完成。
- 移除内置 Cloudflare Tunnel 与 Cloudflare Access OAuth 支持:
cloudflared二进制不再打包进 Docker 镜像;删除UTCTime自定义类型,所有时间字段统一使用标准time.Time(UTC 存储)。 - 新增访客审计事件 RPC 端点(PR #597)并加固日志写入(PR #602),支持通过 RPC 查询公开审计事件。
- 新增 loong64 (LoongArch) 架构支持,构建和 Docker 镜像均包含该平台。
- 大幅重构服务端启动生命周期:拆分为显式的 Bootstrap、InitStores、InitProviders、StartBackground、BuildRouter、Run、Shutdown 阶段,初始化顺序清晰且关闭可逆。
- 废弃旧配置与参数:命令行标志
--db-host、--db-port、--db-user、--db-pass、--db-name及对应的环境变量KOMARI_DB_*全部移除;旧的环境变量ADMIN_USERNAME/ADMIN_PASSWORD不再生效。 - Metric store 永久启用:删除
metric_store_enabled开关,默认及未配置时自动使用 SQLite./data/metrics.db;支持热重载 DSN 并自动测试连接。 - 新增数据库维护与压缩功能:支持通过 API 查看 SQLite 主库存储大小、执行 WAL checkpoint 和 VACUUM(API 已实现但后续 revert,此处保留基础设施)。
- 新增主题市场来源管理与压缩包校验,支持从外部源下载并验证主题。
- 新增低资源模式自动检测:在内存不足时自动优化 SQLite 性能参数。
- 重构 CI/CD:将前端构建和 Zig 工具链提取为可复用的 GitHub Actions,所有工作流依赖该 Action,减少重复代码。
Bug修复
- 安全修复:主题名称中存在路径遍历漏洞,影响
DeleteTheme/UpdateTheme/SetTheme接口(PR #584)。感谢 @guocn 报告。 - Telegram 通知:非 200 响应时,返回 API 错误描述而非仅状态码(PR #583)。
- 数据库时间查询:修复因时间比较未使用 UTC 导致的时间查询错误,改进缓存清理(commit f0877d6)。
- SQLite 写锁失败:修复监控记录写入时偶发的
database is locked错误(commit 332053d)。 - Metric 迁移表锁:避免迁移期间 SQLite 表锁导致服务异常(commit 64998b5)。
- Metric 序列一致性:修复聚合查询时丢失 metric series 身份的问题(commit 8911c08)。
- 迁移进度持久化:恢复迁移时保留已迁移进度计数,避免从零重新累计(commit 43c80d2)。
- getNodes 返回结构:RPC
common:getNodes返回 uuid 为键的 map 而非数组,与旧客户端兼容(commit ff6daa6)。 - Ping 记录使用 metric store:
DeletePingRecords会先清理 metric store 中的 ping 数据再删除任务,避免孤立记录。 - 修正默认内置 metric 保留期:测试环境默认保留期从 90 天改为 1 天(commit c1178eb)。
其他
- Snapshot 版本改用 UTC+8 时区:版本号格式
Snapshot-yymmddHHMM,与中文用户时区对齐。 - CI 优化:新增
rebuild-release.yml工作流,支持手动重建已发布的 Release 资产;快照工作流增加concurrency控制,避免重复构建;发布工作流自动根据 tag 选择对应 komari-web 前端版本。 - Release Notes 生成:使用 AI 自动生成变更摘要,支持从稳定 tag 作为比较基准。
- 移除 Nezha 协议兼容层:清理大量无用代码和废弃函数(如
CreateDefaultAdminAccount、EditClientName、SaveReport等)。 - 日志系统替换:使用自定义 logger 替代标准库
log,强制 Gin 生产模式。
What's Changed
- fix(security): prevent path traversal in theme name (DeleteTheme/UpdateTheme/SetTheme) by @guocn in #584
- fix(telegram): 非 200 响应时返回 API 错误描述而非仅状态码 by @Torther in #583
- feat(rpc): add public visitor audit event endpoint by @sanrokamlan-prog in #597
- fix: harden visitor audit logging by @sanrokamlan-prog in #602
Commits
- feat: route metric reads and writes to dedicated store (f2c46db) @Akizon77
- fix(database): use FromTime() for time queries and improve cache cleanup (f0877d6) @Akizon77
- fix(telegram): include API error description in non-200 responses (da047cf) @Torther
- refactor(metrics): route all storage through metric store when enabled (6a5f3ef) @Akizon77
- fix(rpc): common:getNodes returns uuid-keyed map instead of array (ff6daa6) @Akizon77
- Merge branch 'refactor/metrics-unify-storage': unify storage through metric store + getNodes map (0132d1c) @Akizon77
- fix(theme): prevent path traversal in theme operations (404d97d) @guocn
- fix(theme): prevent path traversal in theme operations (#584) (92ec774) @Akizon77
- Merge pull request #583 from Torther/main (b6fcdd3) @Akizon77
- fix: avoid sqlite database is locked failures for record writes (332053d) @Akizon77
- feat(metrics): hot-reload metrics DB config with connection test before save (9e5b6df) @Akizon77
- fix: avoid sqlite table locks during metric migration (64998b5) @Akizon77
- feat(metrics): infer DB driver from DSN automatically (d02d934) @Akizon77
- merge: metrics DSN autodetect (be6af33) @Akizon77
- perf: 优化 metrics 迁移性能 - 批量写入 + keyset 分页 (5c2bd4e) @Akizon77
- feat(metrics): 支持迁移暂停/恢复,进度持久化与重启后孤儿状态修复 (416ea87) @Akizon77
- fix(migration): 恢复迁移时保留已迁移进度计数,避免从0重新累计 (43c80d2) @Akizon77
- ci: align snapshot workflow behavior (eb4ca83) @airium
- refactor: split startup into app lifecycle stages (6ddb143) @Akizon77
- feat(metrics): always enable metric store with startup migration and version-based backup (4ad190a) @Akizon77
- refactor: remove built-in Cloudflare tunnel support (73071ff) @Akizon77
- refactor(oauth): remove Cloudflare Access provider support (ab31fc6) @Akizon77
- Use UTC+8 for snapshot versions (e009444) @Akizon77
- fix: run metric store migrations before startup migration (84130df) @Akizon77
- refactor(metrics): use metric retention for cleanup settings (7e0d542) @Akizon77
- feat: add metric retention policy management (7d95240) @Akizon77
- fix(metric): preserve series identity during aggregation (8911c08) @Akizon77
- feat(metricstore): add scheduled rollup compaction (5ad791f) @Akizon77
- fix(metricstore): rotate compaction cursor per metric (46b4e37) @Akizon77
- ci: reuse frontend and toolchain actions in workflows (8a529b4) @Akizon77
- feat(metricstore): aggregate record queries via series rollups (b2fe9ab) @Akizon77
- ci: generate AI-assisted release notes from stable tags (8910c2e) @Akizon77
- feat(metricstore): track ping packet loss in metrics (855ff82) @Akizon77
- Improve release notes generation (5ade710) @Akizon77
- Read release note workflow inputs (0660ee7) @Akizon77
- Use stable release base for snapshot notes (29eecf5) @Akizon77
- feat(metric): preserve series identity in rollup queries (9831df0) @Akizon77
- Include commits in release notes (39c5f7b) @Akizon77
- feat(metricstore): add downsampling toggle, raise default retention to 90d, and cleanup expired data on compact (42ef993) @Akizon77
- fix(metrics): select compatible rollup intervals (3b48339) @Akizon77
- Fix metric rollup compaction and retention (ff358ed) @Akizon77
- refactor: improve metric store lifecycle management with context-aware close and operation gate (c828653) @Akizon77
- disable downsampling by default (724dd3b) @Akizon77
- feat: add visitor audit rpc endpoint (7679430) @sanrokamlan-prog
- Update generate-release-notes.yml (5c73eba) @Akizon77
- Merge pull request #597 from sanrokamlan-prog/visitor-audit-rpc (1eb3549) @Akizon77
- fix: harden visitor audit logging (0c80f0f) @sanrokamlan-prog
- Merge pull request #602 from sanrokamlan-prog/fix/visitor-audit-hardening (5fa59ab) @Akizon77
- refactor: replace static retention config with dynamic retention summary (7f36881) @Akizon77
- fix: preserve zero-retention metric definitions across operations (66b7691) @Akizon77
- refactor(metrics): remove DefaultRetentionDays config option and enforce explicit retention (7baf2ed) @Akizon77
- fix: reduce default built-in metric retention to 1 day for testing (c1178eb) @Akizon77
- fix(metricstore): use Series to read ping records for rollup support (e2a8284) @Akizon77
- feat: clean metric store before deleting client or ping task (43547b9) @Akizon77
- feat(metric): add compaction watermark upsert and update storage queries (5b90804) @Akizon77
- feat: #414 add support for loong64 architecture (fc3febc) @Akizon77
- refactor: remove unused database functions for sessions, clients, and metric store (0f6f2f4) @Akizon77
- refactor: remove Nezha compatibility (f42cfe7) @Akizon77
- Make metric chart gaps adaptive (73c3c43) @Akizon77
- refactor: remove deprecated WriteRecord/WriteGPURecord and refactor cron jobs (312e320) @Akizon77
- feat(metricstore): batch metric report writes in single transactions (a78ef87) @Akizon77
- refactor(jsonrpc): remove deprecated Tag field from public metric types (d853a83) @Akizon77
- feat: add legacy upgrade server and refactor OAuth initialization (3c27823) @Akizon77
- feat(admin): add database compression inspection and configuration endpoints (fee8c86) @Akizon77
- Revert "feat(admin): add database compression inspection and configuration endpoints" (7f12850) @Akizon77
- refactor: clean up metric constants and refactor record downsampling (99fda6b) @Akizon77
- refactor: standardize time fields (42b290f) @Akizon77
- remove unused database connection parameters (be3daa4) @Akizon77
- fix: #609 #612 continue compaction on per-metric errors and add separate compaction gate (5a66f28) @Akizon77
- fix: remove orphaned metric data before space reclaim and reject unknown metrics (cdfd5bd) @Akizon77
- feat: drop obsolete builtin metrics and expose definition creation (b554368) @Akizon77
- feat: make metric deletion async and add UpdateMetricRetention (b4d3977) @Akizon77
- feat: add automatic low resource mode detection and SQLite tuning (f59e0e8) @Akizon77
- fix(resourceprobe): cast Totalram to uint64 to avoid overflow (eb7ecc6) @Akizon77
- feat: migrate legacy monitoring to hourly P95 aggregation (7a95546) @Akizon77
- feat: use aligned, unbuffered I/O for disk write benchmark (0bac110) @Akizon77
- fix(ci): only tag Docker latest for latest release (a402cc6) @Akizon77
- fix(ci): build maintenance releases with matching frontend (99c684e) @Akizon77
- fix(ci): promote Docker latest explicitly (9d7e24a) @Akizon77
- ci: add workflow to rebuild existing releases (9d149ab) @Akizon77
- feat: add theme market source management and archive validation (312834f) @Akizon77
- refactor: replace stdlib log with custom logger, enforce gin release mode (db2ed8e) @Akizon77
- feat: first-run installation guide (5a84889) @Akizon77
New Contributors
- @guocn made their first contribution in #584
- @Torther made their first contribution in #583
- @sanrokamlan-prog made their first contribution in #597
Full Changelog: 1.2.5-fix2...Snapshot-2607211357