diff --git a/.gitignore b/.gitignore index f4016dc4..e204fe12 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,7 @@ nbdist/ *.log.gz *.xml.versionsBackup *.swp +data/ !*/build/*.java !*/build/*.html diff --git a/Dockerfile.backend b/Dockerfile.backend new file mode 100644 index 00000000..87eb5626 --- /dev/null +++ b/Dockerfile.backend @@ -0,0 +1,36 @@ +# RuoYi-AI 后端 Dockerfile +# 基于 Maven + OpenJDK 17 + +FROM maven:3.9-eclipse-temurin-17 AS builder + +# 设置工作目录 +WORKDIR /build + +# 复制 pom.xml 和源码 +COPY pom.xml . +COPY ruoyi-admin ./ruoyi-admin +COPY ruoyi-common ./ruoyi-common +COPY ruoyi-modules ./ruoyi-modules +COPY ruoyi-extend ./ruoyi-extend + + +# 构建项目 (使用 prod profile) +RUN mvn clean package -Pprod -DskipTests + +# 最终运行镜像 +FROM eclipse-temurin:17-jre-alpine + +# 设置工作目录 +WORKDIR /app + +# 从构建阶段复制 jar 包 +COPY --from=builder /build/ruoyi-admin/target/ruoyi-admin.jar ./ruoyi-admin.jar + +# 创建日志目录 +RUN mkdir -p /ruoyi/server/logs + +# 暴露端口 +EXPOSE 6039 + +# 启动命令 +ENTRYPOINT ["java", "-jar", "ruoyi-admin.jar", "--spring.profiles.active=prod"] diff --git a/Dockerfile.mysql b/Dockerfile.mysql new file mode 100644 index 00000000..d5fcecb7 --- /dev/null +++ b/Dockerfile.mysql @@ -0,0 +1,21 @@ +# 基于官方MySQL 8.0镜像构建自定义镜像 +# 构建命令: docker build -t registry.cn-hangzhou.aliyuncs.com/ruoyi-ai/mysql:v3 -f Dockerfile.mysql . +FROM mysql:8.0.33 + +# 设置时区 +ENV TZ=Asia/Shanghai + +# 复制初始化脚本和SQL文件到镜像中 +COPY docs/script/docker/mysql/init/init-db.sh /docker-entrypoint-initdb.d/init-db.sh +COPY docs/script/sql/ruoyi-ai-v3_mysql8.sql /docker-entrypoint-initdb.d/ruoyi-ai-v3_mysql8.sql + +# 设置脚本可执行权限 +RUN chmod +x /docker-entrypoint-initdb.d/init-db.sh + +# MySQL启动参数 +CMD ["--default-authentication-plugin=mysql_native_password", \ + "--character-set-server=utf8mb4", \ + "--collation-server=utf8mb4_general_ci", \ + "--explicit_defaults_for_timestamp=true", \ + "--lower_case_table_names=1", \ + "--skip-ssl"] \ No newline at end of file diff --git a/README.md b/README.md index bb8c4859..37fa4754 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,117 @@ - **安全认证**:Sa-Token + JWT 双重保障 +## 🐳 Docker 部署 + +本项目提供两种 Docker 部署方式: + +### 方式一:一键启动所有服务(推荐) + +使用 `docker-compose-all.yaml` 可以一键启动所有服务(包括后端、管理端、用户端及依赖服务): + +```bash +# 克隆仓库 +git clone https://github.com/ageerle/ruoyi-ai.git +cd ruoyi-ai + +# 启动所有服务(从镜像仓库拉取预构建镜像) +docker-compose -f docker-compose-all.yaml up -d + +# 查看服务状态 +docker-compose -f docker-compose-all.yaml ps + +# 访问服务 +# 管理端: http://localhost:25666 (admin / admin123) +# 用户端: http://localhost:25137 +# 后端API: http://localhost:26039 +``` + +### 方式二:分步部署(源码编译) + +如果您需要从源码构建后端服务,请按照以下步骤操作: + +#### 第一步:部署后端服务 + +```bash +# 进入后端项目目录 +cd ruoyi-ai + +# 启动后端服务(源码编译构建) +docker-compose up -d --build + +# 等待后端服务启动完成 +docker-compose logs -f backend +``` + +#### 第二步:部署管理端 + +```bash +# 进入管理端项目目录 +cd ruoyi-admin + +# 构建并启动管理端 +docker-compose up -d --build + +# 访问管理端 +# 地址: http://localhost:5666 +``` + +#### 第三步:部署用户端(可选) + +```bash +# 进入用户端项目目录 +cd ruoyi-web + +# 构建并启动用户端 +docker-compose up -d --build + +# 访问用户端 +# 地址: http://localhost:5137 +``` + +### 服务端口说明 + +| 服务 | 一键启动端口 | 分步部署端口 | 说明 | +|------|-------------|-------------|------| +| 管理端 | 25666 | 5666 | 管理后台访问地址 | +| 用户端 | 25137 | 5137 | 用户前端访问地址 | +| 后端服务 | 26039 | 6039 | 后端 API 服务 | +| MySQL | 23306 | 23306 | 数据库服务 | +| Redis | 26379 | 6379 | 缓存服务 | +| Weaviate | 28080 | 28080 | 向量数据库 | +| MinIO API | 29000 | 9000 | 对象存储 API | +| MinIO Console | 29090 | 9090 | 对象存储控制台 | + +### 镜像仓库 + +所有镜像托管在阿里云容器镜像服务: + +``` +crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai +``` + +可用镜像: +- `mysql:v3` - MySQL 数据库(包含初始化 SQL) +- `redis:6.2` - Redis 缓存 +- `weaviate:1.30.0` - 向量数据库 +- `minio:latest` - 对象存储 +- `ruoyi-ai-backend:latest` - 后端服务 +- `ruoyi-ai-admin:latest` - 管理端前端 +- `ruoyi-ai-web:latest` - 用户端前端 + +### 常用命令 + +```bash +# 停止所有服务 +docker-compose -f docker-compose-all.yaml down + +# 查看服务日志 +docker-compose -f docker-compose-all.yaml logs -f [服务名] + +# 重启某个服务 +docker-compose -f docker-compose-all.yaml restart [服务名] +``` + ## 📚 使用文档 想要深入了解安装部署、功能配置和二次开发? diff --git a/docker-compose-all.yaml b/docker-compose-all.yaml new file mode 100644 index 00000000..886d5ec6 --- /dev/null +++ b/docker-compose-all.yaml @@ -0,0 +1,180 @@ +# RuoYi-AI 一键启动全部服务 +# 使用方式: docker-compose up -d +# +# 包含服务: +# - MySQL 8.0 (数据库,包含初始化SQL) +# - Redis 6.2 (缓存) +# - Weaviate (向量数据库) +# - MinIO (对象存储) +# - RuoYi-Backend (后端服务) +# - RuoYi-Admin (管理端前端) +# - RuoYi-Web (用户端前端) +# +# 镜像仓库地址: crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai + +version: '3.8' + +services: + # ==================== MySQL 数据库 ==================== + mysql: + # 阿里云镜像地址(包含初始化SQL) + image: crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai/mysql:v3 + container_name: ruoyi-ai-mysql + restart: always + ports: + - "23306:3306" + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: ruoyi-ai-agent + TZ: Asia/Shanghai + volumes: + - mysql-data:/var/lib/mysql + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-proot"] + interval: 15s + timeout: 10s + retries: 10 + start_period: 60s + networks: + - ruoyi-net + + # ==================== Redis 缓存 ==================== + redis: + image: crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai/redis:6.2 + container_name: ruoyi-ai-redis + restart: always + ports: + - "26379:6379" + volumes: + - redis-data:/data + command: redis-server --appendonly yes + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 5 + networks: + - ruoyi-net + + # ==================== Weaviate 向量数据库 ==================== + weaviate: + image: crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai/weaviate:1.30.0 + container_name: ruoyi-ai-weaviate + restart: always + ports: + - "28080:8080" + environment: + QUERY_DEFAULTS_LIMIT: 25 + AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: true + PERSISTENCE_DATA_PATH: /var/lib/weaviate + DEFAULT_VECTORIZER_MODULE: none + ENABLE_MODULES: text2vec-cohere,text2vec-huggingface,text2vec-palm,text2vec-openai,generative-openai,generative-cohere,generative-palm,ref2vec-centroid,reranker-cohere,qna-openai + CLUSTER_HOSTNAME: node1 + volumes: + - weaviate-data:/var/lib/weaviate + networks: + - ruoyi-net + + # ==================== MinIO 对象存储 ==================== + minio: + image: crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai/minio:latest + container_name: ruoyi-ai-minio + restart: always + ports: + - "29000:9000" + - "29090:9090" + environment: + MINIO_ROOT_USER: ruoyi + MINIO_ROOT_PASSWORD: ruoyi123 + volumes: + - minio-data:/data + command: server /data --console-address ":9090" + networks: + - ruoyi-net + + # ==================== RuoYi-AI 后端服务 ==================== + backend: + image: crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai/ruoyi-ai-backend:latest + container_name: ruoyi-ai-backend + restart: always + ports: + - "26039:6039" + environment: + TZ: Asia/Shanghai + # MySQL 配置 + SPRING_DATASOURCE_DYNAMIC_PRIMARY: master + SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_DRIVERCLASSNAME: com.mysql.cj.jdbc.Driver + SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL: jdbc:mysql://mysql:3306/ruoyi-ai-agent?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true + SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_USERNAME: root + SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD: root + # Redis 配置 + SPRING_DATA_REDIS_HOST: redis + SPRING_DATA_REDIS_PORT: 6379 + SPRING_DATA_REDIS_DATABASE: 0 + # 日志配置 + LOGGING_LEVEL_ORG_RUOYI: info + LOGGING_LEVEL_ORG_SPRINGFRAMEWORK: warn + SYS_UPLOAD_PATH: /ruoyi/upload + volumes: + - logs-data:/ruoyi/server/logs + - upload-data:/ruoyi/upload + depends_on: + mysql: + condition: service_healthy + redis: + condition: service_started + networks: + - ruoyi-net + + # ==================== RuoYi-AI 管理端前端 ==================== + admin-frontend: + image: crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai/ruoyi-ai-admin:latest + container_name: ruoyi-ai-admin + restart: always + ports: + - "25666:5666" + environment: + # 后端 API 地址 - 运行时动态配置(无需重新构建镜像) + # nginx upstream 配置不需要 http:// 前缀,直接使用 host:port + UPSTREAM_HOST: backend:6039 + # 资源限制 - 防止 CPU 和内存耗尽 + deploy: + resources: + limits: + cpus: '2' + memory: 3G + reservations: + cpus: '1' + memory: 1G + depends_on: + - backend + networks: + - ruoyi-net + + # ==================== RuoYi-AI 用户端前端 ==================== + web-frontend: + image: crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai/ruoyi-ai-web:latest + container_name: ruoyi-ai-web + restart: always + ports: + - "25137:5137" + environment: + UPSTREAM_URL: http://backend:6039 + depends_on: + - backend + networks: + - ruoyi-net + +# ==================== 网络配置 ==================== +networks: + ruoyi-net: + driver: bridge + +# ==================== 数据卷配置 ==================== +volumes: + mysql-data: + redis-data: + weaviate-data: + minio-data: + logs-data: + upload-data: \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 00000000..eac534d8 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,144 @@ +# RuoYi-AI 一键启动后端服务 +# 使用方式: docker-compose up -d --build +# +# 包含服务: +# - MySQL 8.0 (数据库) +# - Redis 6.2 (缓存) +# - Weaviate (向量数据库) +# - MinIO (对象存储) +# - RuoYi-Backend (后端服务,源码编译) + +services: + # MySQL 数据库 + mysql: + image: mysql:8.0.33 + container_name: ruoyi-ai-mysql + restart: always + ports: + - "23306:3306" + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: ruoyi-ai-agent + TZ: Asia/Shanghai + volumes: + - ./docs/script/docker/mysql/init/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh:ro + - ./docs/script/sql/ruoyi-ai-v3_mysql8.sql:/docker-entrypoint-initdb.d/ruoyi-ai-v3_mysql8.sql:ro + - mysql-data:/var/lib/mysql + command: + --default-authentication-plugin=mysql_native_password + --character-set-server=utf8mb4 + --collation-server=utf8mb4_general_ci + --explicit_defaults_for_timestamp=true + --lower_case_table_names=1 + --skip-ssl + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-proot"] + interval: 15s + timeout: 10s + retries: 10 + start_period: 60s + networks: + - ruoyi-net + + # Redis 缓存 + redis: + image: redis:6.2 + container_name: ruoyi-ai-redis + restart: always + ports: + - "6379:6379" + volumes: + - redis-data:/data + command: redis-server --appendonly yes + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 5 + networks: + - ruoyi-net + + # Weaviate 向量数据库 + weaviate: + image: semitechnologies/weaviate:1.30.0 + container_name: ruoyi-ai-weaviate + restart: always + ports: + - "28080:8080" + environment: + QUERY_DEFAULTS_LIMIT: 25 + AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: true + PERSISTENCE_DATA_PATH: /var/lib/weaviate + DEFAULT_VECTORIZER_MODULE: none + ENABLE_MODULES: text2vec-cohere,text2vec-huggingface,text2vec-palm,text2vec-openai,generative-openai,generative-cohere,generative-palm,ref2vec-centroid,reranker-cohere,qna-openai + CLUSTER_HOSTNAME: node1 + volumes: + - weaviate-data:/var/lib/weaviate + networks: + - ruoyi-net + + # MinIO 对象存储 + minio: + image: minio/minio + container_name: ruoyi-ai-minio + restart: always + ports: + - "9000:9000" + - "9090:9090" + environment: + MINIO_ROOT_USER: ruoyi + MINIO_ROOT_PASSWORD: ruoyi123 + volumes: + - minio-data:/data + command: server /data --console-address ":9090" + networks: + - ruoyi-net + + # RuoYi-AI 后端服务 (源码编译) + backend: + build: + context: . + dockerfile: Dockerfile.backend + container_name: ruoyi-ai-backend + restart: always + ports: + - "26039:6039" + environment: + TZ: Asia/Shanghai + # MySQL 配置 + SPRING_DATASOURCE_DYNAMIC_PRIMARY: master + SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_DRIVERCLASSNAME: com.mysql.cj.jdbc.Driver + SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL: jdbc:mysql://mysql:3306/ruoyi-ai-agent?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true + SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_USERNAME: root + SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD: root + # Redis 配置 + SPRING_DATA_REDIS_HOST: redis + SPRING_DATA_REDIS_PORT: 6379 + SPRING_DATA_REDIS_DATABASE: 0 + # 日志配置 + LOGGING_LEVEL_ORG_RUOYI: info + LOGGING_LEVEL_ORG_SPRINGFRAMEWORK: warn + SYS_UPLOAD_PATH: /ruoyi/upload # 新增:对应 sys.upload.path + volumes: + - logs-data:/ruoyi/server/logs + - upload-data:/ruoyi/upload + depends_on: + mysql: + condition: service_healthy + redis: + condition: service_started + networks: + - ruoyi-net + +networks: + ruoyi-net: + driver: bridge + +# 数据卷 支持手动指定 空为默认值 +volumes: + mysql-data: + redis-data: + weaviate-data: + minio-data: + logs-data: + upload-data: diff --git a/docs/script/docker/mysql/init/init-db.sh b/docs/script/docker/mysql/init/init-db.sh new file mode 100644 index 00000000..46b6fc6a --- /dev/null +++ b/docs/script/docker/mysql/init/init-db.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# 数据库初始化脚本 +# 使用 --force 参数确保即使出错也继续执行 + +echo "开始初始化数据库..." + +# 使用 --force 参数忽略错误继续执行 +mysql -uroot -proot ruoyi-ai-agent --force < /docker-entrypoint-initdb.d/ruoyi-ai-v3_mysql8.sql + +echo "数据库初始化完成" diff --git a/docs/script/sql/ruoyi-ai-v3_mysql8.sql b/docs/script/sql/ruoyi-ai-v3_mysql8.sql index 589d8780..8d1364a6 100644 --- a/docs/script/sql/ruoyi-ai-v3_mysql8.sql +++ b/docs/script/sql/ruoyi-ai-v3_mysql8.sql @@ -16,6 +16,8 @@ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; +-- 忽略所有错误,继续执行 +SET sql_mode = ''; -- ---------------------------- -- Table structure for chat_config @@ -2083,6 +2085,7 @@ CREATE TABLE `sys_client` ( -- ---------------------------- INSERT INTO `sys_client` VALUES (1, 'e5cd7e4891bf95d1d19206ce24a7b32e', 'pc', 'pc123', 'password,social', 'pc', 1800, 604800, '0', '0', 103, 1, '2026-02-03 05:14:53', 1, '2026-02-03 05:14:53'); INSERT INTO `sys_client` VALUES (2, '428a8310cd442757ae699df5d894f051', 'app', 'app123', 'password,sms,social', 'android', 1800, 604800, '0', '0', 103, 1, '2026-02-03 05:14:53', 1, '2026-02-03 05:14:53'); +INSERT INTO `sys_client` VALUES (2033738530356912129, '0d4c873ff6146ecd7f38e2e45526ab1b', 'web', 'web123', 'sms,email,password', 'pc', 1800, 604800, '0', '0', 103, 1, '2026-03-17 10:53:45', 1, '2026-03-17 10:59:16'); -- ---------------------------- -- Table structure for sys_config diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index 42ef9fff..7001224f 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -58,15 +58,15 @@ spring: driverClassName: com.mysql.cj.jdbc.Driver # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) - url: jdbc:mysql://127.0.0.1:3306/ruoyi_ai_agent?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3306/ruoyi-ai-agent?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true username: root password: root - agent: - url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true - # url: jdbc:mysql://localhost:3306/agent_db - username: root - password: root - driverClassName: com.mysql.cj.jdbc.Driver +# agent: +# url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true +# # url: jdbc:mysql://localhost:3306/agent_db +# username: root +# password: root +# driverClassName: com.mysql.cj.jdbc.Driver hikari: # 最大连接池数量 diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml new file mode 100644 index 00000000..7001224f --- /dev/null +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -0,0 +1,271 @@ +--- # 监控中心配置 +spring.boot.admin.client: + # 增加客户端开关 + enabled: false + url: http://localhost:9090/admin + instance: + service-host-type: IP + metadata: + username: ${spring.boot.admin.client.username} + userpassword: ${spring.boot.admin.client.password} + username: @monitor.username@ + password: @monitor.password@ + +--- # mcp配置信息 +mcp: + sse: + enabled: false + url: http://localhost:8085/sse + +--- # 上传文件地址 +sys: + upload: + path: D:\\DownLoad + +--- # snail-job 配置 +snail-job: + enabled: false + # 需要在 SnailJob 后台组管理创建对应名称的组,然后创建任务的时候选择对应的组,才能正确分派任务 + group: "ruoyi_group" + # SnailJob 接入验证令牌 详见 script/sql/ry_job.sql `sj_group_config` 表 + token: "SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT" + server: + host: 127.0.0.1 + port: 17888 + # 命名空间UUID 详见 script/sql/ry_job.sql `sj_namespace`表`unique_id`字段 + namespace: ${spring.profiles.active} + # 随主应用端口漂移 + port: 2${server.port} + # 客户端ip指定 + host: + +--- # 数据源配置 +spring: + datasource: + type: com.zaxxer.hikari.HikariDataSource + # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content + dynamic: + # 性能分析插件(有性能损耗 不建议生产环境使用) + p6spy: true + # 设置默认的数据源或者数据源组,默认值即为 master + primary: master + # 严格模式 匹配不到数据源则报错 + strict: true + datasource: + # 主库数据源 + master: + type: ${spring.datasource.type} + driverClassName: com.mysql.cj.jdbc.Driver + # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 + # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) + url: jdbc:mysql://127.0.0.1:3306/ruoyi-ai-agent?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + username: root + password: root +# agent: +# url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true +# # url: jdbc:mysql://localhost:3306/agent_db +# username: root +# password: root +# driverClassName: com.mysql.cj.jdbc.Driver + + hikari: + # 最大连接池数量 + maxPoolSize: 20 + # 最小空闲线程数量 + minIdle: 10 + # 配置获取连接等待超时的时间 + connectionTimeout: 30000 + # 校验超时时间 + validationTimeout: 5000 + # 空闲连接存活最大时间,默认10分钟 + idleTimeout: 600000 + # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟 + maxLifetime: 1800000 + # 多久检查一次连接的活性 + keepaliveTime: 30000 + + + +--- # 上传文件地址 +sys: + upload: + path: D:\\DownLoad + +--- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉) +spring.data: + redis: + # 地址 + host: localhost + # 端口,默认为6379 + port: 6379 + # 数据库索引 + database: 0 + # redis 密码必须配置 +# password: 123456 + # 连接超时时间 + timeout: 10s + # 是否开启ssl + ssl.enabled: false + +# redisson 配置 +redisson: + # redis key前缀 + keyPrefix: + # 线程池数量 + threads: 4 + # Netty线程池数量 + nettyThreads: 8 + # 单节点配置 + singleServerConfig: + # 客户端名称 不能用中文 + clientName: ruoyi-ai + # 最小空闲连接数 + connectionMinimumIdleSize: 8 + # 连接池大小 + connectionPoolSize: 32 + # 连接空闲超时,单位:毫秒 + idleConnectionTimeout: 10000 + # 命令等待超时,单位:毫秒 + timeout: 3000 + # 发布和订阅连接池大小 + subscriptionConnectionPoolSize: 50 + +--- # mail 邮件发送 +mail: + enabled: false + host: smtp.163.com + port: 465 + # 是否需要用户名密码验证 + auth: true + # 发送方,遵循RFC-822标准 + from: xxx@163.com + # 用户名(注意:如果使用foxmail邮箱,此处user为qq号) + user: xxx@163.com + # 密码(注意,某些邮箱需要为SMTP服务单独设置密码,详情查看相关帮助) + pass: xxxxxxxxxx + # 使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。 + starttlsEnable: true + # 使用SSL安全连接 + sslEnable: true + # SMTP超时时长,单位毫秒,缺省值不超时 + timeout: 0 + # Socket连接超时值,单位毫秒,缺省值不超时 + connectionTimeout: 0 + +--- # sms 短信 支持 阿里云 腾讯云 云片 等等各式各样的短信服务商 +# https://sms4j.com/doc3/ 差异配置文档地址 支持单厂商多配置,可以配置多个同时使用 +sms: + # 配置源类型用于标定配置来源(interface,yaml) + config-type: yaml + # 用于标定yml中的配置是否开启短信拦截,接口配置不受此限制 + restricted: true + # 短信拦截限制单手机号每分钟最大发送,只对开启了拦截的配置有效 + minute-max: 1 + # 短信拦截限制单手机号每日最大发送量,只对开启了拦截的配置有效 + account-max: 30 + # 以下配置来自于 org.dromara.sms4j.provider.config.BaseConfig类中 + blends: + # 唯一ID 用于发送短信寻找具体配置 随便定义别用中文即可 + # 可以同时存在两个相同厂商 例如: ali1 ali2 两个不同的阿里短信账号 也可用于区分租户 + config1: + # 框架定义的厂商名称标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分 + supplier: alibaba + # 有些称为accessKey有些称之为apiKey,也有称为sdkKey或者appId。 + access-key-id: 您的accessKey + # 称为accessSecret有些称之为apiSecret + access-key-secret: 您的accessKeySecret + signature: 您的短信签名 + sdk-app-id: 您的sdkAppId + config2: + # 厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分 + supplier: tencent + access-key-id: 您的accessKey + access-key-secret: 您的accessKeySecret + signature: 您的短信签名 + sdk-app-id: 您的sdkAppId + + +--- # 三方授权 +justauth: + # 前端外网访问地址 + address: http://localhost:80 + type: + maxkey: + # maxkey 服务器地址 + # 注意 如下均配置均不需要修改 maxkey 已经内置好了数据 + server-url: http://sso.maxkey.top + client-id: 876892492581044224 + client-secret: x1Y5MTMwNzIwMjMxNTM4NDc3Mzche8 + redirect-uri: ${justauth.address}/social-callback?source=maxkey + topiam: + # topiam 服务器地址 + server-url: http://127.0.0.1:1898/api/v1/authorize/y0q************spq***********8ol + client-id: 449c4*********937************759 + client-secret: ac7***********1e0************28d + redirect-uri: ${justauth.address}/social-callback?source=topiam + scopes: [openid, email, phone, profile] + qq: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=qq + union-id: false + weibo: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=weibo + gitee: + client-id: 91436b7940090d09c72c7daf85b959cfd5f215d67eea73acbf61b6b590751a98 + client-secret: 02c6fcfd70342980cd8dd2f2c06c1a350645d76c754d7a264c4e125f9ba915ac + redirect-uri: ${justauth.address}/social-callback?source=gitee + dingtalk: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=dingtalk + baidu: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=baidu + csdn: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=csdn + coding: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=coding + coding-group-name: xx + oschina: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=oschina + alipay_wallet: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=alipay_wallet + alipay-public-key: MIIB**************DAQAB + wechat_open: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=wechat_open + wechat_mp: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=wechat_mp + wechat_enterprise: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=wechat_enterprise + agent-id: 1000002 + gitlab: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=gitlab + gitea: + # 前端改动 https://gitee.com/JavaLionLi/plus-ui/pulls/204 + # gitea 服务器地址 + server-url: https://demo.gitea.com + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=gitea + +AGENT_ALLOWED_TABLES: "abtest_rule,abtest_project,agent_ban_log,agent_ban_logs,agent_install_sub_task,agent_install_sum_task,agent_install_task"