web.md 4.7 KB

Raft KV Web Admin

web_admin 是一个用于管理 Raft KV 存储集群的轻量级 Web 界面。它作为一个独立的 HTTP 服务运行,通过 TCP 协议连接到 Raft 节点,提供可视化的数据管理和权限控制功能。

架构概览

该工具由两部分组成:

  1. 后端代理 (Go): 一个简单的 HTTP 服务器,负责托管静态页面并将前端的 REST API 请求转换为 TCP 指令转发给 Raft 节点。
  2. 前端界面 (HTML/Alpine.js): 一个单页应用 (SPA),提供用户友好的操作界面。

技术栈

  • 后端: Go (标准库), TCP 连接池
  • 前端: HTML5, Tailwind CSS (样式), Alpine.js (交互逻辑)

功能特性

1. 认证与安全

  • 登录/登出: 支持基于用户名/密码(及可选 OTP)的身份验证。
  • 会话管理: 使用 Token 进行会话保持,支持自动过期处理。

2. 仪表盘 (Dashboard)

  • 实时集群状态 (Cluster Status): 实时显示节点状态(ID, Role, Term)、存储使用情况(DB/Log Size, Memory)、共识进度(Commit/Applied Index)及集群成员列表。
  • Web CLI: 提供完整的命令执行环境,支持 INFO, SEARCH, COUNT, JOIN, LEAVE 以及 GET/SET/DEL 等所有标准 Raft CLI 命令,方便远程运维和调试。

3. KV 数据管理 (KV Explorer)

  • 数据操作: 提供图形化界面进行 GET (查询)、SET (设置) 和 DEL (删除) 操作。
  • 操作历史: 临时记录当前会话的操作历史。

4. 用户管理 (User Management)

  • 用户列表: 展示所有用户及其关联角色和激活状态。
  • 创建用户: 支持创建新用户并分配初始角色。
  • 解锁用户: 支持重置被锁定的用户状态 (USER_UNLOCK)。

5. 角色与权限管理 (Role Management)

  • 角色列表: 展示系统中的角色及其详细的权限规则。
  • 创建角色: 支持定义新的业务角色。
  • 权限配置: 支持为角色添加细粒度的权限规则(基于 Key 模式匹配 + 读/写/管理动作)。

快速开始

启动服务

  1. 确保 Raft 节点已启动并在默认端口 9011 监听。
  2. 运行 Web Admin:

    go run example/web_admin/main.go
    

服务默认启动在 http://localhost:8088

配置

main.go 中可以修改默认配置:

const (
    TargetTCPAddr = "127.0.0.1:9011" // Raft 节点地址
    WebPort       = ":8088"          // Web Admin 监听端口
)

6. 联合调试开发 (Role 示例)

本节介绍了如何利用 example/role 目录下的多节点示例环境与 Web Admin 进行联合调试。该环境预置了带有 RBAC (基于角色的访问控制) 功能的 Raft 节点。

6.1 环境准备

example/role 包含两个节点配置 (node1node2) 以及用于初始化测试数据的 CLI 命令。

步骤 1:启动 Raft 节点 1

打开一个新的终端,启动 node1

# 终端 1
cd example/role/node1
go run main.go demo_cli.go
  • 监听地址: 127.0.0.1:9001
  • 包含功能: 自带 demo-init 命令用于初始化测试账户。

步骤 2:启动 Raft 节点 2 (可选)

打开另一个终端,启动 node2 以模拟集群环境:

# 终端 2
cd example/role/node2
go run main.go demo_cli.go
  • 监听地址: 127.0.0.1:9002

步骤 3:初始化测试数据

node1 的终端中,输入以下命令初始化角色和用户:

# 在 node1 运行的终端中输入
demo-init

此命令将创建以下测试账户:

  • alice (密码 pass123): 角色 sales_manager (允许设置 product.discount 为 0.5-0.9)
  • bob (密码 pass123): 角色 junior_sales (允许设置 product.discount 为 0.8-0.95)

6.2 配置 Web Admin

修改 example/web_admin/main.go 以连接到 node1 的端口 (9001)。

// example/web_admin/main.go

const (
    TargetTCPAddr = "127.0.0.1:9001" // 修改为 node1 的端口
    WebPort       = ":8088"
)

6.3 运行与验证

  1. 启动 Web Admin:

    go run example/web_admin/main.go
    
  2. 访问 http://localhost:8088

  3. 测试登录:

    • 使用 alice / pass123 登录。
  4. 测试权限控制:

    • 进入 KV Explorer
    • 尝试 SET product.discount 0.6 -> 应成功 (在 0.5-0.9 范围内)。
    • 尝试 SET product.discount 0.1 -> 应失败 (超出范围)。
    • 尝试 SET system.config 1 -> 应失败 (无权限)。
  5. 测试多角色视图:

    • 注销并使用 bob / pass123 登录。
    • 尝试 SET product.discount 0.6 -> 应失败 (bob 只能设置 0.8-0.95)。

通过此流程,可以完整验证 Web Admin 的前端逻辑与后端 Raft 节点的权限系统是否协同工作正常。