guoyu/外网部署指南.md

507 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 国语教育平台 - 外网服务器部署指南
> **部署环境**: Windows Server + 宝塔面板 + 外网访问
> **更新日期**: 2025-12-09
> **版本**: 1.3.9
---
## 📋 部署前准备清单
### 1. 服务器环境要求
```
✅ 操作系统: Windows Server已有
✅ 面板工具: 宝塔面板(已安装)
✅ Java环境: JDK 1.8+ 或 JDK 11+
✅ 数据库: MySQL 5.7+ 或 MySQL 8.0
✅ 缓存: Redis 6.0+
✅ 网络: 能访问百度云API语音识别必需
```
### 2. 关键信息收集
需要提前准备的信息:
| 项目 | 说明 | 示例 |
|------|------|------|
| **服务器IP/域名** | 外网可访问的地址 | `123.45.67.89``api.example.com` |
| **后端端口** | Spring Boot端口 | `30091`(建议保持不变) |
| **课件存储路径** | 视频/音频文件存储位置 | `D:\wwwroot\study_web\web\profile` |
| **数据库地址** | MySQL连接信息 | `localhost:3306` |
| **Redis地址** | Redis连接信息 | `localhost:6379` |
| **百度API密钥** | 语音识别所需 | App ID + API Key + Secret Key |
---
## 🔧 步骤1服务器端配置
### 1.1 创建目录结构
在服务器上创建以下目录:
```powershell
# 课件存储目录必须与application.yml中profile配置一致
mkdir D:\wwwroot\study_web\web\profile
mkdir D:\wwwroot\study_web\web\profile\upload
# 确保目录有读写权限
icacls D:\wwwroot\study_web\web\profile /grant Everyone:F /T
```
### 1.2 修改后端配置文件
编辑 `ry-study-admin/src/main/resources/application.yml`
```yaml
# 项目相关配置
ruoyi:
# 文件路径(⚠️ 重要:必须与服务器实际路径一致)
profile: D:\wwwroot\study_web\web\profile
# 服务器配置
server:
port: 30091 # 保持不变APP默认使用此端口
# Spring配置
spring:
# Redis配置
redis:
host: 127.0.0.1 # 如果Redis在本机使用localhost
port: 6379
password: # 如果Redis设置了密码填写在这里
# 数据库配置在application-druid.yml中
```
编辑 `ry-study-admin/src/main/resources/application-druid.yml`
```yaml
spring:
datasource:
druid:
master:
url: jdbc:mysql://localhost:3306/ry_study?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root # ⚠️ 修改为实际数据库用户名
password: your_password # ⚠️ 修改为实际数据库密码
```
### 1.3 配置百度语音API
百度API配置存储在数据库的 `sys_config` 表中,需要确保以下配置项存在:
```sql
-- 在MySQL中执行确保百度API配置存在
INSERT INTO sys_config (config_name, config_key, config_value, config_type, create_by, remark)
VALUES
('百度语音AppID', 'baidu.speech.appId', 'your_app_id', 'Y', 'admin', '百度语音识别AppID'),
('百度语音APIKey', 'baidu.speech.apiKey', 'your_api_key', 'Y', 'admin', '百度语音识别API Key'),
('百度语音SecretKey', 'baidu.speech.secretKey', 'your_secret_key', 'Y', 'admin', '百度语音识别Secret Key')
ON DUPLICATE KEY UPDATE config_value = VALUES(config_value);
```
**⚠️ 重要**:
- 百度API密钥需要在 [百度AI开放平台](https://ai.baidu.com/) 申请
- 服务器必须能访问百度云API测试`ping aip.baidubce.com`
### 1.4 宝塔面板部署Java项目
#### 方式A使用宝塔Java项目管理器推荐
1. **安装Java环境**
- 宝塔面板 → 软件商店 → 搜索"Tomcat" → 安装会自动安装JDK
- 或者软件商店 → 搜索"Java项目管理器" → 安装
2. **添加Java项目**
- 宝塔面板 → 网站 → Java项目
- 项目名称:`ry-study-admin`
- 项目路径上传JAR包所在目录
- 项目类型:`Jar`
- 启动文件:`ry-study-admin.jar`
- 启动端口:`30091`
- 启动命令:
```bash
java -jar -Xms512m -Xmx1024m ry-study-admin.jar
```
3. **配置防火墙**
- 宝塔面板 → 安全 → 添加端口规则
- 端口:`30091`
- 协议:`TCP`
- 备注:`国语教育平台后端`
#### 方式B手动部署备选
1. **上传JAR包**
```powershell
# 将编译好的JAR包上传到服务器
# 路径示例D:\www\java\ry-study-admin.jar
```
2. **创建启动脚本** (`start.bat`)
```bat
@echo off
title 国语教育平台后端服务
java -jar -Xms512m -Xmx1024m ry-study-admin.jar
pause
```
3. **创建Windows服务**(可选,实现开机自启)
- 使用工具:[NSSM](https://nssm.cc/download) (Non-Sucking Service Manager)
```powershell
# 下载nssm.exe后
nssm install RyStudyService "java" "-jar D:\www\java\ry-study-admin.jar"
nssm set RyStudyService AppDirectory "D:\www\java"
nssm set RyStudyService Description "国语教育平台后端服务"
nssm start RyStudyService
```
### 1.5 测试后端服务
```powershell
# 测试服务是否启动
curl http://localhost:30091
# 测试API接口
curl http://localhost:30091/api/system/config/configKey/sys.user.initPassword
```
---
## 📱 步骤2APP端配置
### 2.1 方案A打包时配置服务器地址推荐
修改 `fronted_uniapp/utils/config.js` 第43行
```javascript
// ⚠️ 正式部署修改为服务器的公网IP或域名
const DEFAULT_SERVER_HOST = 'your_server_ip_or_domain' // 例如:'123.45.67.89' 或 'api.example.com'
const DEFAULT_SERVER_PORT = 30091
```
然后重新打包APK版本号升级到1.3.10)。
### 2.2 方案BAPP运行时动态配置灵活
APP支持运行时配置服务器地址无需重新打包
1. **通过代码设置**在APP启动时
```javascript
// 在App.vue的onLaunch中添加
uni.setStorageSync('server_host', 'your_server_ip')
uni.setStorageSync('server_port', 30091)
```
2. **通过设置页面**需要实现UI
- 在APP中添加"服务器设置"页面
- 让用户输入服务器地址
- 调用 `config.setServerConfig(host, port)` 保存
### 2.3 测试APP连接
安装APK后
1. 打开APP进入"我的" → "设置" → "关于"
2. 查看服务器地址是否正确
3. 尝试登录,测试网络连接
---
## ✅ 步骤3功能验证清单
部署完成后,逐项测试:
### 3.1 基础功能测试
- [ ] **登录功能**
- 能否正常登录
- Token能否正常获取
- [ ] **课程列表**
- 能否加载课程列表
- 图标能否正常显示(离线测试:关闭网络)
### 3.2 视频播放测试
- [ ] **视频加载**
- 课件能否正常加载
- 视频播放是否流畅
- [ ] **路径检查**
- 视频URL格式`http://your_server:30091/profile/upload/2024/12/09/xxx.mp4`
- 确认路径中包含 `/profile/` 前缀
### 3.3 语音识别测试(关键)
- [ ] **环境检查**
- 服务器能否访问百度API
```powershell
# 在服务器上测试
ping aip.baidubce.com
Test-NetConnection -ComputerName aip.baidubce.com -Port 443
```
- [ ] **配置检查**
- 数据库中百度API密钥已配置
- 密钥是否有效(在百度控制台查看)
- [ ] **功能测试**
- 进入"语音测评"页面
- 录音并识别,查看结果
- 检查后端日志是否有错误
### 3.4 后端日志检查
在宝塔面板或服务器上查看日志:
```powershell
# 日志位置(根据实际情况调整)
# 通常在JAR包同目录下的logs文件夹
tail -f D:\www\java\logs\sys-info.log
```
关键日志内容:
```
收到语音识别请求 - 格式: pcm
调用百度云API识别格式: pcm...
识别成功: xxx
```
---
## ⚠️ 常见问题排查
### 问题1APP无法连接服务器
**症状**: 登录时提示"网络错误"或"服务器无响应"
**排查步骤**:
1. 确认服务器防火墙已开放30091端口
2. 确认服务器公网IP/域名是否正确
3. 用手机浏览器访问:`http://your_server:30091`
4. 检查APP中服务器地址配置是否正确
### 问题2视频无法播放
**症状**: 点击视频课件,显示加载失败
**排查步骤**:
1. 检查课件文件是否存在于:`D:\wwwroot\study_web\web\profile\upload\...`
2. 检查目录权限Everyone需要读取权限
3. 检查数据库中file_path字段是否包含 `/profile/` 前缀
4. 用浏览器直接访问视频URL测试
### 问题3语音识别失败
**症状**: 录音后提示"识别失败"或"param format invalid"
**排查步骤**:
1. **服务器网络检查**:
```powershell
ping aip.baidubce.com
```
如果ping不通检查服务器网络或防火墙设置
2. **百度API配置检查**:
- 登录百度AI开放平台查看API密钥是否正确
- 查看API调用次数是否已用完
- 确认已开通"短语音识别"服务
3. **后端日志检查**:
查看是否有 `param format invalid` 错误
- 如果有说明格式问题APP需使用1.3.9版本)
4. **APP版本检查**:
- 确认使用1.3.9或更高版本
- 低版本可能使用mp3格式不支持
### 问题4图标显示为方框
**症状**: APP中图标显示为 □
**排查步骤**:
1. 确认使用1.3.9或更高版本APK
2. 在离线环境(关闭网络)测试
3. 如果仍不显示需要重新打包APK
### 问题5宝塔部署Java项目失败
**症状**: Java项目无法启动或频繁重启
**排查步骤**:
1. 检查JDK版本`java -version`需要1.8+
2. 检查端口占用:`netstat -ano | findstr 30091`
3. 查看启动日志,查找错误信息
4. 检查MySQL/Redis是否正常运行
---
## 🔐 安全建议
### 生产环境必做配置
1. **修改默认密码**
- 管理员账号默认密码需修改
- 数据库root密码需强化
2. **关闭调试模式**
```yaml
# application.yml
swagger:
enabled: false # 关闭Swagger文档
logging:
level:
com.ddnai: info # 改为info级别
```
3. **配置HTTPS**(可选但推荐)
- 申请SSL证书
- 宝塔面板 → 网站 → SSL → 配置证书
- 修改APP配置使用HTTPS
4. **防火墙配置**
- 只开放必要端口80, 443, 30091
- 禁止直接暴露MySQL(3306)和Redis(6379)
---
## 📞 需要的额外信息
为了提供更精确的部署指导,请提供:
### 关于服务器
1. **服务器访问地址**
- [ ] 公网IP________________
- [ ] 域名如有________________
- [ ] 已开放的端口________________
2. **宝塔面板版本**
- [ ] 宝塔版本________________
- [ ] 已安装的软件Java版本____MySQL版本____Redis版本____
3. **课件文件**
- [ ] 课件存储路径________________
- [ ] 课件总大小________________
- [ ] 是否需要迁移现有课件? □是 □否
### 关于APP
1. **当前使用版本**
- [ ] APK版本________________
- [ ] 是否需要修改服务器地址后重新打包? □是 □否
2. **用户设备**
- [ ] 用户网络环境:□公网 □内网 □两者都有
- [ ] 是否需要支持离线使用? □是 □否
### 关于百度API
1. **百度语音识别**
- [ ] 是否已申请百度API □是 □否
- [ ] App ID________________
- [ ] API Key________________
- [ ] Secret Key________________
---
## 📋 部署检查清单
打印此清单,部署时逐项检查:
### 服务器端
- [ ] JDK已安装版本≥1.8
- [ ] MySQL已安装并运行
- [ ] Redis已安装并运行
- [ ] 课件目录已创建(`D:\wwwroot\study_web\web\profile`
- [ ] 目录权限已设置
- [ ] application.yml配置已修改profile路径
- [ ] 数据库连接信息已配置
- [ ] 百度API密钥已配置数据库
- [ ] 防火墙已开放30091端口
- [ ] JAR包已上传
- [ ] 后端服务已启动
- [ ] 后端服务可访问(`http://localhost:30091`
### APP端
- [ ] 服务器地址已配置(代码或运行时)
- [ ] APK已打包版本1.3.9+
- [ ] APK已安装到测试设备
- [ ] 能正常登录
- [ ] 图标显示正常(离线测试)
- [ ] 视频能正常播放
- [ ] 语音能正常识别
### 网络连通性
- [ ] 手机能访问服务器(浏览器测试)
- [ ] 服务器能访问百度API`ping aip.baidubce.com`
- [ ] 防火墙规则已配置
---
## 📝 部署记录模板
```
部署日期________________
服务器IP________________
端口30091
课件路径D:\wwwroot\study_web\web\profile
APP版本1.3.9
测试结果:
□ 登录功能正常
□ 课程列表正常
□ 视频播放正常
□ 图标显示正常(离线)
□ 语音识别正常
遇到的问题:
1. ________________
2. ________________
解决方案:
1. ________________
2. ________________
```
---
## 🎯 快速部署摘要
如果您已经熟悉部署流程,可以按以下快速步骤操作:
```bash
# 1. 服务器准备
mkdir D:\wwwroot\study_web\web\profile
# 修改application.yml中的profile路径
# 配置数据库、Redis、百度API
# 2. 部署后端
# 上传JAR包
java -jar -Xms512m -Xmx1024m ry-study-admin.jar
# 3. 配置APP
# 修改config.js中的DEFAULT_SERVER_HOST
# 打包APK版本1.3.10
# 4. 测试
# 安装APK → 登录 → 测试图标/视频/语音
```
---
## 🆘 获取帮助
如果在部署过程中遇到问题,请提供:
1. **错误信息**:完整的错误日志或截图
2. **配置信息**application.yml内容脱敏后
3. **测试结果**:哪些功能正常,哪些异常
4. **网络环境**服务器IP、端口、防火墙设置
---
**部署完成后,请填写上方"需要的额外信息"部分,我可以提供更具体的指导!** 🚀