部署md
12
build.bat
@@ -153,8 +153,8 @@ cd "%PROJECT_ROOT%"
|
|||||||
|
|
||||||
REM 构建后端镜像
|
REM 构建后端镜像
|
||||||
echo %INFO% 构建后端镜像...
|
echo %INFO% 构建后端镜像...
|
||||||
echo %INFO% 执行: docker build -t school-news-serv:%IMAGE_VERSION% -f docker\Dockerfile.serv .
|
echo %INFO% 执行: docker build -t school-news-serv:%IMAGE_VERSION% -f docker\schoolNews\Dockerfile.serv .
|
||||||
docker build -t school-news-serv:%IMAGE_VERSION% -f docker\Dockerfile.serv .
|
docker build -t school-news-serv:%IMAGE_VERSION% -f docker\schoolNews\Dockerfile.serv .
|
||||||
if errorlevel 1 (
|
if errorlevel 1 (
|
||||||
echo %ERROR% ❌ 后端镜像构建失败
|
echo %ERROR% ❌ 后端镜像构建失败
|
||||||
pause
|
pause
|
||||||
@@ -170,8 +170,8 @@ echo.
|
|||||||
|
|
||||||
REM 构建前端镜像
|
REM 构建前端镜像
|
||||||
echo %INFO% 构建前端镜像...
|
echo %INFO% 构建前端镜像...
|
||||||
echo %INFO% 执行: docker build -t school-news-web:%IMAGE_VERSION% -f docker\Dockerfile.web .
|
echo %INFO% 执行: docker build -t school-news-web:%IMAGE_VERSION% -f docker\schoolNews\Dockerfile.web .
|
||||||
docker build -t school-news-web:%IMAGE_VERSION% -f docker\Dockerfile.web .
|
docker build -t school-news-web:%IMAGE_VERSION% -f docker\schoolNews\Dockerfile.web .
|
||||||
if errorlevel 1 (
|
if errorlevel 1 (
|
||||||
echo %ERROR% ❌ 前端镜像构建失败
|
echo %ERROR% ❌ 前端镜像构建失败
|
||||||
pause
|
pause
|
||||||
@@ -264,7 +264,7 @@ echo 3. 验证镜像:
|
|||||||
echo docker images ^| findstr school-news
|
echo docker images ^| findstr school-news
|
||||||
echo.
|
echo.
|
||||||
echo 4. 启动服务:
|
echo 4. 启动服务:
|
||||||
echo cd docker
|
echo cd docker\schoolNews
|
||||||
echo docker-compose up -d
|
echo docker-compose up -d
|
||||||
echo.
|
echo.
|
||||||
echo 5. 查看服务状态:
|
echo 5. 查看服务状态:
|
||||||
@@ -310,7 +310,7 @@ echo %INFO% 下一步操作:
|
|||||||
echo 1. 查看部署说明: %DEPLOY_INFO_FILE%
|
echo 1. 查看部署说明: %DEPLOY_INFO_FILE%
|
||||||
echo 2. 传输镜像文件到目标服务器
|
echo 2. 传输镜像文件到目标服务器
|
||||||
echo 3. 在目标服务器加载镜像: docker load -i ^<镜像文件^>
|
echo 3. 在目标服务器加载镜像: docker load -i ^<镜像文件^>
|
||||||
echo 4. 启动服务: cd docker ^&^& docker-compose up -d
|
echo 4. 启动服务: cd docker\schoolNews ^&^& docker-compose up -d
|
||||||
echo ==========================================
|
echo ==========================================
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
|
|||||||
16
build.sh
@@ -154,8 +154,8 @@ build_base_serv() {
|
|||||||
log_step "构建后端基础镜像(Base Serv)"
|
log_step "构建后端基础镜像(Base Serv)"
|
||||||
cd "${PROJECT_ROOT}"
|
cd "${PROJECT_ROOT}"
|
||||||
|
|
||||||
log_info "执行: docker build -t school-news-base-serv:${IMAGE_VERSION} -f docker/Dockerfile.base-serv ."
|
log_info "执行: docker build -t school-news-base-serv:${IMAGE_VERSION} -f docker/schoolNews/Dockerfile.base-serv ."
|
||||||
if docker build -t school-news-base-serv:${IMAGE_VERSION} -f docker/Dockerfile.base-serv .; then
|
if docker build -t school-news-base-serv:${IMAGE_VERSION} -f docker/schoolNews/Dockerfile.base-serv .; then
|
||||||
docker tag school-news-base-serv:${IMAGE_VERSION} school-news-base-serv:latest
|
docker tag school-news-base-serv:${IMAGE_VERSION} school-news-base-serv:latest
|
||||||
log_info "✅ 后端基础镜像构建成功"
|
log_info "✅ 后端基础镜像构建成功"
|
||||||
log_info " 镜像标签: school-news-base-serv:${IMAGE_VERSION}"
|
log_info " 镜像标签: school-news-base-serv:${IMAGE_VERSION}"
|
||||||
@@ -172,8 +172,8 @@ build_mysql() {
|
|||||||
log_step "构建MySQL镜像"
|
log_step "构建MySQL镜像"
|
||||||
cd "${PROJECT_ROOT}"
|
cd "${PROJECT_ROOT}"
|
||||||
|
|
||||||
log_info "执行: docker build -t school-news-mysql:${IMAGE_VERSION} -f docker/Dockerfile.mysql ."
|
log_info "执行: docker build -t school-news-mysql:${IMAGE_VERSION} -f docker/schoolNews/Dockerfile.mysql ."
|
||||||
if docker build -t school-news-mysql:${IMAGE_VERSION} -f docker/Dockerfile.mysql .; then
|
if docker build -t school-news-mysql:${IMAGE_VERSION} -f docker/schoolNews/Dockerfile.mysql .; then
|
||||||
docker tag school-news-mysql:${IMAGE_VERSION} school-news-mysql:latest
|
docker tag school-news-mysql:${IMAGE_VERSION} school-news-mysql:latest
|
||||||
log_info "✅ MySQL镜像构建成功"
|
log_info "✅ MySQL镜像构建成功"
|
||||||
log_info " 镜像标签: school-news-mysql:${IMAGE_VERSION}"
|
log_info " 镜像标签: school-news-mysql:${IMAGE_VERSION}"
|
||||||
@@ -204,8 +204,8 @@ build_serv() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log_info "执行: docker build -t school-news-serv:${IMAGE_VERSION} -f docker/Dockerfile.serv ."
|
log_info "执行: docker build -t school-news-serv:${IMAGE_VERSION} -f docker/schoolNews/Dockerfile.serv ."
|
||||||
if docker build -t school-news-serv:${IMAGE_VERSION} -f docker/Dockerfile.serv .; then
|
if docker build -t school-news-serv:${IMAGE_VERSION} -f docker/schoolNews/Dockerfile.serv .; then
|
||||||
docker tag school-news-serv:${IMAGE_VERSION} school-news-serv:latest
|
docker tag school-news-serv:${IMAGE_VERSION} school-news-serv:latest
|
||||||
log_info "✅ 后端服务镜像构建成功"
|
log_info "✅ 后端服务镜像构建成功"
|
||||||
log_info " 镜像标签: school-news-serv:${IMAGE_VERSION}"
|
log_info " 镜像标签: school-news-serv:${IMAGE_VERSION}"
|
||||||
@@ -229,8 +229,8 @@ build_web() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log_info "执行: docker build -t school-news-web:${IMAGE_VERSION} -f docker/Dockerfile.web ."
|
log_info "执行: docker build -t school-news-web:${IMAGE_VERSION} -f docker/schoolNews/Dockerfile.web ."
|
||||||
if docker build -t school-news-web:${IMAGE_VERSION} -f docker/Dockerfile.web .; then
|
if docker build -t school-news-web:${IMAGE_VERSION} -f docker/schoolNews/Dockerfile.web .; then
|
||||||
docker tag school-news-web:${IMAGE_VERSION} school-news-web:latest
|
docker tag school-news-web:${IMAGE_VERSION} school-news-web:latest
|
||||||
log_info "✅ 前端服务镜像构建成功"
|
log_info "✅ 前端服务镜像构建成功"
|
||||||
log_info " 镜像标签: school-news-web:${IMAGE_VERSION}"
|
log_info " 镜像标签: school-news-web:${IMAGE_VERSION}"
|
||||||
|
|||||||
BIN
doc/部署.assets/image-1.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
doc/部署.assets/image-10.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
doc/部署.assets/image-11.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
doc/部署.assets/image-12.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
doc/部署.assets/image-13.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
doc/部署.assets/image-14.png
Normal file
|
After Width: | Height: | Size: 86 KiB |
BIN
doc/部署.assets/image-15.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
doc/部署.assets/image-16.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
doc/部署.assets/image-17.png
Normal file
|
After Width: | Height: | Size: 150 KiB |
BIN
doc/部署.assets/image-18.png
Normal file
|
After Width: | Height: | Size: 61 KiB |
BIN
doc/部署.assets/image-19.png
Normal file
|
After Width: | Height: | Size: 110 KiB |
BIN
doc/部署.assets/image-2.png
Normal file
|
After Width: | Height: | Size: 149 KiB |
BIN
doc/部署.assets/image-20.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
doc/部署.assets/image-21.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
doc/部署.assets/image-22.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
doc/部署.assets/image-3.png
Normal file
|
After Width: | Height: | Size: 154 KiB |
BIN
doc/部署.assets/image-4.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
doc/部署.assets/image-5.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
doc/部署.assets/image-6.png
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
doc/部署.assets/image-7.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
doc/部署.assets/image-8.png
Normal file
|
After Width: | Height: | Size: 139 KiB |
BIN
doc/部署.assets/image-9.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
doc/部署.assets/image.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
163
doc/部署.md
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
# 校园新闻系统部署
|
||||||
|
|
||||||
|
## 加载镜像
|
||||||
|
|
||||||
|
### 镜像目录结构
|
||||||
|
|
||||||
|
---docker 根目录
|
||||||
|
|---dify # dify的docker目录
|
||||||
|
|---dify 官方内容
|
||||||
|
|---schoolNews # schoolNews的docker目录
|
||||||
|
|---dify # dify工作流的2个yml
|
||||||
|
|---config # 前后端配置文件
|
||||||
|
|---init-db # 数据库标记
|
||||||
|
|---mysql # mysql配置
|
||||||
|
|---redis # redis配置
|
||||||
|
|---nginx # nginx配置
|
||||||
|
|---volumes # 数据卷
|
||||||
|
|---images # 镜像
|
||||||
|
|---docker-compose.yml # docker-compose配置
|
||||||
|
|---init-volumes.sh # 初始化数据卷
|
||||||
|
|
||||||
|
|
||||||
|
### 后端服务镜像
|
||||||
|
镜像来源由星洋智慧提供
|
||||||
|
|
||||||
|
#### 镜像加载
|
||||||
|
```bash
|
||||||
|
# 递归查找指定目录下的所有镜像文件并加载
|
||||||
|
find .docker/schoolNews/images -type f \( -name "*.tar" -o -name "*.tar.gz" -o -name "*.tgz" \) -exec docker load -i {} \;
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 服务启动
|
||||||
|
```bash
|
||||||
|
cd docker/schoolNews
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 服务停止
|
||||||
|
```bash
|
||||||
|
cd docker/schoolNews
|
||||||
|
docker-compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 服务重启
|
||||||
|
```bash
|
||||||
|
cd docker/schoolNews
|
||||||
|
docker-compose restart
|
||||||
|
```
|
||||||
|
|
||||||
|
### dify镜像启动
|
||||||
|
> 会进行镜像拉取
|
||||||
|
```bash
|
||||||
|
cd docker/dify
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
## 配置dify工作流
|
||||||
|
> dify登录url 本地ip:8000
|
||||||
|
|
||||||
|
### 1. 注册账号
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 2. 导入工作流
|
||||||
|
工作流的yaml文件在dify目录下
|
||||||
|

|
||||||
|
安装工作流所需插件。
|
||||||
|
|
||||||
|
插件说明:
|
||||||
|
1. 安思派:工作流联网搜索插件
|
||||||
|
2. 硅基流动: LLM插件。应该替换成本地部署的模型内容
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
APIKEY授权
|
||||||
|

|
||||||
|
|
||||||
|
### 3. 创建一个测试知识库开启apikey
|
||||||
|
> APIKEY作用:
|
||||||
|
给后端服务提供访问dify知识库内容的key权限
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
保存好知识库的apikey,通常以dataset开头。所有知识库共用。
|
||||||
|
|
||||||
|
### 4.修改动态知识库检索工作流
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
修改点有2个:
|
||||||
|
1. 修改http节点post请求的url内容。替换成实际的 ip:8000
|
||||||
|
2. 修改Authorization的值,替换为 Bearer + 空格 + 知识库的apikey
|
||||||
|

|
||||||
|
|
||||||
|
#### 测试
|
||||||
|
如图即正常
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
#### 发布
|
||||||
|
要同时发布为工具,供工作流使用
|
||||||
|

|
||||||
|
|
||||||
|
### 5. 修改思政小帮手工作流
|
||||||
|
#### 删除“动态知识库检索”节点,重新添加
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
#### 修改节点输入、输出相关节点的引用
|
||||||
|
修改的输入参数有2个,第1个是对话变量的datasets。表示该词对话中,使用了那些知识库。
|
||||||
|
第2个是对话变量的query。表示用户输入的对话内容。
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 修改知识库处理节点的引用
|
||||||
|
直接引用“动态知识库检索”的输出内容,text即可
|
||||||
|

|
||||||
|
|
||||||
|
#### 测试发布
|
||||||
|
正常对话即正确
|
||||||
|

|
||||||
|
|
||||||
|
#### 获取工作流apikey
|
||||||
|
> 该apikey用于前端进行对话,指定使用该工作流
|
||||||
|

|
||||||
|
|
||||||
|
### 6. 配置后端dify配置
|
||||||
|
```sql
|
||||||
|
-- 更新dify.apiBaseUrl
|
||||||
|
UPDATE `school_news`.`tb_sys_config` SET `config_value` = '实际ip:8000' WHERE `config_key` = 'dify.apiBaseUrl';
|
||||||
|
|
||||||
|
-- 更新dify.apiKey
|
||||||
|
UPDATE `school_news`.`tb_sys_config` SET `config_value` = '工作流的apikey' WHERE `config_key` = 'dify.apiKey';
|
||||||
|
|
||||||
|
-- 更新dify.dify.knowledgeApiKey
|
||||||
|
UPDATE `school_news`.`tb_sys_config` SET `config_value` = '知识库的apikey' WHERE `config_key` = 'dify.dify.knowledgeApiKey';
|
||||||
|
|
||||||
|
-- 更新智能体配置的api_key。该api_key的编辑权限前端未开放
|
||||||
|
UPDATE `school_news`.`tb_ai_agent_config` SET `dify_api_key`='工作流的apikey' WHERE `id` = 'agent_default_001';
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7. 重启后端服务
|
||||||
|
即可进行对话
|
||||||
|

|
||||||
|
|
||||||
|
## 系统配置
|
||||||
|
### 消息模块配置
|
||||||
|
#### 短信
|
||||||
|
申请阿里云的短信服务,配置到后端
|
||||||
|

|
||||||
|
|
||||||
|
#### 邮箱
|
||||||
|
开启邮箱服务
|
||||||
|

|
||||||
@@ -56,7 +56,7 @@ spring:
|
|||||||
|
|
||||||
# 短信服务配置
|
# 短信服务配置
|
||||||
sms:
|
sms:
|
||||||
enabled: false
|
enabled: true
|
||||||
provider: aliyun
|
provider: aliyun
|
||||||
access-key-id: LTAI5t68do3qVXx5Rufugt3X
|
access-key-id: LTAI5t68do3qVXx5Rufugt3X
|
||||||
access-key-secret: 2vD9ToIff49Vph4JQXsn0Cy8nXQfzA
|
access-key-secret: 2vD9ToIff49Vph4JQXsn0Cy8nXQfzA
|
||||||
14
docker/init-volumes.sh → docker/schoolNews/init-volumes.sh
Executable file → Normal file
@@ -31,13 +31,13 @@ mkdir -p "${VOLUMES_DIR}/nginx/logs"
|
|||||||
|
|
||||||
# 复制配置文件模板
|
# 复制配置文件模板
|
||||||
echo "复制配置文件模板..."
|
echo "复制配置文件模板..."
|
||||||
[ -f redis/redis.conf ] && cp redis/redis.conf "${VOLUMES_DIR}/redis/config/" || echo " ⚠️ redis.conf 不存在"
|
[ -f "${SCRIPT_DIR}/redis/redis.conf" ] && cp "${SCRIPT_DIR}/redis/redis.conf" "${VOLUMES_DIR}/redis/config/" || echo " ⚠️ redis.conf 不存在"
|
||||||
[ -f mysql/my.cnf ] && cp mysql/my.cnf "${VOLUMES_DIR}/mysql/" || echo " ⚠️ my.cnf 不存在"
|
[ -f "${SCRIPT_DIR}/mysql/my.cnf" ] && cp "${SCRIPT_DIR}/mysql/my.cnf" "${VOLUMES_DIR}/mysql/" || echo " ⚠️ my.cnf 不存在"
|
||||||
[ -f config/application.yml ] && cp config/application.yml "${VOLUMES_DIR}/serv/config/" || echo " ⚠️ application.yml 不存在"
|
[ -f "${SCRIPT_DIR}/config/application.yml" ] && cp "${SCRIPT_DIR}/config/application.yml" "${VOLUMES_DIR}/serv/config/" || echo " ⚠️ application.yml 不存在"
|
||||||
[ -f config/log4j2-spring.xml ] && cp config/log4j2-spring.xml "${VOLUMES_DIR}/serv/config/" || echo " ⚠️ log4j2-spring.xml 不存在"
|
[ -f "${SCRIPT_DIR}/config/log4j2-spring.xml" ] && cp "${SCRIPT_DIR}/config/log4j2-spring.xml" "${VOLUMES_DIR}/serv/config/" || echo " ⚠️ log4j2-spring.xml 不存在"
|
||||||
[ -f config/web-app-config.js ] && cp config/web-app-config.js "${VOLUMES_DIR}/web/config/app-config.js" || echo " ⚠️ web-app-config.js 不存在"
|
[ -f "${SCRIPT_DIR}/config/web-app-config.js" ] && cp "${SCRIPT_DIR}/config/web-app-config.js" "${VOLUMES_DIR}/web/config/app-config.js" || echo " ⚠️ web-app-config.js 不存在"
|
||||||
[ -f nginx/nginx.conf ] && cp -r nginx/* "${VOLUMES_DIR}/nginx/config/" || echo " ⚠️ nginx配置 不存在"
|
[ -f "${SCRIPT_DIR}/nginx/nginx.conf" ] && cp -r "${SCRIPT_DIR}/nginx"/* "${VOLUMES_DIR}/nginx/config/" || echo " ⚠️ nginx配置 不存在"
|
||||||
[ -d crawler/ ] && cp -r crawler/* "${VOLUMES_DIR}/serv/crawler/" || echo " ⚠️ 爬虫脚本 不存在"
|
[ -d "${SCRIPT_DIR}/crawler/" ] && cp -r "${SCRIPT_DIR}/crawler"/* "${VOLUMES_DIR}/serv/crawler/" || echo " ⚠️ 爬虫脚本 不存在"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "✅ 目录创建完成:"
|
echo "✅ 目录创建完成:"
|
||||||
@@ -69,7 +69,7 @@ spring:
|
|||||||
sms:
|
sms:
|
||||||
# 是否启用短信服务(true: 真实发送, false: 模拟模式)
|
# 是否启用短信服务(true: 真实发送, false: 模拟模式)
|
||||||
# 开发环境建议设置为 false,避免浪费短信费用
|
# 开发环境建议设置为 false,避免浪费短信费用
|
||||||
enabled: false
|
enabled: true
|
||||||
# 短信服务商(aliyun: 阿里云, tencent: 腾讯云)
|
# 短信服务商(aliyun: 阿里云, tencent: 腾讯云)
|
||||||
provider: aliyun
|
provider: aliyun
|
||||||
# AccessKey ID(从服务商控制台获取)
|
# AccessKey ID(从服务商控制台获取)
|
||||||
|
|||||||