# GPUStack UI

GPUStack 平台的前端管理界面，提供 GPU 模型部署与管理、Playground 调试、资源监控、集群管理等一站式能力。

## 技术栈

- **框架**: [UmiJS Max 4.x](https://umijs.org/)
- **UI**: [Ant Design 6.x](https://ant.design/) + Pro Components
- **状态管理**: [Jotai](https://jotai.org/)
- **语言**: TypeScript
- **包管理**: pnpm

## 快速开始

### 环境要求

- Node.js 18+
- pnpm 9.3+

### 安装依赖

```bash
pnpm install
```

### 开发调试

```bash
npm run dev
# 默认访问 http://localhost:9000
```

如需代理到指定后端，设置环境变量：

```bash
PROXY_HOST=http://your-backend-host:port npm run dev
```

### 生产构建

```bash
npm run build
```

构建产物输出至 `dist/` 目录。

### 预览构建产物

```bash
npm run preview
```

### 代码格式化

```bash
npm run format
```

## Docker 部署

项目提供 Dockerfile 和 docker-compose.yml，支持一键容器化部署。

### 构建镜像

```bash
docker compose up -d --build
```

构建后的镜像名为 `maas-base-ui:latest`。

### 指定端口与环境变量

创建 `.env.prod` 文件并自定义配置：

```env
UI_PORT=8080
APP_TITLE=成都网讯MaaS底座
ENABLE_PLAYGROUND=false
```

运行：

```bash
docker compose --env-file .env.prod up -d --build
```

### 配置后端代理

通过 `BACKEND_URL` 环境变量指定后端服务地址：

```env
UI_PORT=8080
BACKEND_URL=http://your-backend-host:80
APP_TITLE=成都网讯MaaS底座
ENABLE_PLAYGROUND=false
```

容器内 Nginx 会自动将 `/v1`、`/v2`、`/auth`、`/version`、`/proxy`、`/update`、`/cli`、`/grafana` 等路径代理到 `BACKEND_URL` 指定的后端地址。

## 项目结构

```
config/                 # Umi 构建配置（路由、代理、插件等）
src/
  app.tsx               # 应用入口：初始化、请求配置、插件加载
  access.ts             # 权限控制逻辑
  request-config.tsx    # 请求拦截器与错误处理
  atoms/                # Jotai 原子状态
  config/               # 运行时配置（主题、设置、快捷键等）
  layouts/              # 自定义布局（侧边栏、菜单、Logo）
  pages/                # 页面组件（按功能划分）
    dashboard/          # 仪表盘
    playground/         # Playground（聊天、Embedding、Rerank、图像、语音）
    llmodels/           # 模型目录、用户模型、部署管理
    resources/          # Worker、GPU、后端、模型文件
    cluster-management/ # 集群与凭据管理
    users/              # 用户管理
    api-keys/           # API 密钥管理
    benchmark/          # 基准测试
    gpu-service/        # GPU 服务（实例、模板、存储、SSH 密钥）
  components/           # 全局共享组件
  plugins/              # 插件系统（生命周期、企业版扩展）
  locales/              # 国际化语言包
  assets/               # 图片资源
  services/             # API 服务层
Dockerfile              # 多阶段构建（Node 18 构建 + Nginx 部署）
docker-compose.yml      # 容器编排配置
nginx.conf.template     # Nginx 反向代理模板（运行时通过 envsubst 渲染）
docker-entrypoint.sh    # Nginx 容器入口脚本
```

## 环境变量

| 变量名              | 说明                        | 默认值                |
| ------------------- | --------------------------- | --------------------- |
| `APP_TITLE`         | 应用标题（左上角显示）      | 成都网讯MaaS底座      |
| `ENABLE_PLAYGROUND` | 是否启用 Playground 菜单    | true                  |
| `PROXY_HOST`        | 开发环境后端代理地址        | -                     |
| `UI_PORT`           | Docker 部署时的容器映射端口 | 8080                  |
| `BACKEND_URL`       | 后端服务地址                | http://localhost:8080 |

## 其他命令

| 命令                    | 说明            |
| ----------------------- | --------------- |
| `npm run dev`           | 启动开发服务器  |
| `npm run build`         | 生产构建        |
| `npm run preview`       | 预览构建产物    |
| `npm run format`        | 格式化代码      |
| `npm run check:locales` | 检查语言文件    |
| `npm run setup`         | 初始化 Umi 项目 |
