# 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)。