# EasyFlow

EasyFlow 是一个面向企业场景的 Java AI 应用开发平台，提供智能体、工作流编排、知识库（RAG）、插件调用、MCP 接入和系统管理能力。
当前后端已基于 `easy-agents` 与 `easy-agents-flow` 生态进行整合。

## 核心模块

### 后端聚合模块
- `easyflow-api`：对外 API 层，包含 admin/public/usercenter/mcp 接口。
- `easyflow-commons`：公共能力层（基础工具、AI 公共组件、缓存、文件存储、验证码、鉴权等）。
- `easyflow-modules`：业务模块层（AI、系统、日志、任务、数据中心、认证等）。
- `easyflow-starter`：启动层，`easyflow-starter-all` 为完整可运行服务。

### 前端项目
- `easyflow-ui-admin`：管理后台前端。
- `easyflow-ui-usercenter`：用户中心前端。
- `easyflow-ui-websdk`：Web SDK 示例/开发工程。

## 环境要求

- JDK 17+
- Maven 3.8+
- MySQL 8+
- Redis 6+
- Node.js >= 20.10.0
- pnpm >= 9.12.0

## 快速启动（开发环境）

### 1. 初始化数据库
只需要提前创建空库，例如：

```sql
CREATE DATABASE easyflow CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
```

表结构、Quartz 表和基础数据会在后端启动时由 Flyway 自动迁移完成。
当前初始化脚本仅保留 3 段：`V1__quartz.sql`、`V2__easyflow_schema.sql`、`V3__easyflow_seed.sql`。

### 2. 启动后端
在项目根目录执行：

```bash
mvn -DskipTests clean package
java -jar easyflow-starter/easyflow-starter-all/target/easyflow-starter-all-0.0.1.jar --spring.profiles.active=dev
```

默认端口：`8111`（见 `easyflow-starter/easyflow-starter-all/src/main/resources/application.yml`）。

首次连接空库时，应用会自动执行 `db/migration` 下的迁移脚本并初始化默认管理员、菜单、角色和模型服务商数据。

### 3. 启动前端
管理后台：

```bash
cd easyflow-ui-admin
pnpm install
pnpm dev
```

管理端开发环境与生产环境统一使用 `/flow/` 基路径和 Hash 路由，默认访问地址：

```text
http://127.0.0.1:5090/flow/#/
```

直接访问 `http://127.0.0.1:5090` 或 `/flow` 时，开发服务器会自动补齐 `/flow/`。

用户中心：

```bash
cd easyflow-ui-usercenter
pnpm install
pnpm dev
```

默认测试账号：`admin / Easy@2026`

管理端发布前可执行以下命令，验证环境契约、生产镜像和 Nginx 路由：

```bash
cd easyflow-ui-admin
pnpm verify:deployment
```

## 后端 Jar 包构建与部署

### 构建 Jar

```bash
mvn -DskipTests -Dmaven.javadoc.skip=true clean package
```

产物路径：
- `easyflow-starter/easyflow-starter-all/target/easyflow-starter-all-0.0.1.jar`

### 启动 Jar（生产建议）

```bash
java -jar easyflow-starter/easyflow-starter-all/target/easyflow-starter-all-0.0.1.jar --spring.profiles.active=prod
```

生产环境同样只需要保证目标数据库已创建为空库，Flyway 会在应用启动时自动完成迁移。

可通过环境变量覆盖关键配置（示例）：

```bash
SPRING_DATASOURCE_URL=jdbc:mysql://127.0.0.1:3306/easyflow?useInformationSchema=true&characterEncoding=utf-8
SPRING_DATASOURCE_USERNAME=easyflow
SPRING_DATASOURCE_PASSWORD=123456
SPRING_REDIS_HOST=127.0.0.1
SPRING_REDIS_PASSWORD=your_redis_password
```

## 前端 dist 包构建与部署

### 构建 dist
管理后台：

```bash
cd easyflow-ui-admin
pnpm install
pnpm run build
```

用户中心：

```bash
cd easyflow-ui-usercenter
pnpm install
pnpm run build
```

构建产物：
- `easyflow-ui-admin/app/dist`
- `easyflow-ui-usercenter/app/dist`

### 部署方式（Nginx）
将 dist 目录部署到 Nginx 静态目录，并配置反向代理：
- `/api/` -> 后端服务
- `/userCenter/` -> 后端服务

可直接参考：
- `easyflow-ui-admin/scripts/deploy/nginx.conf`
- `easyflow-ui-usercenter/scripts/deploy/nginx.conf`

## Docker Compose 一键部署（可选）

在项目根目录执行：

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

说明：
- `easyflow-api` 默认使用根目录 `Dockerfile`，会先在容器中构建并安装 `easy-agents`，再构建 `easyflow` 后端。
- 由于依赖 `easy-agents` 源码，`docker-compose.yml` 中后端构建上下文为上级目录（包含 `easyflow` 与 `easy-agents` 的同级目录）。
- ARM 服务器可直接构建（基础镜像支持 `linux/arm64`）。

默认端口：
- 后端 API：`8080`
- Admin：`8081`
- UserCenter：`8082`
