2026-03-25 18:05:02 +08:00
|
|
|
|
# 宝塔面板部署指南
|
|
|
|
|
|
|
|
|
|
|
|
## 快速开始
|
|
|
|
|
|
|
|
|
|
|
|
### 方式一:使用部署脚本(推荐)
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 1. 配置环境变量
|
|
|
|
|
|
export REMOTE_HOST=你的服务器 IP
|
|
|
|
|
|
export REMOTE_USER=root
|
|
|
|
|
|
|
|
|
|
|
|
# 2. 部署后端
|
|
|
|
|
|
./deploy-backend.sh
|
|
|
|
|
|
|
|
|
|
|
|
# 3. 部署前端
|
|
|
|
|
|
./deploy-frontend.sh
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 方式二:手动部署
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 第一步:在宝塔安装基础服务
|
|
|
|
|
|
|
|
|
|
|
|
1. 登录宝塔面板(`http://你的IP:8888`)
|
|
|
|
|
|
2. 安装 LNMP 套件:
|
|
|
|
|
|
- Nginx 1.24+
|
|
|
|
|
|
- MySQL 8.0+
|
|
|
|
|
|
- PHP 纯静态(前端不需要 PHP)
|
|
|
|
|
|
- Redis 7.x
|
|
|
|
|
|
|
|
|
|
|
|
3. 安装 JDK 17:
|
|
|
|
|
|
- 软件商店 → 搜索 "Java"
|
|
|
|
|
|
- 安装 JDK 17 版本
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 第二步:创建数据库
|
|
|
|
|
|
|
|
|
|
|
|
1. 宝塔面板 → 数据库 → 添加
|
|
|
|
|
|
2. 填写信息:
|
|
|
|
|
|
- 数据库名:`lesingle-edu-reading-platform`
|
|
|
|
|
|
- 用户名:`reading_platform`
|
|
|
|
|
|
- 密码:设置一个强密码(保存好)
|
|
|
|
|
|
- 权限:全部
|
|
|
|
|
|
|
|
|
|
|
|
3. 记录数据库信息,后面要用
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 第三步:部署后端
|
|
|
|
|
|
|
|
|
|
|
|
### 3.1 上传 JAR 包
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 本地构建
|
2026-03-26 11:31:47 +08:00
|
|
|
|
cd /f/LesingleProject/lesingle-kindergarten-course/kindergarten_java/lesingle-edu-reading-platform-backend
|
2026-03-25 18:05:02 +08:00
|
|
|
|
mvn clean package -DskipTests
|
|
|
|
|
|
|
|
|
|
|
|
# 上传到服务器
|
|
|
|
|
|
scp target/reading-platform-1.0.0.jar root@你的 IP:/www/wwwroot/reading-platform/app.jar
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3.2 创建启动脚本
|
|
|
|
|
|
|
|
|
|
|
|
在服务器上创建 `/www/wwwroot/reading-platform/start.sh`:
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
#!/bin/bash
|
|
|
|
|
|
export SPRING_PROFILES_ACTIVE=prod
|
|
|
|
|
|
export SERVER_PORT=8480
|
|
|
|
|
|
export DB_HOST=localhost
|
|
|
|
|
|
export DB_PASSWORD=你的数据库密码
|
|
|
|
|
|
export JWT_SECRET=你的 JWT 密钥
|
|
|
|
|
|
|
|
|
|
|
|
nohup java -jar -Xms512m -Xmx1024m /www/wwwroot/reading-platform/app.jar \
|
|
|
|
|
|
--spring.profiles.active=prod > /www/wwwroot/reading-platform/logs/app.log 2>&1 &
|
|
|
|
|
|
echo $! > /www/wwwroot/reading-platform/app.pid
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
chmod +x /www/wwwroot/reading-platform/start.sh
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3.3 创建环境变量文件
|
|
|
|
|
|
|
|
|
|
|
|
`/www/wwwroot/reading-platform/.env`:
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 数据库
|
|
|
|
|
|
DB_HOST=localhost
|
|
|
|
|
|
DB_PASSWORD=你的数据库密码
|
|
|
|
|
|
|
|
|
|
|
|
# JWT
|
|
|
|
|
|
JWT_SECRET=你的-production-jwt-secret-至少-32-字符
|
|
|
|
|
|
JWT_EXPIRATION=86400000
|
|
|
|
|
|
|
|
|
|
|
|
# Redis
|
|
|
|
|
|
REDIS_HOST=localhost
|
|
|
|
|
|
REDIS_PORT=6379
|
|
|
|
|
|
|
|
|
|
|
|
# OSS
|
|
|
|
|
|
OSS_ACCESS_KEY_ID=LTAI5tKZhPofbThbSzDSiWoK
|
|
|
|
|
|
OSS_ACCESS_KEY_SECRET=FtcsC7oQX3T0NaChaa9FYq2aoysQFM
|
|
|
|
|
|
OSS_BUCKET_NAME=lesingle-kid-course
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3.4 启动后端
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
cd /www/wwwroot/reading-platform
|
|
|
|
|
|
./start.sh
|
|
|
|
|
|
|
|
|
|
|
|
# 查看日志
|
|
|
|
|
|
tail -f logs/app.log
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 第四步:部署前端
|
|
|
|
|
|
|
|
|
|
|
|
### 4.1 本地构建
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-03-26 11:31:47 +08:00
|
|
|
|
cd /f/LesingleProject/lesingle-kindergarten-course/kindergarten_java/lesingle-edu-reading-platform-frontend
|
2026-03-25 18:05:02 +08:00
|
|
|
|
npm run build
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 4.2 上传到服务器
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 上传到宝塔站点目录
|
|
|
|
|
|
scp -r dist/* root@你的 IP:/www/wwwroot/你的域名/
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 第五步:配置 Nginx 反向代理
|
|
|
|
|
|
|
|
|
|
|
|
1. 宝塔面板 → 网站 → 添加站点
|
|
|
|
|
|
2. 填写域名,根目录设为 `/www/wwwroot/你的域名`
|
|
|
|
|
|
3. 确定后,点击网站 → 设置 → 配置文件
|
|
|
|
|
|
4. 添加以下配置:
|
|
|
|
|
|
|
|
|
|
|
|
```nginx
|
|
|
|
|
|
# 前端页面
|
|
|
|
|
|
location / {
|
|
|
|
|
|
try_files $uri $uri/ /index.html;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# 后端 API 反向代理
|
|
|
|
|
|
location /api {
|
|
|
|
|
|
proxy_pass http://localhost:8480;
|
|
|
|
|
|
proxy_set_header Host $host;
|
|
|
|
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
|
|
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# 文件上传代理
|
|
|
|
|
|
location /uploads {
|
|
|
|
|
|
proxy_pass http://localhost:8480;
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
5. 保存配置
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 第六步:配置防火墙
|
|
|
|
|
|
|
|
|
|
|
|
1. 宝塔面板 → 安全 → 放行端口
|
|
|
|
|
|
2. 放行以下端口:
|
|
|
|
|
|
- 80(HTTP)
|
|
|
|
|
|
- 443(HTTPS,如果用 SSL)
|
|
|
|
|
|
- 8480(后端 API,可选,如果通过 Nginx 代理就不需要)
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 第七步:验证部署
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 检查后端健康状态
|
|
|
|
|
|
curl http://localhost:8480/actuator/health
|
|
|
|
|
|
|
|
|
|
|
|
# 访问前端
|
|
|
|
|
|
curl http://localhost
|
|
|
|
|
|
|
|
|
|
|
|
# 测试 API
|
|
|
|
|
|
curl http://localhost:8480/api/v1
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 第八步:申请 SSL 证书(可选)
|
|
|
|
|
|
|
|
|
|
|
|
1. 宝塔面板 → 网站 → 点击对应网站 → SSL
|
|
|
|
|
|
2. 选择 "Let's Encrypt" 免费证书
|
|
|
|
|
|
3. 填写邮箱,点击申请
|
|
|
|
|
|
4. 申请成功后,开启"强制 HTTPS"
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 管理命令
|
|
|
|
|
|
|
|
|
|
|
|
### 后端管理
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 启动
|
|
|
|
|
|
cd /www/wwwroot/reading-platform && ./start.sh
|
|
|
|
|
|
|
|
|
|
|
|
# 停止
|
|
|
|
|
|
cd /www/wwwroot/reading-platform && ./stop.sh
|
|
|
|
|
|
|
|
|
|
|
|
# 重启
|
|
|
|
|
|
cd /www/wwwroot/reading-platform && ./stop.sh && ./start.sh
|
|
|
|
|
|
|
|
|
|
|
|
# 查看日志
|
|
|
|
|
|
tail -f /www/wwwroot/reading-platform/logs/app.log
|
|
|
|
|
|
|
|
|
|
|
|
# 查看进程
|
|
|
|
|
|
ps aux | grep reading-platform
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 前端更新
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 本地重新构建并上传
|
2026-03-26 11:31:47 +08:00
|
|
|
|
cd lesingle-edu-reading-platform-frontend
|
2026-03-25 18:05:02 +08:00
|
|
|
|
npm run build
|
|
|
|
|
|
scp -r dist/* root@你的 IP:/www/wwwroot/你的域名/
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 常见问题
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 后端启动失败
|
|
|
|
|
|
|
|
|
|
|
|
检查日志:
|
|
|
|
|
|
```bash
|
|
|
|
|
|
tail -100 /www/wwwroot/reading-platform/logs/app.log
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
常见原因:
|
|
|
|
|
|
- JDK 版本不对(必须是 17)
|
|
|
|
|
|
- 数据库连接失败
|
|
|
|
|
|
- 端口被占用
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 前端页面空白
|
|
|
|
|
|
|
|
|
|
|
|
- 检查 Nginx 配置是否正确
|
|
|
|
|
|
- 打开浏览器 Console 查看错误
|
|
|
|
|
|
- 检查 API 请求是否 404
|
|
|
|
|
|
|
|
|
|
|
|
### 3. API 请求失败
|
|
|
|
|
|
|
|
|
|
|
|
- 检查 Nginx 反向代理配置
|
|
|
|
|
|
- 确认后端服务是否运行
|
|
|
|
|
|
- 检查防火墙端口
|
|
|
|
|
|
|
|
|
|
|
|
### 4. 文件上传失败
|
|
|
|
|
|
|
|
|
|
|
|
- 检查 OSS 配置
|
|
|
|
|
|
- 检查 Nginx 上传大小限制
|
|
|
|
|
|
- 查看后端日志
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 性能优化
|
|
|
|
|
|
|
|
|
|
|
|
### JVM 优化参数
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
java -jar \
|
|
|
|
|
|
-Xms1g \
|
|
|
|
|
|
-Xmx2g \
|
|
|
|
|
|
-XX:+UseG1GC \
|
|
|
|
|
|
-XX:MaxGCPauseMillis=200 \
|
|
|
|
|
|
-XX:+HeapDumpOnOutOfMemoryError \
|
|
|
|
|
|
app.jar
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### Nginx 优化
|
|
|
|
|
|
|
|
|
|
|
|
```nginx
|
|
|
|
|
|
# 开启 gzip 压缩
|
|
|
|
|
|
gzip on;
|
|
|
|
|
|
gzip_types text/plain text/css application/json application/javascript;
|
|
|
|
|
|
|
|
|
|
|
|
# 上传大小限制
|
|
|
|
|
|
client_max_body_size 100M;
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 备份与恢复
|
|
|
|
|
|
|
|
|
|
|
|
### 数据库备份
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 宝塔面板 → 数据库 → 备份
|
|
|
|
|
|
# 或命令行
|
|
|
|
|
|
mysqldump -u reading_platform -p lesingle-edu-reading-platform > backup.sql
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 文件备份
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
tar -czf backup-$(date +%Y%m%d).tar.gz /www/wwwroot/reading-platform
|
|
|
|
|
|
```
|