Compare commits
5 Commits
v2.1.0
...
cbe882af66
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cbe882af66 | ||
|
|
1d51a103d0 | ||
|
|
53e3180658 | ||
|
|
e43e14454d | ||
|
|
a4e995d46c |
71
README.md
@@ -36,37 +36,30 @@
|
|||||||
|
|
||||||
## 快速启动
|
## 快速启动
|
||||||
|
|
||||||
### 拉取镜像(最低配置2H2G):
|
|
||||||
```bash
|
|
||||||
script/deploy/deploy目录下执行: docker-compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
### 通过脚本启动(最低配置4H4G):
|
|
||||||
1. 确认系统内已经安装好以下软件
|
1. 确认系统内已经安装好以下软件
|
||||||
- docker
|
docker
|
||||||
- docker-compose
|
docker-compose
|
||||||
- git
|
git
|
||||||
- unzip
|
unzip
|
||||||
|
|
||||||
2. **克隆项目**
|
2. **克隆项目**
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/ageerle/ruoyi-ai
|
git clone https://github.com/ageerle/ruoyi-ai
|
||||||
cd ruoyi-ai/script/deploy/one-step-script
|
cd ruoyi-ai/docker-deploy/one-step-script/
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **启动部署脚本**
|
3. **启动部署脚本**
|
||||||
|
|
||||||
中文界面部署脚本(拉取gitee仓库):
|
中文界面部署脚本:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./deploy-cn.sh
|
./deploy-cn.sh
|
||||||
```
|
```
|
||||||
按照脚本提示一步步操作,如果是一台新服务器,选择默认配置,直接回车即可。
|

|
||||||
<img src="image/deploy-01.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|

|
||||||
|

|
||||||
|
|
||||||
耐心等待安装完成...
|
英文界面部署脚本:
|
||||||
|
|
||||||
英文界面部署脚本(拉取github仓库):
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./deploy-en.sh
|
./deploy-en.sh
|
||||||
@@ -97,6 +90,7 @@
|
|||||||
- [项目演示](#项目演示)
|
- [项目演示](#项目演示)
|
||||||
- [管理端](#管理端)
|
- [管理端](#管理端)
|
||||||
- [用户端](#用户端)
|
- [用户端](#用户端)
|
||||||
|
- [小程序端](#小程序端)
|
||||||
- [开发环境](#开发环境)
|
- [开发环境](#开发环境)
|
||||||
- [项目结构](#项目结构)
|
- [项目结构](#项目结构)
|
||||||
- [ruoyi-ai](#ruoyi-ai)
|
- [ruoyi-ai](#ruoyi-ai)
|
||||||
@@ -111,20 +105,20 @@
|
|||||||
|
|
||||||
### 系统体验
|
### 系统体验
|
||||||
- 用户端:https://web.pandarobot.chat
|
- 用户端:https://web.pandarobot.chat
|
||||||
- 演示账号: demo 密码:demo123
|
|
||||||
- 管理端:https://admin.pandarobot.chat
|
- 管理端:https://admin.pandarobot.chat
|
||||||
- 演示账号: admin 密码:admin123
|
- 用户名: admin 密码:admin123
|
||||||
- 商业版:体验商业版请联系下方小助手获取演示地址(预计6月份上线)。
|
|
||||||
|
|
||||||
### 源码地址
|
### 源码地址
|
||||||
[1]github
|
[1]github
|
||||||
- 前端服务-用户端: https://github.com/ageerle/ruoyi-web
|
- 前端服务-用户端: https://github.com/ageerle/ruoyi-web
|
||||||
- 前端服务-管理端: https://github.com/ageerle/ruoyi-admin
|
- 前端服务-管理端: https://github.com/ageerle/ruoyi-admin
|
||||||
|
- 前端服务-小程序端: https://github.com/ageerle/ruoyi-uniapp
|
||||||
- 后端服务:https://github.com/ageerle/ruoyi-ai
|
- 后端服务:https://github.com/ageerle/ruoyi-ai
|
||||||
|
|
||||||
[2]gitcode
|
[2]gitcode
|
||||||
- 前端服务-用户端:https://gitcode.com/ageerle/ruoyi-web
|
- 前端服务-用户端:https://gitcode.com/ageerle/ruoyi-web
|
||||||
- 前端服务-管理端: https://gitcode.com/ageerle/ruoyi-admin
|
- 前端服务-管理端: https://gitcode.com/ageerle/ruoyi-admin
|
||||||
|
- 前端服务-小程序端: https://gitcode.com/ageerle/ruoyi-uniapp
|
||||||
- 后端服务:https://gitcode.com/ageerle/ruoyi-ai
|
- 后端服务:https://gitcode.com/ageerle/ruoyi-ai
|
||||||
|
|
||||||
### 配套文档
|
### 配套文档
|
||||||
@@ -133,7 +127,7 @@
|
|||||||
|
|
||||||
### 核心功能与技术亮点
|
### 核心功能与技术亮点
|
||||||
#### 1. 全栈式开源系统
|
#### 1. 全栈式开源系统
|
||||||
- 全套开源系统:提供完整的前端应用、后台管理,基于MIT协议,开箱即用。
|
- 全套开源系统:提供完整的前端应用、后台管理以及小程序应用,基于MIT协议,开箱即用。
|
||||||
#### 2. 本地化 RAG 方案
|
#### 2. 本地化 RAG 方案
|
||||||
- 基于 **Langchain4j** 框架,支持 Milvus/Weaviate/Qdrant 向量库,结合 BGE-large-zh-v1.5 本地向量化模型 实现高效文档检索与知识库构建。
|
- 基于 **Langchain4j** 框架,支持 Milvus/Weaviate/Qdrant 向量库,结合 BGE-large-zh-v1.5 本地向量化模型 实现高效文档检索与知识库构建。
|
||||||
- 支持 本地 LLM 接入,结合私有知识库实现安全可控的问答系统,避免依赖云端服务的隐私风险。
|
- 支持 本地 LLM 接入,结合私有知识库实现安全可控的问答系统,避免依赖云端服务的隐私风险。
|
||||||
@@ -157,6 +151,13 @@
|
|||||||
<img src="image/mcp-04.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
<img src="image/mcp-04.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
#### 管理端
|
||||||
|
<div style="display: flex; flex-wrap: wrap; gap: 20px; justify-content: center;">
|
||||||
|
<img src="image/02.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
||||||
|
<img src="image/03.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
||||||
|
<img src="image/04.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
||||||
|
<img src="image/05.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
#### 用户端
|
#### 用户端
|
||||||
<div style="display: flex; flex-wrap: wrap; gap: 20px; justify-content: center;">
|
<div style="display: flex; flex-wrap: wrap; gap: 20px; justify-content: center;">
|
||||||
@@ -166,15 +167,12 @@
|
|||||||
<img src="image/11.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
<img src="image/11.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
#### 管理端
|
#### 小程序端
|
||||||
<div style="display: flex; flex-wrap: wrap; gap: 20px; justify-content: center;">
|
<div style="display: flex; flex-wrap: wrap; gap: 20px; justify-content: flex-start;">
|
||||||
<img src="image/02.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
<img src="image/06.png" alt="drawing" style="width: 320px; height: 600px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
||||||
<img src="image/03.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
<img src="image/07.png" alt="drawing" style="width: 320px; height: 600px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
||||||
<img src="image/04.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
|
||||||
<img src="image/05.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
### 开发环境
|
### 开发环境
|
||||||
|
|
||||||
1. jdk 17
|
1. jdk 17
|
||||||
@@ -318,19 +316,16 @@
|
|||||||
|
|
||||||
### 附:技术讨论群
|
### 附:技术讨论群
|
||||||
|
|
||||||
#### 技术交流(如需进群请添加小助手)
|
|
||||||
<div style="display: flex; flex-wrap: wrap; gap: 20px; justify-content: center;">
|
|
||||||
<img src="image/wx.png" alt="drawing" style="width: 400px; height: 400px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
#### 进群学习
|
#### 进群学习
|
||||||
🏠 小助手wx:ruoyi-ai(加人备注:ruoyi-ai)
|
🏠 wx:ruoyi-ai(加人备注:ruoyi-ai)
|
||||||
🏠 小助手qq:1603234088 (加人备注:ruoyi-ai)
|
|
||||||
|
|
||||||
👏👏👏 ruoyi-ai官方交流群(qq区)
|
<img src="image/小助手wx.png" alt="drawing" style="width: 400px; height: 400px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
||||||
|
|
||||||
|
🏠 qq:1603234088 (加人备注:ruoyi-ai)
|
||||||
|
|
||||||
|
👏👏👏 ruoyi-ai官方交流1群(qq区):1034554687
|
||||||
|
|
||||||
<div style="display: flex; flex-wrap: wrap; gap: 20px; justify-content: center;">
|
<div style="display: flex; flex-wrap: wrap; gap: 20px; justify-content: center;">
|
||||||
<img src="image/qq.png" alt="drawing" style="width: 400px; height: 400px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
<img src="image/QQ区-官方交流1群.png" alt="drawing" style="width: 400px; height: 400px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import {defineConfig} from '@vben/vite-config';
|
import { defineConfig } from '@vben/vite-config';
|
||||||
|
|
||||||
// 自行取消注释来启用按需导入功能
|
// 自行取消注释来启用按需导入功能
|
||||||
// import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers';
|
// import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers';
|
||||||
0
script/deploy/build-docker-images/scripts/remove-blank.sh → docker-deploy/build-docker-images/scripts/remove-blank.sh
Normal file → Executable file
6
docker-deploy/deploy/copy-mysql-init-script.sh
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
rm -f /root/ruoyi-ai-docker/deploy/mysql-init/*.sql
|
||||||
|
cp /root/ruoyi-ai-docker/source-code/ruoyi-ai-backend/script/sql/ruoyi-ai.sql /root/ruoyi-ai-docker/deploy/mysql-init/01_ruoyi-ai.sql
|
||||||
|
cp /root/ruoyi-ai-docker/source-code/ruoyi-ai-backend/script/sql/update/20250407.sql /root/ruoyi-ai-docker/deploy/mysql-init/02_update_20250407.sql
|
||||||
|
cp /root/ruoyi-ai-docker/source-code/ruoyi-ai-backend/script/sql/update/20250505.sql /root/ruoyi-ai-docker/deploy/mysql-init/03_update_20250505.sql
|
||||||
|
cp /root/ruoyi-ai-docker/source-code/ruoyi-ai-backend/script/sql/update/20250509.sql /root/ruoyi-ai-docker/deploy/mysql-init/04_update_20250509.sql
|
||||||
4
docker-deploy/deploy/mysql-init/02_update_20250407.sql
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
INSERT INTO `chat_model` (`id`, `tenant_id`, `category`, `model_name`, `model_describe`, `model_price`, `model_type`, `model_show`, `system_prompt`, `api_host`, `api_key`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1907575746601119746, '000000', 'vector', 'text-embedding-3-small', 'text-embedding-3-small', 0, '2', '0', NULL, 'https://api.pandarobot.chat/', 'sk-cdBlIaZcufccm2RaDe547cBd054d49C7B0782eCa72A0052b', 103, 1, '2025-04-03 07:27:54', 1, '2025-04-03 07:27:54', 'text-embedding-3-small');
|
||||||
|
INSERT INTO `chat_model` (`id`, `tenant_id`, `category`, `model_name`, `model_describe`, `model_price`, `model_type`, `model_show`, `system_prompt`, `api_host`, `api_key`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1907576007017066497, '000000', 'vector', 'quentinz/bge-large-zh-v1.5', 'bge-large-zh-v1.5', 0, '2', '0', NULL, 'http://127.0.0.1:11434/', 'cdBlIaZcufccm2RaDe547cBd054d49C7B0782eCa72A0052b', 103, 1, '2025-04-03 07:28:56', 1, '2025-04-03 07:28:56', 'bge-large-zh-v1.5');
|
||||||
|
INSERT INTO `chat_model` (`id`, `tenant_id`, `category`, `model_name`, `model_describe`, `model_price`, `model_type`, `model_show`, `system_prompt`, `api_host`, `api_key`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1907576806191362049, '000000', 'vector', 'nomic-embed-text', 'nomic-embed-text', 0, '2', '0', NULL, 'http://127.0.0.1:11434/', 'nomic-embed-text', 103, 1, '2025-04-03 07:32:06', 1, '2025-04-03 07:32:06', 'nomic-embed-text');
|
||||||
|
INSERT INTO `chat_model` (`id`, `tenant_id`, `category`, `model_name`, `model_describe`, `model_price`, `model_type`, `model_show`, `system_prompt`, `api_host`, `api_key`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1907577073490161665, '000000', 'vector', 'snowflake-arctic-embed', 'snowflake-arctic-embed', 0, '2', '0', NULL, 'http://127.0.0.1:11434/', 'snowflake-arctic-embed', 103, 1, '2025-04-03 07:33:10', 1, '2025-04-03 07:33:10', 'snowflake-arctic-embed');
|
||||||
42
docker-deploy/deploy/mysql-init/03_update_20250505.sql
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
Navicat MySQL Data Transfer
|
||||||
|
|
||||||
|
Source Server : 129.211.24.7
|
||||||
|
Source Server Type : MySQL
|
||||||
|
Source Server Version : 50744
|
||||||
|
Source Host : 129.211.24.7:3306
|
||||||
|
Source Schema : ry-vue
|
||||||
|
|
||||||
|
Target Server Type : MySQL
|
||||||
|
Target Server Version : 50744
|
||||||
|
File Encoding : 65001
|
||||||
|
|
||||||
|
Date: 05/05/2025 15:01:08
|
||||||
|
*/
|
||||||
|
|
||||||
|
SET NAMES utf8mb4;
|
||||||
|
SET FOREIGN_KEY_CHECKS = 0;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for chat_session
|
||||||
|
-- ----------------------------
|
||||||
|
DROP TABLE IF EXISTS `chat_session`;
|
||||||
|
CREATE TABLE `chat_session` (
|
||||||
|
`id` bigint(20) NOT NULL COMMENT '主键',
|
||||||
|
`user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户id',
|
||||||
|
`session_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '会话标题',
|
||||||
|
`session_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '会话内容',
|
||||||
|
`create_dept` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '部门',
|
||||||
|
`create_by` bigint(20) NULL DEFAULT NULL COMMENT '创建者',
|
||||||
|
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||||
|
`update_by` bigint(20) NULL DEFAULT NULL COMMENT '更新者',
|
||||||
|
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||||
|
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||||
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
|
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会话管理' ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
|
SET FOREIGN_KEY_CHECKS = 1;
|
||||||
|
|
||||||
|
ALTER TABLE `chat_message`
|
||||||
|
ADD COLUMN `session_id` bigint(20) NULL COMMENT '会话id' AFTER `id`;
|
||||||
|
|
||||||
4
docker-deploy/deploy/mysql-init/04_update_20250509.sql
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
ALTER TABLE `chat_model`
|
||||||
|
ADD COLUMN `api_url` varchar(50) NULL COMMENT '请求后缀' AFTER `api_key`;
|
||||||
|
|
||||||
|
INSERT INTO `chat_config` (`id`, `category`, `config_name`, `config_value`, `config_dict`, `create_dept`, `create_time`, `create_by`, `update_by`, `update_time`, `remark`, `version`, `del_flag`, `update_ip`, `tenant_id`) VALUES (1779450794872414211, 'chat', 'apiUrl', 'v1/chat/completions', 'API 请求后缀', 103, '2024-04-14 18:05:05', '1', '1', '2025-04-23 22:29:04', NULL, NULL, '0', NULL, 0);
|
||||||
2
docker-deploy/deploy/update_ruoyi-qi-sql.sh
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
sed -i 's#127.0.0.1:6038#weaviate:8080#g' ./mysql-init/01_ruoyi-ai.sql
|
||||||
42
script/deploy/one-step-script/deploy-cn.sh → docker-deploy/one-step-script/deploy-cn.sh
Normal file → Executable file
@@ -23,7 +23,7 @@ DEPLOY_DIR="${user_input:-${PWD}/ruoyi-ai-deploy}"
|
|||||||
if [ -d "$DEPLOY_DIR" ]; then
|
if [ -d "$DEPLOY_DIR" ]; then
|
||||||
echo "警告:目录 $DEPLOY_DIR 已存在!"
|
echo "警告:目录 $DEPLOY_DIR 已存在!"
|
||||||
read -p "您想删除它吗?[y/N]: " delete_choice
|
read -p "您想删除它吗?[y/N]: " delete_choice
|
||||||
|
|
||||||
case "${delete_choice:-N}" in
|
case "${delete_choice:-N}" in
|
||||||
[Yy]* )
|
[Yy]* )
|
||||||
echo "正在删除现有目录..."
|
echo "正在删除现有目录..."
|
||||||
@@ -235,8 +235,8 @@ if [[ "${BUILD_CHOICE}" == [Bb]* ]]; then
|
|||||||
echo "正在删除现有目录..."
|
echo "正在删除现有目录..."
|
||||||
rm -rf ${DEPLOY_DIR}/ruoyi-ai
|
rm -rf ${DEPLOY_DIR}/ruoyi-ai
|
||||||
echo "正在克隆 ruoyi-ai-backend 仓库..."
|
echo "正在克隆 ruoyi-ai-backend 仓库..."
|
||||||
cd ${DEPLOY_DIR} && git clone https://gitee.com/ageerle/ruoyi-ai
|
cd ${DEPLOY_DIR} && git clone https://github.com/ageerle/ruoyi-ai
|
||||||
|
|
||||||
# 提示选择分支
|
# 提示选择分支
|
||||||
read -p "请输入 ruoyi-ai 仓库的分支名称 [main]: " RUOYI_AI_BRANCH
|
read -p "请输入 ruoyi-ai 仓库的分支名称 [main]: " RUOYI_AI_BRANCH
|
||||||
RUOYI_AI_BRANCH="${RUOYI_AI_BRANCH:-main}"
|
RUOYI_AI_BRANCH="${RUOYI_AI_BRANCH:-main}"
|
||||||
@@ -253,8 +253,8 @@ if [[ "${BUILD_CHOICE}" == [Bb]* ]]; then
|
|||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
echo "正在克隆 ruoyi-ai-backend 仓库..."
|
echo "正在克隆 ruoyi-ai-backend 仓库..."
|
||||||
cd ${DEPLOY_DIR} && git clone https://gitee.com/ageerle/ruoyi-ai
|
cd ${DEPLOY_DIR} && git clone https://github.com/ageerle/ruoyi-ai
|
||||||
|
|
||||||
# 提示选择分支
|
# 提示选择分支
|
||||||
read -p "请输入 ruoyi-ai 仓库的分支名称 [main]: " RUOYI_AI_BRANCH
|
read -p "请输入 ruoyi-ai 仓库的分支名称 [main]: " RUOYI_AI_BRANCH
|
||||||
RUOYI_AI_BRANCH="${RUOYI_AI_BRANCH:-main}"
|
RUOYI_AI_BRANCH="${RUOYI_AI_BRANCH:-main}"
|
||||||
@@ -272,8 +272,8 @@ if [[ "${BUILD_CHOICE}" == [Bb]* ]]; then
|
|||||||
echo "正在删除现有目录..."
|
echo "正在删除现有目录..."
|
||||||
rm -rf ${DEPLOY_DIR}/ruoyi-admin
|
rm -rf ${DEPLOY_DIR}/ruoyi-admin
|
||||||
echo "正在克隆 ruoyi-admin 仓库..."
|
echo "正在克隆 ruoyi-admin 仓库..."
|
||||||
cd ${DEPLOY_DIR} && git clone https://gitee.com/ageerle/ruoyi-admin
|
cd ${DEPLOY_DIR} && git clone https://github.com/ageerle/ruoyi-admin
|
||||||
|
|
||||||
# 提示选择分支
|
# 提示选择分支
|
||||||
read -p "请输入 ruoyi-admin 仓库的分支名称 [main]: " RUOYI_ADMIN_BRANCH
|
read -p "请输入 ruoyi-admin 仓库的分支名称 [main]: " RUOYI_ADMIN_BRANCH
|
||||||
RUOYI_ADMIN_BRANCH="${RUOYI_ADMIN_BRANCH:-main}"
|
RUOYI_ADMIN_BRANCH="${RUOYI_ADMIN_BRANCH:-main}"
|
||||||
@@ -290,8 +290,8 @@ if [[ "${BUILD_CHOICE}" == [Bb]* ]]; then
|
|||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
echo "正在克隆 ruoyi-ai-admin 仓库..."
|
echo "正在克隆 ruoyi-ai-admin 仓库..."
|
||||||
cd ${DEPLOY_DIR} && git clone https://gitee.com/ageerle/ruoyi-admin
|
cd ${DEPLOY_DIR} && git clone https://github.com/ageerle/ruoyi-admin
|
||||||
|
|
||||||
# 提示选择分支
|
# 提示选择分支
|
||||||
read -p "请输入 ruoyi-admin 仓库的分支名称 [main]: " RUOYI_ADMIN_BRANCH
|
read -p "请输入 ruoyi-admin 仓库的分支名称 [main]: " RUOYI_ADMIN_BRANCH
|
||||||
RUOYI_ADMIN_BRANCH="${RUOYI_ADMIN_BRANCH:-main}"
|
RUOYI_ADMIN_BRANCH="${RUOYI_ADMIN_BRANCH:-main}"
|
||||||
@@ -309,8 +309,8 @@ if [[ "${BUILD_CHOICE}" == [Bb]* ]]; then
|
|||||||
echo "正在删除现有目录..."
|
echo "正在删除现有目录..."
|
||||||
rm -rf ${DEPLOY_DIR}/ruoyi-web
|
rm -rf ${DEPLOY_DIR}/ruoyi-web
|
||||||
echo "正在克隆 ruoyi-ai-web 仓库..."
|
echo "正在克隆 ruoyi-ai-web 仓库..."
|
||||||
cd ${DEPLOY_DIR} && git clone https://gitee.com/ageerle/ruoyi-web
|
cd ${DEPLOY_DIR} && git clone https://github.com/ageerle/ruoyi-web
|
||||||
|
|
||||||
# 提示选择分支
|
# 提示选择分支
|
||||||
read -p "请输入 ruoyi-web 仓库的分支名称 [main]: " RUOYI_WEB_BRANCH
|
read -p "请输入 ruoyi-web 仓库的分支名称 [main]: " RUOYI_WEB_BRANCH
|
||||||
RUOYI_WEB_BRANCH="${RUOYI_WEB_BRANCH:-main}"
|
RUOYI_WEB_BRANCH="${RUOYI_WEB_BRANCH:-main}"
|
||||||
@@ -327,8 +327,8 @@ if [[ "${BUILD_CHOICE}" == [Bb]* ]]; then
|
|||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
echo "正在克隆 ruoyi-ai-web 仓库..."
|
echo "正在克隆 ruoyi-ai-web 仓库..."
|
||||||
cd ${DEPLOY_DIR} && git clone https://gitee.com/ageerle/ruoyi-web
|
cd ${DEPLOY_DIR} && git clone https://github.com/ageerle/ruoyi-web
|
||||||
|
|
||||||
# 提示选择分支
|
# 提示选择分支
|
||||||
read -p "请输入 ruoyi-web 仓库的分支名称 [main]: " RUOYI_WEB_BRANCH
|
read -p "请输入 ruoyi-web 仓库的分支名称 [main]: " RUOYI_WEB_BRANCH
|
||||||
RUOYI_WEB_BRANCH="${RUOYI_WEB_BRANCH:-main}"
|
RUOYI_WEB_BRANCH="${RUOYI_WEB_BRANCH:-main}"
|
||||||
@@ -359,7 +359,7 @@ if [[ "${BUILD_CHOICE}" == [Bb]* ]]; then
|
|||||||
# 更新 vite.config.mts 文件
|
# 更新 vite.config.mts 文件
|
||||||
echo "正在使用您的配置更新 vite.config.mts 文件..."
|
echo "正在使用您的配置更新 vite.config.mts 文件..."
|
||||||
sed -i "s|http://127.0.0.1:6039|${FRONTEND_API_BASE_URL}|g" ${DEPLOY_DIR}/ruoyi-admin/apps/web-antd/vite.config.mts
|
sed -i "s|http://127.0.0.1:6039|${FRONTEND_API_BASE_URL}|g" ${DEPLOY_DIR}/ruoyi-admin/apps/web-antd/vite.config.mts
|
||||||
|
|
||||||
# 更新 docker-compose.yaml 文件中的镜像标签
|
# 更新 docker-compose.yaml 文件中的镜像标签
|
||||||
echo "正在更新 docker-compose.yaml 文件中的镜像标签..."
|
echo "正在更新 docker-compose.yaml 文件中的镜像标签..."
|
||||||
sed -i "s|ruoyi-ai-backend:latest|ruoyi-ai-backend:${RUOYI_AI_BRANCH}|g" ${DEPLOY_DIR}/docker-compose.yaml
|
sed -i "s|ruoyi-ai-backend:latest|ruoyi-ai-backend:${RUOYI_AI_BRANCH}|g" ${DEPLOY_DIR}/docker-compose.yaml
|
||||||
@@ -469,17 +469,17 @@ EOF
|
|||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo "跳过镜像构建过程。正在使用现有镜像直接部署..."
|
echo "跳过镜像构建过程。正在使用现有镜像直接部署..."
|
||||||
|
|
||||||
# 提示输入分支名称用于镜像标签
|
# 提示输入分支名称用于镜像标签
|
||||||
read -p "请输入 ruoyi-ai-backend 镜像的标签 [main]: " RUOYI_AI_BRANCH
|
read -p "请输入 ruoyi-ai-backend 镜像的标签 [main]: " RUOYI_AI_BRANCH
|
||||||
RUOYI_AI_BRANCH="${RUOYI_AI_BRANCH:-main}"
|
RUOYI_AI_BRANCH="${RUOYI_AI_BRANCH:-main}"
|
||||||
|
|
||||||
read -p "请输入 ruoyi-ai-admin 镜像的标签 [main]: " RUOYI_ADMIN_BRANCH
|
read -p "请输入 ruoyi-ai-admin 镜像的标签 [main]: " RUOYI_ADMIN_BRANCH
|
||||||
RUOYI_ADMIN_BRANCH="${RUOYI_ADMIN_BRANCH:-main}"
|
RUOYI_ADMIN_BRANCH="${RUOYI_ADMIN_BRANCH:-main}"
|
||||||
|
|
||||||
read -p "请输入 ruoyi-ai-web 镜像的标签 [main]: " RUOYI_WEB_BRANCH
|
read -p "请输入 ruoyi-ai-web 镜像的标签 [main]: " RUOYI_WEB_BRANCH
|
||||||
RUOYI_WEB_BRANCH="${RUOYI_WEB_BRANCH:-main}"
|
RUOYI_WEB_BRANCH="${RUOYI_WEB_BRANCH:-main}"
|
||||||
|
|
||||||
# 更新 docker-compose.yaml 文件中的镜像标签
|
# 更新 docker-compose.yaml 文件中的镜像标签
|
||||||
echo "正在更新 docker-compose.yaml 文件中的镜像标签..."
|
echo "正在更新 docker-compose.yaml 文件中的镜像标签..."
|
||||||
sed -i "s|ruoyi-ai-backend:latest|ruoyi-ai-backend:${RUOYI_AI_BRANCH}|g" ${DEPLOY_DIR}/docker-compose.yaml
|
sed -i "s|ruoyi-ai-backend:latest|ruoyi-ai-backend:${RUOYI_AI_BRANCH}|g" ${DEPLOY_DIR}/docker-compose.yaml
|
||||||
@@ -493,9 +493,9 @@ cp -pr ${SCRIPT_DIR}/mysql-init ${DEPLOY_DIR}/
|
|||||||
|
|
||||||
# 使用配置值更新 SQL 文件
|
# 使用配置值更新 SQL 文件
|
||||||
echo "正在更新 SQL 配置值..."
|
echo "正在更新 SQL 配置值..."
|
||||||
sed -i "s|'weaviate', 'host', '127.0.0.1:6038'|'weaviate', 'host', 'weaviate:8080'|g" ${DEPLOY_DIR}/mysql-init/ruoyi-ai.sql
|
sed -i "s|'weaviate', 'host', '127.0.0.1:6038'|'weaviate', 'host', 'weaviate:8080'|g" ${DEPLOY_DIR}/mysql-init/01_ruoyi-ai.sql
|
||||||
sed -i "s|'weaviate', 'protocol', 'http'|'weaviate', 'protocol', '${WEAVIATE_PROTOCOL}'|g" ${DEPLOY_DIR}/mysql-init/ruoyi-ai.sql
|
sed -i "s|'weaviate', 'protocol', 'http'|'weaviate', 'protocol', '${WEAVIATE_PROTOCOL}'|g" ${DEPLOY_DIR}/mysql-init/01_ruoyi-ai.sql
|
||||||
sed -i "s|'weaviate', 'classname', 'LocalKnowledge'|'weaviate', 'classname', '${WEAVIATE_CLASSNAME}'|g" ${DEPLOY_DIR}/mysql-init/ruoyi-ai.sql
|
sed -i "s|'weaviate', 'classname', 'LocalKnowledge'|'weaviate', 'classname', '${WEAVIATE_CLASSNAME}'|g" ${DEPLOY_DIR}/mysql-init/01_ruoyi-ai.sql
|
||||||
|
|
||||||
# 使用 Docker Compose 部署
|
# 使用 Docker Compose 部署
|
||||||
echo "正在使用 Docker Compose 进行部署..."
|
echo "正在使用 Docker Compose 进行部署..."
|
||||||
6
script/deploy/one-step-script/deploy-en.sh → docker-deploy/one-step-script/deploy-en.sh
Normal file → Executable file
@@ -493,9 +493,9 @@ cp -pr ${SCRIPT_DIR}/mysql-init ${DEPLOY_DIR}/
|
|||||||
|
|
||||||
# Update SQL file with configuration values
|
# Update SQL file with configuration values
|
||||||
echo "Updating SQL configuration values..."
|
echo "Updating SQL configuration values..."
|
||||||
sed -i "s|'weaviate', 'host', '127.0.0.1:6038'|'weaviate', 'host', 'weaviate:8080'|g" ${DEPLOY_DIR}/mysql-init/ruoyi-ai.sql
|
sed -i "s|'weaviate', 'host', '127.0.0.1:6038'|'weaviate', 'host', 'weaviate:8080'|g" ${DEPLOY_DIR}/mysql-init/01_ruoyi-ai.sql
|
||||||
sed -i "s|'weaviate', 'protocol', 'http'|'weaviate', 'protocol', '${WEAVIATE_PROTOCOL}'|g" ${DEPLOY_DIR}/mysql-init/ruoyi-ai.sql
|
sed -i "s|'weaviate', 'protocol', 'http'|'weaviate', 'protocol', '${WEAVIATE_PROTOCOL}'|g" ${DEPLOY_DIR}/mysql-init/01_ruoyi-ai.sql
|
||||||
sed -i "s|'weaviate', 'classname', 'LocalKnowledge'|'weaviate', 'classname', '${WEAVIATE_CLASSNAME}'|g" ${DEPLOY_DIR}/mysql-init/ruoyi-ai.sql
|
sed -i "s|'weaviate', 'classname', 'LocalKnowledge'|'weaviate', 'classname', '${WEAVIATE_CLASSNAME}'|g" ${DEPLOY_DIR}/mysql-init/01_ruoyi-ai.sql
|
||||||
|
|
||||||
# Deploy using Docker Compose
|
# Deploy using Docker Compose
|
||||||
echo "Deploying with Docker Compose..."
|
echo "Deploying with Docker Compose..."
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
INSERT INTO `chat_model` (`id`, `tenant_id`, `category`, `model_name`, `model_describe`, `model_price`, `model_type`, `model_show`, `system_prompt`, `api_host`, `api_key`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1907575746601119746, '000000', 'vector', 'text-embedding-3-small', 'text-embedding-3-small', 0, '2', '0', NULL, 'https://api.pandarobot.chat/', 'sk-cdBlIaZcufccm2RaDe547cBd054d49C7B0782eCa72A0052b', 103, 1, '2025-04-03 07:27:54', 1, '2025-04-03 07:27:54', 'text-embedding-3-small');
|
||||||
|
INSERT INTO `chat_model` (`id`, `tenant_id`, `category`, `model_name`, `model_describe`, `model_price`, `model_type`, `model_show`, `system_prompt`, `api_host`, `api_key`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1907576007017066497, '000000', 'vector', 'quentinz/bge-large-zh-v1.5', 'bge-large-zh-v1.5', 0, '2', '0', NULL, 'http://127.0.0.1:11434/', 'cdBlIaZcufccm2RaDe547cBd054d49C7B0782eCa72A0052b', 103, 1, '2025-04-03 07:28:56', 1, '2025-04-03 07:28:56', 'bge-large-zh-v1.5');
|
||||||
|
INSERT INTO `chat_model` (`id`, `tenant_id`, `category`, `model_name`, `model_describe`, `model_price`, `model_type`, `model_show`, `system_prompt`, `api_host`, `api_key`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1907576806191362049, '000000', 'vector', 'nomic-embed-text', 'nomic-embed-text', 0, '2', '0', NULL, 'http://127.0.0.1:11434/', 'nomic-embed-text', 103, 1, '2025-04-03 07:32:06', 1, '2025-04-03 07:32:06', 'nomic-embed-text');
|
||||||
|
INSERT INTO `chat_model` (`id`, `tenant_id`, `category`, `model_name`, `model_describe`, `model_price`, `model_type`, `model_show`, `system_prompt`, `api_host`, `api_key`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1907577073490161665, '000000', 'vector', 'snowflake-arctic-embed', 'snowflake-arctic-embed', 0, '2', '0', NULL, 'http://127.0.0.1:11434/', 'snowflake-arctic-embed', 103, 1, '2025-04-03 07:33:10', 1, '2025-04-03 07:33:10', 'snowflake-arctic-embed');
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
Navicat MySQL Data Transfer
|
||||||
|
|
||||||
|
Source Server : 129.211.24.7
|
||||||
|
Source Server Type : MySQL
|
||||||
|
Source Server Version : 50744
|
||||||
|
Source Host : 129.211.24.7:3306
|
||||||
|
Source Schema : ry-vue
|
||||||
|
|
||||||
|
Target Server Type : MySQL
|
||||||
|
Target Server Version : 50744
|
||||||
|
File Encoding : 65001
|
||||||
|
|
||||||
|
Date: 05/05/2025 15:01:08
|
||||||
|
*/
|
||||||
|
|
||||||
|
SET NAMES utf8mb4;
|
||||||
|
SET FOREIGN_KEY_CHECKS = 0;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for chat_session
|
||||||
|
-- ----------------------------
|
||||||
|
DROP TABLE IF EXISTS `chat_session`;
|
||||||
|
CREATE TABLE `chat_session` (
|
||||||
|
`id` bigint(20) NOT NULL COMMENT '主键',
|
||||||
|
`user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户id',
|
||||||
|
`session_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '会话标题',
|
||||||
|
`session_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '会话内容',
|
||||||
|
`create_dept` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '部门',
|
||||||
|
`create_by` bigint(20) NULL DEFAULT NULL COMMENT '创建者',
|
||||||
|
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||||
|
`update_by` bigint(20) NULL DEFAULT NULL COMMENT '更新者',
|
||||||
|
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||||
|
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||||
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
|
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会话管理' ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
|
SET FOREIGN_KEY_CHECKS = 1;
|
||||||
|
|
||||||
|
ALTER TABLE `chat_message`
|
||||||
|
ADD COLUMN `session_id` bigint(20) NULL COMMENT '会话id' AFTER `id`;
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
ALTER TABLE `chat_model`
|
||||||
|
ADD COLUMN `api_url` varchar(50) NULL COMMENT '请求后缀' AFTER `api_key`;
|
||||||
|
|
||||||
|
INSERT INTO `chat_config` (`id`, `category`, `config_name`, `config_value`, `config_dict`, `create_dept`, `create_time`, `create_by`, `update_by`, `update_time`, `remark`, `version`, `del_flag`, `update_ip`, `tenant_id`) VALUES (1779450794872414211, 'chat', 'apiUrl', 'v1/chat/completions', 'API 请求后缀', 103, '2024-04-14 18:05:05', '1', '1', '2025-04-23 22:29:04', NULL, NULL, '0', NULL, 0);
|
||||||
@@ -1,89 +1,89 @@
|
|||||||
---
|
---
|
||||||
# 数据源配置
|
# 数据源配置
|
||||||
spring:
|
spring:
|
||||||
datasource:
|
datasource:
|
||||||
type: com.zaxxer.hikari.HikariDataSource
|
type: com.zaxxer.hikari.HikariDataSource
|
||||||
dynamic:
|
dynamic:
|
||||||
# 性能分析插件(有性能损耗 不建议生产环境使用)
|
# 性能分析插件(有性能损耗 不建议生产环境使用)
|
||||||
p6spy: false
|
p6spy: false
|
||||||
# 设置默认的数据源或者数据源组,默认值即为 master
|
# 设置默认的数据源或者数据源组,默认值即为 master
|
||||||
primary: master
|
primary: master
|
||||||
# 严格模式 匹配不到数据源则报错
|
# 严格模式 匹配不到数据源则报错
|
||||||
strict: true
|
strict: true
|
||||||
datasource:
|
datasource:
|
||||||
# 主库数据源
|
# 主库数据源
|
||||||
master:
|
master:
|
||||||
type: ${spring.datasource.type}
|
type: ${spring.datasource.type}
|
||||||
driverClassName: com.mysql.cj.jdbc.Driver
|
driverClassName: com.mysql.cj.jdbc.Driver
|
||||||
url: {{PROD_DB_URL}}
|
url: {{PROD_DB_URL}}
|
||||||
username: {{PROD_DB_USERNAME}}
|
username: {{PROD_DB_USERNAME}}
|
||||||
password: {{PROD_DB_PASSWORD}}
|
password: {{PROD_DB_PASSWORD}}
|
||||||
hikari:
|
hikari:
|
||||||
# 最大连接池数量
|
# 最大连接池数量
|
||||||
maxPoolSize: 20
|
maxPoolSize: 20
|
||||||
# 最小空闲线程数量
|
# 最小空闲线程数量
|
||||||
minIdle: 10
|
minIdle: 10
|
||||||
# 配置获取连接等待超时的时间
|
# 配置获取连接等待超时的时间
|
||||||
connectionTimeout: 30000
|
connectionTimeout: 30000
|
||||||
# 校验超时时间
|
# 校验超时时间
|
||||||
validationTimeout: 5000
|
validationTimeout: 5000
|
||||||
# 空闲连接存活最大时间,默认10分钟
|
# 空闲连接存活最大时间,默认10分钟
|
||||||
idleTimeout: 600000
|
idleTimeout: 600000
|
||||||
# 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
|
# 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
|
||||||
maxLifetime: 1800000
|
maxLifetime: 1800000
|
||||||
# 连接测试query(配置检测连接是否有效)
|
# 连接测试query(配置检测连接是否有效)
|
||||||
connectionTestQuery: SELECT 1
|
connectionTestQuery: SELECT 1
|
||||||
# 多久检查一次连接的活性
|
# 多久检查一次连接的活性
|
||||||
keepaliveTime: 30000
|
keepaliveTime: 30000
|
||||||
|
|
||||||
--- # redis 单机配置
|
--- # redis 单机配置
|
||||||
spring.data:
|
spring.data:
|
||||||
redis:
|
redis:
|
||||||
# 地址
|
# 地址
|
||||||
host: {{PROD_REDIS_HOST}}
|
host: {{PROD_REDIS_HOST}}
|
||||||
# 端口,默认为6379
|
# 端口,默认为6379
|
||||||
port: {{PROD_REDIS_PORT}}
|
port: {{PROD_REDIS_PORT}}
|
||||||
# 数据库索引
|
# 数据库索引
|
||||||
database: {{PROD_REDIS_DATABASE}}
|
database: {{PROD_REDIS_DATABASE}}
|
||||||
# 密码
|
# 密码
|
||||||
password: {{PROD_REDIS_PASSWORD}}
|
password: {{PROD_REDIS_PASSWORD}}
|
||||||
# 连接超时时间
|
# 连接超时时间
|
||||||
timeout: {{PROD_REDIS_TIMEOUT}}
|
timeout: {{PROD_REDIS_TIMEOUT}}
|
||||||
# 是否开启ssl
|
# 是否开启ssl
|
||||||
ssl: false
|
ssl: false
|
||||||
|
|
||||||
# 日志配置
|
# 日志配置
|
||||||
logging:
|
logging:
|
||||||
level:
|
level:
|
||||||
org.ruoyi: info
|
org.ruoyi: info
|
||||||
org.springframework: warn
|
org.springframework: warn
|
||||||
config: classpath:logback-plus.xml
|
config: classpath:logback-plus.xml
|
||||||
|
|
||||||
# Sa-Token配置
|
# Sa-Token配置
|
||||||
sa-token:
|
sa-token:
|
||||||
# token名称 (同时也是cookie名称)
|
# token名称 (同时也是cookie名称)
|
||||||
token-name: Authorization
|
token-name: Authorization
|
||||||
# token有效期 设为7天 (必定过期) 单位: 秒
|
# token有效期 设为7天 (必定过期) 单位: 秒
|
||||||
timeout: 604800
|
timeout: 604800
|
||||||
# token临时有效期 (指定时间无操作就过期) 单位: 秒
|
# token临时有效期 (指定时间无操作就过期) 单位: 秒
|
||||||
activity-timeout: 604800
|
activity-timeout: 604800
|
||||||
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
|
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
|
||||||
is-concurrent: true
|
is-concurrent: true
|
||||||
# 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
|
# 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
|
||||||
is-share: false
|
is-share: false
|
||||||
# 是否尝试从header里读取token
|
# 是否尝试从header里读取token
|
||||||
is-read-header: true
|
is-read-header: true
|
||||||
# 是否尝试从cookie里读取token
|
# 是否尝试从cookie里读取token
|
||||||
is-read-cookie: false
|
is-read-cookie: false
|
||||||
# token前缀
|
# token前缀
|
||||||
token-prefix: "Bearer"
|
token-prefix: "Bearer"
|
||||||
# jwt秘钥
|
# jwt秘钥
|
||||||
jwt-secret-key: abcdefghijklmnopqrstuvwxyz
|
jwt-secret-key: abcdefghijklmnopqrstuvwxyz
|
||||||
|
|
||||||
# websocket
|
# websocket
|
||||||
websocket:
|
websocket:
|
||||||
enabled: true
|
enabled: true
|
||||||
# 路径
|
# 路径
|
||||||
path: '/resource/websocket'
|
path: '/resource/websocket'
|
||||||
# 设置访问源地址
|
# 设置访问源地址
|
||||||
allowedOrigins: '*'
|
allowedOrigins: '*'
|
||||||
@@ -1,115 +1,115 @@
|
|||||||
version: '3'
|
version: '3'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
mysql:
|
mysql:
|
||||||
image: registry.cn-shenzhen.aliyuncs.com/breeze-project/mysql:8.0.33
|
image: registry.cn-shenzhen.aliyuncs.com/breeze-project/mysql:8.0.33
|
||||||
container_name: ruoyi-ai-mysql
|
container_name: ruoyi-ai-mysql
|
||||||
env_file:
|
env_file:
|
||||||
- ./.env
|
- ./.env
|
||||||
environment:
|
environment:
|
||||||
- MYSQL_ROOT_PASSWORD={{MYSQL_ROOT_PASSWORD}}
|
- MYSQL_ROOT_PASSWORD={{MYSQL_ROOT_PASSWORD}}
|
||||||
- MYSQL_DATABASE={{MYSQL_DATABASE}}
|
- MYSQL_DATABASE={{MYSQL_DATABASE}}
|
||||||
ports:
|
ports:
|
||||||
- "{{MYSQL_PORT}}:3306"
|
- "{{MYSQL_PORT}}:3306"
|
||||||
volumes:
|
volumes:
|
||||||
- ./mysql-init:/docker-entrypoint-initdb.d
|
- ./mysql-init:/docker-entrypoint-initdb.d
|
||||||
- ./data/mysql:/var/lib/mysql
|
- ./data/mysql:/var/lib/mysql
|
||||||
command:
|
command:
|
||||||
--default-authentication-plugin=mysql_native_password
|
--default-authentication-plugin=mysql_native_password
|
||||||
--character-set-server=utf8mb4
|
--character-set-server=utf8mb4
|
||||||
--collation-server=utf8mb4_general_ci
|
--collation-server=utf8mb4_general_ci
|
||||||
--explicit_defaults_for_timestamp=true
|
--explicit_defaults_for_timestamp=true
|
||||||
--lower_case_table_names=1
|
--lower_case_table_names=1
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
- ruoyi-net
|
- ruoyi-net
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: registry.cn-shenzhen.aliyuncs.com/breeze-project/redis:6.2
|
image: registry.cn-shenzhen.aliyuncs.com/breeze-project/redis:6.2
|
||||||
container_name: ruoyi-ai-redis
|
container_name: ruoyi-ai-redis
|
||||||
env_file:
|
env_file:
|
||||||
- ./.env
|
- ./.env
|
||||||
ports:
|
ports:
|
||||||
- "{{REDIS_PORT}}:6379"
|
- "{{REDIS_PORT}}:6379"
|
||||||
volumes:
|
volumes:
|
||||||
- ./data/redis:/data
|
- ./data/redis:/data
|
||||||
command: redis-server --appendonly yes ${REDIS_PASSWORD:+--requirepass ${REDIS_PASSWORD}}
|
command: redis-server --appendonly yes ${REDIS_PASSWORD:+--requirepass ${REDIS_PASSWORD}}
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
- ruoyi-net
|
- ruoyi-net
|
||||||
|
|
||||||
weaviate:
|
weaviate:
|
||||||
image: registry.cn-shenzhen.aliyuncs.com/breeze-project/weaviate:1.30.0
|
image: registry.cn-shenzhen.aliyuncs.com/breeze-project/weaviate:1.30.0
|
||||||
container_name: ruoyi-ai-weaviate
|
container_name: ruoyi-ai-weaviate
|
||||||
ports:
|
ports:
|
||||||
- "{{WEAVIATE_HTTP_PORT}}:8080"
|
- "{{WEAVIATE_HTTP_PORT}}:8080"
|
||||||
- "{{WEAVIATE_GRPC_PORT}}:50051"
|
- "{{WEAVIATE_GRPC_PORT}}:50051"
|
||||||
volumes:
|
volumes:
|
||||||
- ./data/weaviate:/var/lib/weaviate
|
- ./data/weaviate:/var/lib/weaviate
|
||||||
env_file:
|
env_file:
|
||||||
- ./.env
|
- ./.env
|
||||||
environment:
|
environment:
|
||||||
- QUERY_DEFAULTS_LIMIT={{WEAVIATE_QUERY_LIMIT}}
|
- QUERY_DEFAULTS_LIMIT={{WEAVIATE_QUERY_LIMIT}}
|
||||||
- AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED={{WEAVIATE_ANONYMOUS_ACCESS}}
|
- AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED={{WEAVIATE_ANONYMOUS_ACCESS}}
|
||||||
- PERSISTENCE_DATA_PATH={{WEAVIATE_DATA_PATH}}
|
- PERSISTENCE_DATA_PATH={{WEAVIATE_DATA_PATH}}
|
||||||
- DEFAULT_VECTORIZER_MODULE={{WEAVIATE_VECTORIZER_MODULE}}
|
- DEFAULT_VECTORIZER_MODULE={{WEAVIATE_VECTORIZER_MODULE}}
|
||||||
- ENABLE_MODULES={{WEAVIATE_MODULES}}
|
- ENABLE_MODULES={{WEAVIATE_MODULES}}
|
||||||
- CLUSTER_HOSTNAME={{WEAVIATE_CLUSTER_HOSTNAME}}
|
- CLUSTER_HOSTNAME={{WEAVIATE_CLUSTER_HOSTNAME}}
|
||||||
command: --host 0.0.0.0 --port 8080 --scheme http
|
command: --host 0.0.0.0 --port 8080 --scheme http
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
- ruoyi-net
|
- ruoyi-net
|
||||||
|
|
||||||
ruoyi-backend:
|
ruoyi-backend:
|
||||||
image: ruoyi-ai-backend:latest
|
image: ruoyi-ai-backend:latest
|
||||||
container_name: ruoyi-ai-backend
|
container_name: ruoyi-ai-backend
|
||||||
env_file:
|
env_file:
|
||||||
- ./.env
|
- ./.env
|
||||||
ports:
|
ports:
|
||||||
- "{{SERVER_PORT}}:{{SERVER_PORT}}"
|
- "{{SERVER_PORT}}:{{SERVER_PORT}}"
|
||||||
environment:
|
environment:
|
||||||
- SERVER_PORT={{SERVER_PORT}}
|
- SERVER_PORT={{SERVER_PORT}}
|
||||||
- DB_URL={{DB_URL}}
|
- DB_URL={{DB_URL}}
|
||||||
- DB_USERNAME={{DB_USERNAME}}
|
- DB_USERNAME={{DB_USERNAME}}
|
||||||
- DB_PASSWORD={{DB_PASSWORD}}
|
- DB_PASSWORD={{DB_PASSWORD}}
|
||||||
- REDIS_HOST={{REDIS_HOST}}
|
- REDIS_HOST={{REDIS_HOST}}
|
||||||
- REDIS_PORT={{REDIS_PORT}}
|
- REDIS_PORT={{REDIS_PORT}}
|
||||||
- REDIS_DATABASE={{REDIS_DATABASE}}
|
- REDIS_DATABASE={{REDIS_DATABASE}}
|
||||||
- REDIS_PASSWORD={{REDIS_PASSWORD}}
|
- REDIS_PASSWORD={{REDIS_PASSWORD}}
|
||||||
- REDIS_TIMEOUT={{REDIS_TIMEOUT}}
|
- REDIS_TIMEOUT={{REDIS_TIMEOUT}}
|
||||||
- TZ={{TZ}}
|
- TZ={{TZ}}
|
||||||
volumes:
|
volumes:
|
||||||
- ./data/logs:/ruoyi/server/logs
|
- ./data/logs:/ruoyi/server/logs
|
||||||
restart: always
|
restart: always
|
||||||
depends_on:
|
depends_on:
|
||||||
- mysql
|
- mysql
|
||||||
- redis
|
- redis
|
||||||
- weaviate
|
- weaviate
|
||||||
networks:
|
networks:
|
||||||
- ruoyi-net
|
- ruoyi-net
|
||||||
|
|
||||||
ruoyi-admin:
|
ruoyi-admin:
|
||||||
image: ruoyi-ai-admin:latest
|
image: ruoyi-ai-admin:latest
|
||||||
container_name: ruoyi-ai-admin
|
container_name: ruoyi-ai-admin
|
||||||
ports:
|
ports:
|
||||||
- "{{ADMIN_PORT}}:80"
|
- "{{ADMIN_PORT}}:80"
|
||||||
restart: always
|
restart: always
|
||||||
depends_on:
|
depends_on:
|
||||||
- ruoyi-backend
|
- ruoyi-backend
|
||||||
networks:
|
networks:
|
||||||
- ruoyi-net
|
- ruoyi-net
|
||||||
|
|
||||||
ruoyi-web:
|
ruoyi-web:
|
||||||
image: ruoyi-ai-web:latest
|
image: ruoyi-ai-web:latest
|
||||||
container_name: ruoyi-ai-web
|
container_name: ruoyi-ai-web
|
||||||
ports:
|
ports:
|
||||||
- "{{WEB_PORT}}:80"
|
- "{{WEB_PORT}}:80"
|
||||||
restart: always
|
restart: always
|
||||||
depends_on:
|
depends_on:
|
||||||
- ruoyi-backend
|
- ruoyi-backend
|
||||||
networks:
|
networks:
|
||||||
- ruoyi-net
|
- ruoyi-net
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
ruoyi-net:
|
ruoyi-net:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
@@ -1,22 +1,22 @@
|
|||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
server_name localhost;
|
server_name localhost;
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
root /usr/share/nginx/html;
|
root /usr/share/nginx/html;
|
||||||
index index.html index.htm;
|
index index.html index.htm;
|
||||||
try_files $uri $uri/ /index.html;
|
try_files $uri $uri/ /index.html;
|
||||||
}
|
}
|
||||||
|
|
||||||
location /prod-api/ {
|
location /prod-api/ {
|
||||||
proxy_pass http://{{BACKEND_HOST}}:{{SERVER_PORT}}/;
|
proxy_pass http://{{BACKEND_HOST}}:{{SERVER_PORT}}/;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
}
|
}
|
||||||
|
|
||||||
error_page 500 502 503 504 /50x.html;
|
error_page 500 502 503 504 /50x.html;
|
||||||
location = /50x.html {
|
location = /50x.html {
|
||||||
root /usr/share/nginx/html;
|
root /usr/share/nginx/html;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,22 +1,22 @@
|
|||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
server_name localhost;
|
server_name localhost;
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
root /usr/share/nginx/html;
|
root /usr/share/nginx/html;
|
||||||
index index.html index.htm;
|
index index.html index.htm;
|
||||||
try_files $uri $uri/ /index.html;
|
try_files $uri $uri/ /index.html;
|
||||||
}
|
}
|
||||||
|
|
||||||
location /api/ {
|
location /api/ {
|
||||||
proxy_pass http://{{BACKEND_HOST}}:{{SERVER_PORT}}/;
|
proxy_pass http://{{BACKEND_HOST}}:{{SERVER_PORT}}/;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
}
|
}
|
||||||
|
|
||||||
error_page 500 502 503 504 /50x.html;
|
error_page 500 502 503 504 /50x.html;
|
||||||
location = /50x.html {
|
location = /50x.html {
|
||||||
root /usr/share/nginx/html;
|
root /usr/share/nginx/html;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
0
script/deploy/source-code/fetch-admin-source-code.sh → docker-deploy/source-code/fetch-admin-source-code.sh
Normal file → Executable file
0
script/deploy/source-code/fetch-backend-source-code.sh → docker-deploy/source-code/fetch-backend-source-code.sh
Normal file → Executable file
0
script/deploy/source-code/fetch-web-source-code.sh → docker-deploy/source-code/fetch-web-source-code.sh
Normal file → Executable file
BIN
image/08.png
|
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 35 KiB |
BIN
image/09.png
|
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 100 KiB |
BIN
image/10.png
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 65 KiB |
BIN
image/11.png
|
Before Width: | Height: | Size: 563 KiB After Width: | Height: | Size: 26 KiB |
BIN
image/QQ区-官方交流1群.png
Normal file
|
After Width: | Height: | Size: 214 KiB |
BIN
image/WX区-官方交流4群.jpg
Normal file
|
After Width: | Height: | Size: 310 KiB |
|
Before Width: | Height: | Size: 108 KiB |
BIN
image/qq.png
|
Before Width: | Height: | Size: 392 KiB |
BIN
image/wx-msg.png
Normal file
|
After Width: | Height: | Size: 104 KiB |
BIN
image/wx-msg2.png
Normal file
|
After Width: | Height: | Size: 148 KiB |