Skip to content

1.0.0

发布日期: 2026-02-22

新增 (Added)

  • 响应优化中间件 ResponseOptimize(),自动移除 K8s 系统字段(managedFields, finalizers 等)
  • API 响应大小减少约 50%,提升加载性能
  • 前端 API 配置文件 src/config/api.ts(便于未来路由迁移)
  • v5.4 重构计划: docs/refactoring/refactoring-plan-v5.4.md
  • 新增 GitHub Actions tag 构建流程:打 Git tag 后自动构建 w7panel-ui、同步前端产物到 w7panel-server/kodata,并通过 ko build 推送镜像

修复 (Fixed)

安全修复

  • LOCAL_MOCK 模式认证绕过: 修复了 LOCAL_MOCK=true 模式下跳过用户认证的问题
  • 前端路由认证绕过: 修复了未登录可访问敏感页面的问题

API 路由重构 (v5.3)

  • 路由规范化: 分离面板业务 API 和 K8s 代理 API
    • 面板业务 API → /panel-api/v1/
    • K8s 代理 API → /k8s-proxy/
  • 前端 API 路径修复: 330+ 处从 /api/v1/ 迁移到 /k8s-proxy/api/v1/
  • Helm API 修复: 从 /k8s-proxy/api/v1/helm/* 迁移到 /panel-api/v1/helm/*
  • 文档: docs/refactoring/refactoring-plan-v5.3.md

性能优化

  • 请求合并优化: 6 个页面的串行请求并行化
    • views/app/apps/index.vue: getList, getClusterInfo, getZpk 并行
    • views/cluster/overview/index.vue: version, service, nodes 并行
    • views/app/pages/detail-content.vue: getData, getSans, getPodList 并行
    • views/app/pages/moniter.vue: metrics 请求并行
    • views/storage/disk.vue: getStorageClasses 与 getList 并行
    • views/storage/disk.vue: deleteTag 循环请求并行
  • 预计页面加载时间减少 30-50%

UI 修复

  • 自动刷新默认关闭: Pod 列表数据不自动更新 → 移除开关,始终自动刷新
  • 应用图标加载失败: 添加 @error 处理和默认图标
  • 确认对话框位置不当: 改为 position="rt" 右上角
  • 日志查看器资源泄漏: 添加 onUnmounted 生命周期钩子断开连接

僵尸进程修复 (2026-02-22)

  • 问题: 容器环境中 PID 1 不回收子进程,导致僵尸进程累积
  • 解决方案:
    • Go 代码添加 PR_SET_CHILD_SUBREAPER + SIGCHLD 忽略
    • 停止脚本优化为先 SIGTERM 再 SIGKILL
  • 文件:
    • w7panel/main.go - 添加 init 函数
    • w7panel/scripts/start.sh - 改进优雅停止
  • 验证: 启动日志显示 set child subreaper successfully

命名规范修复

  • 统一 localStorage 键名从 offlineui-* 改为 w7panel-*

前端警告修复

  • Intlify 翻译警告: 修复 t('') 空字符串问题,改为使用路由名称作为备选
  • Wujie 事件订阅警告: 创建统一事件管理 Hook (use-wujie-events.ts),自动处理空值检查
  • 隐藏容器终端菜单: 添加 hideInMenu: true 到 pod-webshell 路由
  • 翻译键缺失: 添加 dialog-pod-webshell 键到翻译文件

API 路由修复

  • 问题: /version 接口返回内容不对
  • 修复: 前端调用从 /version 改为 /k8s-proxy/version(符合 v5.3 重构规范)
  • 文件: w7panel-ui/src/views/cluster/overview/panel.vue

namespace=undefined 问题修复

  • 根因: Store 初始值为空字符串 '',组件直接使用导致 API 路径出现 undefined
  • 修复方案:
    1. 修改 Store 初始值: namespace: 'default' (根因修复)
    2. 添加 namespaceActive 初始化到 dcform-drawer.vue
  • 涉及文件:
    • w7panel-ui/src/store/modules/namespace.ts - 初始值修复
    • w7panel-ui/src/components/dcform-drawer.vue - 添加 Store 引用

Drawer 组件性能优化

  • 问题: Drawer/Modal 组件在页面加载时就调用 API,即使未显示
  • 优化: 延迟 API 调用到真正显示时
  • 修复组件:
    • domain-strategy.vue: 移除 created() 中的 API 调用,移到 watch(show)
    • domain-strategy-plugin.vue: 移除重复的 created() 调用
  • 优化效果: 减少页面加载时的不必要 API 请求

重要文档更新

启动参数规范(2026-02-20)

问题现象

serviceaccounts "admin" is forbidden: User "system:serviceaccount:default:default" 
cannot get resource "serviceaccounts" in API group "" in the namespace "default"

根因:未正确设置环境变量,系统使用 K8S Pod 内 ServiceAccount 而非本地 kubeconfig

正确启动方式

bash
# 必须设置的环境变量
export CAPTCHA_ENABLED=false
export LOCAL_MOCK=true              # 关键:使用本地 kubeconfig
export KO_DATA_PATH=/path/to/kodata
export KUBECONFIG=/path/to/kubeconfig.yaml  # 必须使用绝对路径

# 启动服务
cd /home/wwwroot/w7panel-dev/dist
./w7panel server:start

更新文档

  • ✅ AGENTS.md - 添加"重要:启动参数规范"章节
  • ✅ docs/src/user-guide/deployment.md - 创建部署指南文档

架构重构设计 (v2.0 - 规划中)

设计方案

/api/auth/*      → 认证 API
/api/k8s/*       → K8S 资源 API
/api/files/*     → 文件操作 API
/api/apps/*      → 应用管理 API
/api/cluster/*   → 集群管理 API
/k8s/proxy/*     → K8S API 代理
/public/*        → 公开 API

实施状态

  • ✅ K8sResponseFilter 中间件已实现(支持 JSON/XML/YAML)
  • ✅ RequestLogger 中间件已实现
  • ✅ RateLimiter 中间件已实现
  • ⏸️ 路由迁移暂缓(保持向后兼容,降低风险)

测试结果

UI 自动化测试

总计:12
通过:10 (83%)
失败:2 (需要应用数据,预期行为)

通过的测试:

  • ✅ 登录功能
  • ✅ 集群概览
  • ✅ 应用列表
  • ✅ 节点管理
  • ✅ 存储管理
  • ✅ 用户菜单