guoyu/外网部署指南.md

507 lines
13 KiB
Markdown
Raw Normal View History

# 国语教育平台 - 外网服务器部署指南
> **部署环境**: 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、端口、防火墙设置
---
**部署完成后,请填写上方"需要的额外信息"部分,我可以提供更具体的指导!** 🚀