feat: add UMS CLI for binary packaging and system initialization
- Add Cobra-based CLI with ums init, ums serve, ums version commands - ums init supports interactive prompts and non-interactive flags - Generates secure JWT secrets and config.yaml automatically - Extract server.Serve() function for reuse - Add cross-platform build targets to Makefile - Update README with CLI installation and usage instructions New files: - cmd/ums/main.go - CLI entry point - cmd/ums/cmd/root.go - Root command - cmd/ums/cmd/init.go - Interactive/non-interactive init - cmd/ums/cmd/serve.go - Server command - cmd/ums/cmd/version.go - Version command - internal/server/server.go - Extracted Serve function
This commit is contained in:
143
README.md
143
README.md
@@ -4,26 +4,50 @@
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 前置依赖
|
||||
|
||||
- Go 1.21+
|
||||
- Node.js 18+
|
||||
- SQLite(默认,无需安装)
|
||||
|
||||
### 启动后端
|
||||
### 安装 UMS CLI
|
||||
|
||||
```bash
|
||||
# 复制环境配置
|
||||
cp .env.example .env
|
||||
# 编辑 .env 填入必要配置(JWT_SECRET, DEFAULT_ADMIN_PASSWORD 等)
|
||||
# 下载对应平台的二进制文件
|
||||
# Linux/macOS
|
||||
curl -L -o ums https://github.com/user-management-system/ums/releases/latest/download/ums-linux-amd64
|
||||
chmod +x ums
|
||||
|
||||
# 启动服务
|
||||
go run ./cmd/server
|
||||
# Windows
|
||||
curl -L -o ums.exe https://github.com/user-management-system/ums/releases/latest/download/ums-windows-amd64.exe
|
||||
|
||||
# 或使用 Go 安装
|
||||
go install github.com/user-management-system/cmd/ums@latest
|
||||
```
|
||||
|
||||
服务启动后访问 `http://localhost:8080/api/v1/auth/bootstrap` 初始化管理员账号。
|
||||
### 初始化系统
|
||||
|
||||
### 启动前端
|
||||
```bash
|
||||
# 交互式初始化(推荐)
|
||||
ums init
|
||||
|
||||
# 非交互式初始化
|
||||
ums init \
|
||||
--admin-user admin \
|
||||
--admin-pass MySecretPassword123 \
|
||||
--admin-email admin@example.com \
|
||||
--cors-origin http://localhost:3000
|
||||
```
|
||||
|
||||
初始化命令会:
|
||||
1. 生成安全的 JWT 密钥
|
||||
2. 创建配置文件 `config.yaml` 和 `.env`
|
||||
3. 创建数据库目录并执行迁移
|
||||
4. 初始化默认角色、权限和管理员账号
|
||||
|
||||
### 启动服务
|
||||
|
||||
```bash
|
||||
ums serve
|
||||
```
|
||||
|
||||
服务启动后访问 `http://localhost:8080/health` 确认服务正常运行。
|
||||
|
||||
### 前端
|
||||
|
||||
```bash
|
||||
cd frontend/admin
|
||||
@@ -35,13 +59,20 @@ npm run dev
|
||||
|
||||
```
|
||||
.
|
||||
├── cmd/server/ # 后端入口
|
||||
├── cmd/
|
||||
│ ├── ums/ # UMS CLI 入口
|
||||
│ │ └── cmd/ # CLI 子命令
|
||||
│ │ ├── init.go # 初始化命令
|
||||
│ │ ├── serve.go # 服务启动命令
|
||||
│ │ └── version.go # 版本命令
|
||||
│ └── server/ # 后端服务入口
|
||||
├── internal/ # 后端代码
|
||||
│ ├── api/handler/ # HTTP 处理器
|
||||
│ ├── api/middleware/ # 中间件(认证、权限、限流)
|
||||
│ ├── auth/ # 认证服务(JWT/SSO)
|
||||
│ ├── repository/ # 数据访问层
|
||||
│ ├── service/ # 业务逻辑层
|
||||
│ ├── server/ # 服务器核心逻辑
|
||||
│ └── domain/ # 领域模型
|
||||
├── frontend/admin/ # 管理后台前端
|
||||
├── configs/ # 配置文件
|
||||
@@ -77,49 +108,73 @@ npm run dev
|
||||
| OAuth context 正确传播 | ✅ 已修复 |
|
||||
| 密码修改后 Token 失效(PCE) | ✅ 已修复 |
|
||||
|
||||
## 环境变量
|
||||
## CLI 命令
|
||||
|
||||
关键配置项(详见 `.env.example`):
|
||||
```bash
|
||||
ums init # 初始化系统(交互式或非交互式)
|
||||
ums serve # 启动服务器
|
||||
ums version # 显示版本信息
|
||||
|
||||
| 变量 | 说明 | 必填 |
|
||||
|------|------|------|
|
||||
| `JWT_SECRET` | JWT 签名密钥 | 是 |
|
||||
| `DEFAULT_ADMIN_EMAIL` | 初始管理员邮箱 | 是 |
|
||||
| `DEFAULT_ADMIN_PASSWORD` | 初始管理员密码 | 是 |
|
||||
| `SMTP_*` | 邮件服务配置 | 是(邮件功能)|
|
||||
| `SMS_*` | 短信服务配置 | 否 |
|
||||
# ums serve 选项
|
||||
ums serve --port 8080 # 指定端口
|
||||
ums serve --config ./prod.yaml # 指定配置文件
|
||||
|
||||
## API 文档
|
||||
|
||||
完整 API 规范:`docs/API.md`
|
||||
|
||||
认证流程:
|
||||
# ums init 选项
|
||||
ums init --db-type sqlite # 数据库类型
|
||||
ums init --db-path ./data/ums.db # 数据库路径
|
||||
ums init --redis-enable # 启用 Redis
|
||||
ums init --redis-host localhost # Redis 地址
|
||||
ums init --admin-user admin # 管理员用户名
|
||||
ums init --admin-pass MyPassword123 # 管理员密码
|
||||
ums init --admin-email admin@example.com # 管理员邮箱
|
||||
ums init --port 8080 # 服务端口
|
||||
ums init --cors-origin http://example.com # CORS 域名
|
||||
ums init --yes # 跳过确认
|
||||
```
|
||||
1. POST /api/v1/auth/register # 注册用户
|
||||
2. POST /api/v1/auth/login # 登录获取 Token
|
||||
3. POST /api/v1/auth/refresh # 刷新 Token
|
||||
|
||||
## 配置文件
|
||||
|
||||
初始化后生成以下配置文件:
|
||||
|
||||
**config.yaml** - 主配置文件
|
||||
```yaml
|
||||
server:
|
||||
port: 8080
|
||||
mode: release
|
||||
database:
|
||||
type: sqlite
|
||||
dbname: "./data/user_management.db"
|
||||
jwt:
|
||||
secret: "<自动生成的密钥>"
|
||||
redis:
|
||||
enabled: false
|
||||
```
|
||||
|
||||
**.env** - 环境变量(包含敏感信息,请勿提交)
|
||||
```bash
|
||||
JWT_SECRET=<自动生成的密钥>
|
||||
BOOTSTRAP_SECRET=<自动生成的密钥>
|
||||
DEFAULT_ADMIN_EMAIL=admin@example.com
|
||||
DEFAULT_ADMIN_PASSWORD=<您设置的密码>
|
||||
```
|
||||
|
||||
## 开发命令
|
||||
|
||||
```bash
|
||||
# 构建
|
||||
# 构建 CLI
|
||||
make build-cli
|
||||
|
||||
# 构建所有平台 CLI
|
||||
make build-cli-all
|
||||
|
||||
# 构建服务器
|
||||
go build ./cmd/server
|
||||
|
||||
# 测试(跳过大规模性能测试)
|
||||
# 测试
|
||||
go test ./internal/... -skip TestScale -count=1
|
||||
|
||||
# 前端构建
|
||||
cd frontend/admin && npm run build
|
||||
|
||||
# 前端测试
|
||||
cd frontend/admin && npm test
|
||||
|
||||
# 前端 lint
|
||||
cd frontend/admin && npm run lint
|
||||
|
||||
# Docker 构建
|
||||
docker build -t ums .
|
||||
```
|
||||
|
||||
## 部署
|
||||
@@ -144,4 +199,4 @@ docker build -t ums .
|
||||
|
||||
完整项目状态:`docs/status/REAL_PROJECT_STATUS.md`
|
||||
|
||||
**2026-04-18 最新状态:** 所有 P0/P1/P2 安全和质量修复已全部完成并验证通过。
|
||||
**2026-04-19 最新状态:** CLI 打包和系统初始化优化已完成,支持单一二进制文件部署和交互式/非交互式初始化。
|
||||
|
||||
Reference in New Issue
Block a user