项目配置说明
概述
本文档描述 NXAI 项目的配置结构、环境变量及部署配置。
一、技术栈
后端技术栈
| 组件 | 版本 | 说明 |
|---|---|---|
| Java | 1.8 | 语言版本 |
| Spring Boot | 2.3.5.RELEASE | 应用框架 |
| MyBatis-Plus | 3.3.1.tmp | ORM 框架 |
| MySQL | 8.0.20 | 数据库 |
| Redis | - | 缓存 |
| JWT (auth0) | 3.5.0 | 认证 |
| Shiro | 1.4.1 | 权限管理 |
| Hutool | - | 工具库 |
| MapStruct | - | 对象映射 |
前端技术栈
| 组件 | 版本 | 说明 |
|---|---|---|
| Vue.js | 2.x | 前端框架 |
| Vue Router | - | 路由管理 |
| Vuex | - | 状态管理 |
| Element UI | - | UI 组件库 |
| Axios | - | HTTP 客户端 |
| NProgress | - | 进度条 |
二、项目结构
nxaitest/
├── nxaitest-backend/ # Java Spring Boot 后端
│ ├── src/main/java/top/ptcc9/
│ │ ├── controller/ # REST Controller(19个)
│ │ ├── service/ # 业务逻辑层
│ │ ├── mapper/ # MyBatis Mapper
│ │ ├── entity/ # 数据库实体
│ │ ├── dto/ # 请求/响应 DTO
│ │ ├── config/ # 配置类
│ │ ├── common/ # 通用响应类
│ │ ├── exceptions/ # 全局异常处理
│ │ ├── handler/ # 拦截器、定时任务
│ │ ├── ratelimit/ # 限流模块
│ │ ├── annotations/ # 自定义注解
│ │ ├── utils/ # 工具类
│ │ └── agent/ # AI Agent
│ ├── src/main/resources/
│ │ ├── application.yml # 主配置文件
│ │ └── mapper/ # MyBatis XML
│ └── pom.xml # Maven 配置
│
├── nxaitest-frontend/ # Vue.js 前端
│ ├── src/
│ │ ├── views/ # 页面组件
│ │ ├── router/index.js # 路由配置
│ │ ├── store/index.js # Vuex 状态管理
│ │ ├── common/request.js # Axios 封装
│ │ ├── network/ # API 请求封装
│ │ ├── services/ # 消息流服务
│ │ ├── utils/ # 工具函数
│ │ └── agents/ # 前端 Agent
│ └── vue.config.js # Vue CLI 配置
│
├── docs/ # VitePress 文档
│ └── docs/
│ ├── api/ # API 文档
│ └── .vitepress/ # VitePress 配置
│
├── nginx/conf.d/ # Nginx 配置
├── docker-compose.yml # 开发环境 Docker Compose
└── docker-compose-prod.yml # 生产环境 Docker Compose三、后端配置
3.1 application.yml 主要配置
yaml
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://localhost:3306/nxaitest?useSSL=false&serverTimezone=Asia/Shanghai
username: admin
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
redis:
host: localhost
port: 6379
timeout: 6000ms
# 认证配置
nxai:
auth:
public-register-enabled: false
upstream-register-url: https://example.com/register
# AI 网关配置
foundation:
base-url: https://example.com
# 资产存储
asset:
root: ./runtime-assets
# 预配密钥(用于 new-api 回调)
provision-from-ai:
secret: your-secret-key3.2 环境变量
| 变量名 | 说明 | 默认值 |
|---|---|---|
SPRING_DATASOURCE_URL | 数据库连接 URL | - |
SPRING_DATASOURCE_USERNAME | 数据库用户名 | - |
SPRING_DATASOURCE_PASSWORD | 数据库密码 | - |
SPRING_REDIS_HOST | Redis 主机 | localhost |
SPRING_REDIS_PORT | Redis 端口 | 6379 |
NXAI_AUTH_PUBLIC_REGISTER_ENABLED | 是否开放注册 | false |
NXAI_ASSET_ROOT | 资产存储根目录 | ./runtime-assets |
NXAI_PROVISION_FROM_AI_SECRET | 预配密钥 | - |
四、前端配置
4.1 vue.config.js
javascript
module.exports = {
publicPath: '/test/',
devServer: {
proxy: {
'/test/api': {
target: 'http://localhost:8081',
changeOrigin: true,
pathRewrite: { '^/test/api': '/api' }
}
}
}
}4.2 请求基础 URL
前端通过 getRequestBaseUrl() 函数动态获取基础 URL:
javascript
function getRequestBaseUrl() {
if (typeof window !== 'undefined' && window.location && window.location.origin) {
const raw = process.env.BASE_URL || '/';
const prefix = raw.replace(/\/$/, '');
const pathPart = prefix && prefix !== '/' ? prefix : '';
return window.location.origin + pathPart;
}
return '';
}五、部署配置
5.1 Docker Compose(开发环境)
yaml
version: '3.8'
services:
mysql:
image: mysql:8.0.20
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: nxaitest
ports:
- "3306:3306"
redis:
image: redis:6-alpine
ports:
- "6379:6379"
backend:
build: ./nxaitest-backend
ports:
- "8081:8081"
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/nxaitest
- SPRING_REDIS_HOST=redis
frontend:
build: ./nxaitest-frontend
ports:
- "8080:80"
nginx:
image: nginx:alpine
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
ports:
- "8003:80"5.2 Nginx 配置
nginx
server {
listen 80;
server_name localhost;
location /test/api/ {
proxy_pass http://backend:8081/api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /test/ {
proxy_pass http://frontend:80/;
proxy_set_header Host $host;
}
}六、端口说明
| 服务 | 端口 | 说明 |
|---|---|---|
| 后端 API | 8081 | Spring Boot 服务 |
| 前端 | 8080 | Vue 开发服务器 |
| MySQL | 3306 | 数据库 |
| Redis | 6379 | 缓存 |
| Nginx | 8003 | 反向代理(开发环境) |
| Nginx | 80 | 反向代理(生产环境) |
七、启动命令
开发环境
bash
# 启动所有服务
docker-compose up -d
# 单独启动后端
cd nxaitest-backend
mvn spring-boot:run
# 单独启动前端
cd nxaitest-frontend
npm install
npm run dev生产环境
bash
# 构建生产镜像
docker-compose -f docker-compose-prod.yml build
# 启动生产服务
docker-compose -f docker-compose-prod.yml up -d八、API 访问路径
前端访问
| 路径 | 说明 |
|---|---|
http://localhost:8003/test/ | 前端首页 |
http://localhost:8003/test/api/ | 后端 API |
后端直接访问
| 路径 | 说明 |
|---|---|
http://localhost:8081/api/ | 后端 API 根路径 |
九、安全配置
9.1 JWT 密钥
后端使用 JWT 进行认证,密钥配置在 JwtUtil 类中:
java
private static final String SECRET = "your-jwt-secret-key";
private static final long EXPIRATION_TIME = 86400000; // 24小时9.2 限流配置
后端实现了内存滑动窗口限流:
| 配置项 | 说明 |
|---|---|
| 时间窗口 | 1 分钟 |
| 限流阈值 | 可配置 |
| 存储方式 | 内存(进程级) |
9.3 CORS 配置
所有 API 接口均配置了 CORS:
java
@CrossOrigin(origins = "*", maxAge = 3600)十、文档站点
本地开发
bash
cd docs
npm install
npm run docs:dev访问地址:http://localhost:5173
构建生产版本
bash
cd docs
npm run docs:build构建产物输出到 docs/.vitepress/dist 目录。
