# nacos-console **Repository Path**: chenxxxxxxxx/nacos-console ## Basic Information - **Project Name**: nacos-console - **Description**: Nacos 控制台 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-17 - **Last Updated**: 2026-07-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Nacos Console > 单二进制 BFF(Backend for Frontend)控制台,用于替代官方 Nacos 控制台,基于 Nacos v1 兼容 HTTP OpenAPI 对接,兼容提供 v1 OpenAPI 的 Nacos 2.x 全系及大部分 1.4.x。 ## 项目简介 本控制台的**核心目标**是消除官方 Nacos 控制台登录接口 `/nacos/v1/auth/users/login` 的**明文口令传输**被 WAF(如深信服)拦截告警的问题。 浏览器与控制台之间不再出现任何 Nacos 明文口令:真正的 Nacos 连接凭据由后端服务端持有并加密入库,前端只与本控制台的 BFF 交互,由后端服务端登录 Nacos 并反向代理所有 OpenAPI 调用。 ## 核心特性 - **登录零明文**:浏览器登录控制台时只发送账号口令的 **sha256 摘要**;后端以 `bcrypt(sha256hex)` 存储与校验。 - **Nacos 凭据加密托管**:真正的 Nacos 连接口令由后端持有,以 **AES-256-GCM** 加密入库;master key 由环境变量 `CONSOLE_MASTER_KEY` 注入(base64 编码的 32 字节)。 - **服务端代理**:后端使用库中凭据服务端登录 Nacos,缓存并自动刷新 `accessToken`,再反向代理转发所有 Nacos v1 OpenAPI 调用。 - **单二进制交付**:Go `embed` 内嵌前端产物,输出单个可执行文件;使用纯 Go 的 SQLite(`modernc.org/sqlite`),**免 CGO**,可交叉编译到任意平台。 - **完整功能**:配置管理、服务/实例、命名空间、集群、用户、操作审计、Nacos 连接设置。 - **二级路径部署**:支持通过 `BASE_PATH` 挂载到 nginx 子路径下(如 `/admin`)。 ## 技术栈 | 层 | 技术 | |----|------| | 前端 | React 18 + TypeScript + Vite 5 + Arco Design | | 前端路由/状态 | react-router-dom v6 + zustand | | 前端 HTTP | axios(请求拦截注入 JWT,401 自动跳登录) | | 后端 | Go 1.26 + Gin | | 存储 | SQLite(`modernc.org/sqlite`,纯 Go,免 CGO) | | 加密 | AES-256-GCM(静态加密)+ bcrypt(口令)+ JWT(会话) | | 打包 | Go `embed` 内嵌前端产物,输出单二进制 | ## 系统架构 ```mermaid graph LR Browser[浏览器 SPA
React + Arco] subgraph Console[Nacos Console 单二进制] Static[内嵌前端
go:embed] Auth[鉴权
sha256+bcrypt+JWT] Settings[连接设置
AES-256-GCM] Token[Token 管理器
accessToken 缓存刷新] Proxy[反向代理
Nacos v1 OpenAPI] DB[(SQLite)] end Nacos[Nacos 2.x] Browser -->|sha256 口令 / JWT| Auth Browser --> Static Auth --> DB Settings --> DB Auth --> Proxy Proxy --> Token Token -->|服务端登录| Nacos Proxy -->|转发 OpenAPI| Nacos ``` 请求链路:浏览器只与控制台 BFF 交互(仅传 sha256 口令与 JWT);后端从加密库中取出 Nacos 凭据完成服务端登录,缓存 `accessToken` 并反向代理所有 Nacos OpenAPI 调用,浏览器侧永不出现 Nacos 明文口令。 ## 目录结构 ``` nacos-console/ ├── backend/ # Go 后端 │ ├── main.go # 入口(含 -version 标志) │ └── internal/ │ ├── config/ # 环境变量加载与校验 │ ├── crypto/ # AES-256-GCM 加解密 │ ├── store/ # SQLite 存储层 + 迁移 │ ├── auth/ # 登录鉴权(sha256+bcrypt+JWT)、改密 │ ├── nacos/ # 凭据、accessToken 管理器、反向代理 │ ├── settings/ # Nacos 连接设置(加密读写、连通性测试) │ └── server/ # 路由装配、审计中间件、静态资源内嵌 ├── frontend/ # React 前端(Vite + Arco Design) │ └── src/ │ ├── api/ # client.ts(axios+登录) / nacos.ts(API 封装) │ ├── store/ # zustand 会话状态 │ ├── layout/ # 主布局(侧边菜单 + 顶栏) │ └── pages/ # Login/Configs/Services/Namespaces/Cluster/Users/Audit/Settings ├── deploy/ # 生产部署(systemd 脚本 + Docker + Nginx) └── docs/ # 项目文档 ``` ## 快速开始 ```bash # 1. 构建前端 cd frontend && pnpm install && pnpm build # 2. 编译后端(内嵌前端) cd ../backend && go build -o console.exe . # 3. 设置主密钥并运行 export CONSOLE_MASTER_KEY=$(openssl rand -base64 32) # 必填:AES 主密钥 export CONSOLE_ADMIN_PASSWORD=admin123 # 示例口令,请替换为强口令 ./console.exe ``` 浏览器访问 `http://127.0.0.1:8080`,用 `admin` / 你设置的口令登录;首登强制改密后,进入「Nacos 连接设置」配置 Nacos 地址与凭据即可使用。 ### 环境要求 | 工具 | 版本要求 | 说明 | |------|----------|------| | Go | 1.26+ | 后端编译 | | Node.js | 20+ | 前端构建 | | pnpm | 8+ | 前端包管理 | ## 部署 生产环境部署(物理机/VM + systemd、Docker Compose、Nginx 二级路径反代等)详见 [deploy/README.md](./deploy/README.md)。 ## 文档 | 文档 | 内容 | |------|------| | [docs/编译与使用指南.md](./docs/编译与使用指南.md) | 主文档:项目简介、技术栈、环境准备、编译构建、运行、环境变量、功能手册、API 一览、常见问题 | | [deploy/README.md](./deploy/README.md) | 生产部署指南(systemd / Docker / Nginx,含安装、升级、备份、卸载) | ## License 见 [LICENSE](./LICENSE)。