项目结构
yunyiradius/
├── main.go # 入口文件
├── go.mod / go.sum # Go 模块定义
├── yunyiradius.dev.yml # 开发环境配置
├── yunyiradius.prod.yml # 生产环境配置(参考)
│
├── config/ # 配置定义
│ └── config.go # 全局配置结构与加载
│
├── internal/ # 内部包
│ ├── adminapi/ # 管理后台 API 处理层
│ │ ├── auth.go # 认证(登录/JWT/速率限制)
│ │ ├── users.go # 用户 CRUD + 导入
│ │ ├── nas.go # NAS 设备管理
│ │ ├── nodes.go # 网络节点管理
│ │ ├── sessions.go # 在线会话管理
│ │ ├── finance.go # 财务管理(充值/退款)
│ │ ├── strategy.go # 套餐/策略管理
│ │ ├── policy.go # 接入策略管理
│ │ ├── portal.go # Portal 认证
│ │ ├── portal_mgmt.go # Portal 模板管理
│ │ ├── user_portal.go # 用户门户 API
│ │ ├── sms.go # 短信配置与发送
│ │ ├── system_backup.go # 系统备份/恢复
│ │ └── ...
│ │
│ ├── app/ # 应用核心
│ │ ├── app.go # 应用生命周期
│ │ ├── database.go # 数据库连接
│ │ ├── redis.go # Redis 客户端
│ │ └── config_manager.go # 动态配置管理
│ │
│ ├── domain/ # 数据模型 (GORM)
│ │ ├── radius.go # RADIUS 用户模型
│ │ ├── network.go # NAS/节点模型
│ │ ├── access_policy.go # 接入策略模型
│ │ └── ...
│ │
│ ├── radiusd/ # RADIUS 协议引擎
│ │ ├── auth_pipeline.go # 认证流水线
│ │ ├── radius.go # RADIUS 服务核心
│ │ ├── plugins/ # 认证插件(PAP/CHAP/EAP)
│ │ └── repository/ # 数据仓储层
│ │
│ ├── sms/ # 短信网关
│ │ ├── sms.go # 短信发送(阿里云/腾讯云)
│ │ └── code_store_redis.go # Redis 验证码存储
│ │
│ └── webserver/ # Web 服务
│ └── server.go # Echo 路由注册
│
├── pkg/common/ # 公共工具包
│ ├── crypto_field.go # 字段级 AES-GCM 加密
│ ├── password.go # 密码哈希 (bcrypt)
│ ├── totp.go # TOTP 二步验证
│ └── ...
│
├── web/ # 管理前端 (Vue 3 + Element Plus)
│ ├── src/
│ │ ├── views/ # 页面组件
│ │ ├── api/ # API 客户端
│ │ ├── router/ # 路由配置
│ │ └── i18n/ # 国际化 (zh-CN / en-US)
│ └── static.go # Go embed 前端静态资源
│
├── web-user/ # 用户门户 (Vue 3 独立 SPA)
│ ├── src/
│ │ ├── views/ # 登录/注册/账号管理
│ │ ├── components/ # 通用组件
│ │ └── router/ # 路由 (hash mode)
│ └── vite.config.js
│
└── docs/ # 项目文档 (VitePress)
└── guide/ # 用户指南关键设计决策
嵌入式前端
管理前端构建产物通过 Go 的 //go:embed 嵌入到二进制中,单文件部署无需额外 Web 服务器。
字段级加密
敏感字段(用户密码、NAS 密钥、SMS 凭证)使用 AES-256-GCM 加密存储,密钥从 Web.Secret 派生,加解密透明。
双前端架构
web/:管理后台,面向运维人员,含完整功能菜单web-user/:用户门户,面向终端用户,独立路由 (hash mode)
数据库兼容
开发/小规模部署使用 SQLite(零依赖),生产环境切换 PostgreSQL(通过 database.type 配置项)。