docs(deployment): 移除过时的配置文档并更新部署说明
- 删除了 502 错误排查指南文档 - 删除了配置文件管理说明文档 - 删除了域名配置总结文档 - 删除了 Nginx SSL 配置指南文档 - 删除了项目改进计划文档 - 删除了公网访问配置检查清单文档 - 更新了部署说明文档中的后端部署流程 - 简化了前端部署说明,移除了冗余的配置验证步骤 - 更新了配置检查清单,聚焦生产环境部署要点
This commit is contained in:
@@ -1,220 +0,0 @@
|
||||
# 502 Bad Gateway 错误排查指南
|
||||
|
||||
## 错误说明
|
||||
|
||||
`502 Bad Gateway` 表示 Nginx 无法连接到后端服务。通常是因为:
|
||||
1. **后端服务未启动**
|
||||
2. **Nginx配置中的端口不正确**(最常见)
|
||||
3. **后端服务启动失败**
|
||||
4. **防火墙阻止连接**
|
||||
|
||||
## 排查步骤
|
||||
|
||||
### 1. 检查后端服务是否启动
|
||||
|
||||
在服务器上执行:
|
||||
|
||||
```bash
|
||||
# 检查18082端口是否在监听
|
||||
netstat -tlnp | grep 18082
|
||||
# 或
|
||||
ss -tlnp | grep 18082
|
||||
|
||||
# 检查Java进程
|
||||
ps aux | grep java
|
||||
# 或
|
||||
jps -l
|
||||
```
|
||||
|
||||
**如果端口没有监听:**
|
||||
- 后端服务没有启动
|
||||
- 需要启动后端服务
|
||||
|
||||
### 2. 检查Nginx配置(最重要)
|
||||
|
||||
在宝塔面板中:
|
||||
1. 网站 → 设置 → 配置文件
|
||||
2. 找到 `location /api/` 配置块
|
||||
3. **确认 `proxy_pass` 端口是 `18082`**
|
||||
|
||||
**正确的配置:**
|
||||
```nginx
|
||||
location /api/ {
|
||||
proxy_pass http://127.0.0.1:18082; # ← 必须是18082,不是8082
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
}
|
||||
```
|
||||
|
||||
**错误的配置(会导致502):**
|
||||
```nginx
|
||||
location /api/ {
|
||||
proxy_pass http://127.0.0.1:8082; # ← 错误:端口还是8082
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
**修改后必须:**
|
||||
1. 点击"保存"
|
||||
2. 点击"重载配置"或"重启Nginx"
|
||||
|
||||
### 3. 测试后端服务是否正常
|
||||
|
||||
在服务器上执行:
|
||||
|
||||
```bash
|
||||
# 测试后端API是否可访问
|
||||
curl http://127.0.0.1:18082/api/health
|
||||
# 或
|
||||
curl http://127.0.0.1:18082/api/erp/user/login -X POST -H "Content-Type: application/json" -d '{"username":"test","password":"test"}'
|
||||
```
|
||||
|
||||
**如果返回连接拒绝:**
|
||||
- 后端服务没有启动
|
||||
- 检查启动日志
|
||||
|
||||
**如果返回正常响应:**
|
||||
- 后端服务正常
|
||||
- 问题在Nginx配置
|
||||
|
||||
### 4. 检查后端启动日志
|
||||
|
||||
查看后端启动日志,确认:
|
||||
- 服务是否成功启动
|
||||
- 是否监听在 `18082` 端口
|
||||
- 是否有错误信息
|
||||
|
||||
```bash
|
||||
# 如果使用nohup启动
|
||||
tail -f app.log
|
||||
|
||||
# 或查看Spring Boot启动日志
|
||||
# 应该看到类似信息:
|
||||
# Tomcat started on port(s): 18082 (http)
|
||||
```
|
||||
|
||||
### 5. 检查防火墙
|
||||
|
||||
在宝塔面板中:
|
||||
1. 安全 → 防火墙
|
||||
2. 确认端口 `18082` 已开放(如果后端需要外部访问)
|
||||
3. **注意:** 如果后端只监听 `127.0.0.1`,不需要开放防火墙
|
||||
|
||||
### 6. 检查后端监听地址
|
||||
|
||||
确认后端配置:
|
||||
|
||||
**application-dev.yml:**
|
||||
```yaml
|
||||
server:
|
||||
port: 18082
|
||||
# 如果没有配置 address,默认监听 0.0.0.0(所有网卡)
|
||||
# 如果配置了 address: 127.0.0.1,只监听本地
|
||||
```
|
||||
|
||||
**如果后端只监听 127.0.0.1:**
|
||||
- Nginx的 `proxy_pass` 必须使用 `http://127.0.0.1:18082`
|
||||
- 不能使用 `http://175.178.252.59:18082`
|
||||
|
||||
## 快速修复步骤
|
||||
|
||||
### 步骤1:确认后端服务已启动
|
||||
|
||||
```bash
|
||||
# 在服务器上执行
|
||||
java -jar mt-startup-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
|
||||
|
||||
# 或后台运行
|
||||
nohup java -jar mt-startup-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev > app.log 2>&1 &
|
||||
```
|
||||
|
||||
### 步骤2:修改Nginx配置
|
||||
|
||||
在宝塔面板中修改配置文件:
|
||||
|
||||
```nginx
|
||||
location /api/ {
|
||||
proxy_pass http://127.0.0.1:18082; # 确保是18082
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
# 添加超时配置(可选)
|
||||
proxy_connect_timeout 60s;
|
||||
proxy_send_timeout 60s;
|
||||
proxy_read_timeout 60s;
|
||||
}
|
||||
```
|
||||
|
||||
### 步骤3:重载Nginx
|
||||
|
||||
在宝塔面板中:
|
||||
1. 保存配置
|
||||
2. 重载配置
|
||||
|
||||
### 步骤4:验证
|
||||
|
||||
```bash
|
||||
# 在服务器上测试
|
||||
curl http://127.0.0.1/api/erp/user/login -X POST -H "Content-Type: application/json" -d '{"username":"test","password":"test"}'
|
||||
```
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q1: 修改了Nginx配置,但还是502?
|
||||
|
||||
**A:** 检查是否:
|
||||
- 保存了配置
|
||||
- 重载了Nginx(不是只保存)
|
||||
- 确认端口是 `18082`,不是 `8082`
|
||||
|
||||
### Q2: 后端服务启动了,但Nginx还是502?
|
||||
|
||||
**A:** 检查:
|
||||
- Nginx配置中的端口是否正确
|
||||
- 后端是否真的在 `18082` 端口监听
|
||||
- Nginx错误日志:`/www/wwwlogs/175.178.252.59.error.log`
|
||||
|
||||
### Q3: 如何查看Nginx错误日志?
|
||||
|
||||
**A:** 在宝塔面板中:
|
||||
- 网站 → 日志 → 错误日志
|
||||
- 或直接查看:`/www/wwwlogs/175.178.252.59.error.log`
|
||||
|
||||
查看是否有类似错误:
|
||||
```
|
||||
connect() failed (111: Connection refused) while connecting to upstream
|
||||
```
|
||||
这表示无法连接到后端。
|
||||
|
||||
## 验证清单
|
||||
|
||||
- [ ] 后端服务已启动
|
||||
- [ ] 后端监听在 `18082` 端口
|
||||
- [ ] Nginx配置中 `proxy_pass` 端口是 `18082`
|
||||
- [ ] Nginx配置已保存并重载
|
||||
- [ ] 防火墙已开放(如果需要)
|
||||
- [ ] 后端启动日志无错误
|
||||
|
||||
## 如果还是无法解决
|
||||
|
||||
1. **查看Nginx错误日志**
|
||||
```bash
|
||||
tail -f /www/wwwlogs/175.178.252.59.error.log
|
||||
```
|
||||
|
||||
2. **查看后端启动日志**
|
||||
```bash
|
||||
tail -f app.log
|
||||
```
|
||||
|
||||
3. **检查端口占用**
|
||||
```bash
|
||||
netstat -tlnp | grep 18082
|
||||
```
|
||||
|
||||
4. **测试后端直接访问**
|
||||
```bash
|
||||
curl http://127.0.0.1:18082/api/health
|
||||
```
|
||||
|
||||
@@ -1,232 +0,0 @@
|
||||
# 配置文件管理说明
|
||||
|
||||
## 📁 配置文件结构
|
||||
|
||||
### mt-pay 模块
|
||||
```
|
||||
mt-pay/src/main/resources/
|
||||
├── application.yml # 基础配置,只设置active profile
|
||||
├── application-dev.yml # 开发环境配置(本地开发)
|
||||
├── application-prod.yml # 生产环境配置(服务器部署)
|
||||
└── application-test.yml # 测试环境配置(可选)
|
||||
```
|
||||
|
||||
### mt-startup 模块
|
||||
```
|
||||
mt-startup/src/main/resources/
|
||||
├── application.yml # 基础配置,只设置active profile
|
||||
├── application-dev.yml # 开发环境配置(本地开发)
|
||||
└── application-prod.yml # 生产环境配置(服务器部署)
|
||||
```
|
||||
|
||||
## 🔧 环境配置说明
|
||||
|
||||
### 开发环境(dev)
|
||||
|
||||
**配置文件**: `application-dev.yml`
|
||||
|
||||
**配置内容**:
|
||||
- 前端URL: `http://localhost:3000`(本地开发)
|
||||
- PayPal Webhook: 使用内网穿透(如 `https://xxx.cpolar.top/api/paypal/webhook`)
|
||||
- 数据库: 开发环境数据库连接
|
||||
|
||||
**使用场景**:
|
||||
- 本地开发调试
|
||||
- IDE中直接运行
|
||||
- 使用 `--spring.profiles.active=dev` 启动
|
||||
|
||||
**启动方式**:
|
||||
```bash
|
||||
# IDE中运行
|
||||
# 或命令行
|
||||
java -jar mt-startup-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
|
||||
```
|
||||
|
||||
### 生产环境(prod)
|
||||
|
||||
**配置文件**: `application-prod.yml`
|
||||
|
||||
**配置内容**:
|
||||
- 前端URL: `https://shopd.mtkj2025.com`(生产域名)
|
||||
- PayPal Webhook: `https://shopd.mtkj2025.com/api/paypal/webhook`
|
||||
- 数据库: 生产环境数据库连接(通过环境变量配置)
|
||||
|
||||
**使用场景**:
|
||||
- 服务器部署
|
||||
- 生产环境运行
|
||||
- 使用 `--spring.profiles.active=prod` 启动
|
||||
|
||||
**启动方式**:
|
||||
```bash
|
||||
java -jar mt-startup-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
|
||||
```
|
||||
|
||||
## 📝 配置项说明
|
||||
|
||||
### 前端URL配置
|
||||
|
||||
**开发环境** (`application-dev.yml`):
|
||||
```yaml
|
||||
app:
|
||||
frontend:
|
||||
url: http://localhost:3000
|
||||
```
|
||||
|
||||
**生产环境** (`application-prod.yml`):
|
||||
```yaml
|
||||
app:
|
||||
frontend:
|
||||
url: ${app.frontend.url:https://shopd.mtkj2025.com}
|
||||
```
|
||||
|
||||
**说明**:
|
||||
- 开发环境固定使用 `localhost:3000`
|
||||
- 生产环境支持通过环境变量覆盖:`-Dapp.frontend.url=https://your-domain.com`
|
||||
|
||||
### PayPal Webhook配置
|
||||
|
||||
**开发环境** (`application-dev.yml`):
|
||||
```yaml
|
||||
paypal:
|
||||
webhook-url: https://2646b437.r33.cpolar.top/api/paypal/webhook
|
||||
```
|
||||
|
||||
**生产环境** (`application-prod.yml`):
|
||||
```yaml
|
||||
paypal:
|
||||
webhook-url: ${paypal.webhook-url:https://shopd.mtkj2025.com/api/paypal/webhook}
|
||||
```
|
||||
|
||||
**说明**:
|
||||
- 开发环境使用内网穿透服务(cpolar/ngrok)
|
||||
- 生产环境使用域名,支持通过环境变量覆盖
|
||||
|
||||
## 🚀 部署流程
|
||||
|
||||
### 本地开发
|
||||
|
||||
1. **确保使用dev配置**
|
||||
- `application.yml` 中 `spring.profiles.active: dev`
|
||||
- 或启动时指定:`--spring.profiles.active=dev`
|
||||
|
||||
2. **启动后端**
|
||||
```bash
|
||||
# IDE中直接运行
|
||||
# 或
|
||||
mvn spring-boot:run -Dspring-boot.run.profiles=dev
|
||||
```
|
||||
|
||||
3. **启动前端**
|
||||
```bash
|
||||
cd E:\MTKJPAY-FRONT
|
||||
npm run dev
|
||||
```
|
||||
|
||||
4. **访问地址**
|
||||
- 前端: `http://localhost:3000`
|
||||
- 后端API: `http://localhost:8082/api`
|
||||
|
||||
### 生产部署
|
||||
|
||||
1. **打包应用**
|
||||
```bash
|
||||
cd E:\MTKJPAY
|
||||
mvn clean package -DskipTests
|
||||
```
|
||||
|
||||
2. **上传到服务器**
|
||||
- 上传 `mt-startup/target/mt-startup-0.0.1-SNAPSHOT.jar`
|
||||
|
||||
3. **启动应用(使用prod配置)**
|
||||
```bash
|
||||
java -jar mt-startup-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
|
||||
```
|
||||
|
||||
4. **访问地址**
|
||||
- 前端: `https://shopd.mtkj2025.com`
|
||||
- 后端API: `https://shopd.mtkj2025.com/api`(通过Nginx代理)
|
||||
|
||||
## ⚠️ 重要提示
|
||||
|
||||
### 1. 配置文件隔离
|
||||
|
||||
- ✅ **开发环境配置不会影响生产环境**
|
||||
- ✅ **生产环境配置不会影响本地开发**
|
||||
- ✅ **打包时不会覆盖服务器配置**
|
||||
|
||||
### 2. 环境变量覆盖
|
||||
|
||||
生产环境支持通过环境变量或启动参数覆盖配置:
|
||||
|
||||
```bash
|
||||
# 覆盖前端URL
|
||||
java -jar app.jar --spring.profiles.active=prod \
|
||||
-Dapp.frontend.url=https://your-domain.com
|
||||
|
||||
# 覆盖PayPal Webhook
|
||||
java -jar app.jar --spring.profiles.active=prod \
|
||||
-Dpaypal.webhook-url=https://your-domain.com/api/paypal/webhook
|
||||
```
|
||||
|
||||
### 3. 默认值设置
|
||||
|
||||
Java代码中的默认值设置为开发环境值:
|
||||
|
||||
```java
|
||||
@Value("${app.frontend.url:http://localhost:3000}")
|
||||
private String frontendUrl;
|
||||
```
|
||||
|
||||
- 如果配置文件中没有设置,使用默认值(开发环境)
|
||||
- 如果配置文件中设置了,使用配置文件的值
|
||||
|
||||
### 4. 配置文件优先级
|
||||
|
||||
Spring Boot配置优先级(从高到低):
|
||||
1. 命令行参数(`--spring.profiles.active=prod`)
|
||||
2. 环境变量
|
||||
3. `application-{profile}.yml`
|
||||
4. `application.yml`
|
||||
5. Java代码中的默认值
|
||||
|
||||
## 📋 配置检查清单
|
||||
|
||||
### 开发环境
|
||||
- [x] `application.yml` 中 `spring.profiles.active: dev`
|
||||
- [x] `application-dev.yml` 中前端URL为 `http://localhost:3000`
|
||||
- [x] `application-dev.yml` 中PayPal Webhook使用内网穿透
|
||||
- [x] Java代码默认值为 `http://localhost:3000`
|
||||
|
||||
### 生产环境
|
||||
- [x] `application-prod.yml` 中前端URL为 `https://shopd.mtkj2025.com`
|
||||
- [x] `application-prod.yml` 中PayPal Webhook为 `https://shopd.mtkj2025.com/api/paypal/webhook`
|
||||
- [x] 支持通过环境变量覆盖配置
|
||||
- [x] 打包时使用 `--spring.profiles.active=prod` 启动
|
||||
|
||||
## 🔍 验证方法
|
||||
|
||||
### 验证开发环境配置
|
||||
```bash
|
||||
# 启动应用
|
||||
java -jar app.jar --spring.profiles.active=dev
|
||||
|
||||
# 检查日志,应该看到:
|
||||
# - 前端代理地址: http://localhost:3000
|
||||
```
|
||||
|
||||
### 验证生产环境配置
|
||||
```bash
|
||||
# 启动应用
|
||||
java -jar app.jar --spring.profiles.active=prod
|
||||
|
||||
# 检查日志,应该看到:
|
||||
# - 前端地址: https://shopd.mtkj2025.com
|
||||
# - Webhook URL: https://shopd.mtkj2025.com/api/paypal/webhook
|
||||
```
|
||||
|
||||
## 📚 相关文档
|
||||
|
||||
- `DEPLOYMENT_README.md` - 部署说明
|
||||
- `DOMAIN_CONFIG_SUMMARY.md` - 域名配置总结
|
||||
- `NGINX_SSL_CONFIG.md` - Nginx SSL配置
|
||||
|
||||
@@ -4,26 +4,20 @@
|
||||
|
||||
### 后端部署
|
||||
|
||||
1. **配置文件已更新**
|
||||
- ✅ `app.frontend.url` 已设置为 `http://175.178.252.59`(公网地址,通过Nginx访问)
|
||||
- ✅ `paypal.webhook-url` 已设置为 `https://175.178.252.59/api/paypal/webhook`(HTTPS,PayPal要求)
|
||||
- ✅ 后端端口已设置为 `8082`
|
||||
- ✅ 前端 `.env.production` 已创建,API地址为 `/api`(相对路径)
|
||||
|
||||
2. **打包应用**
|
||||
1. **打包应用**
|
||||
```bash
|
||||
cd E:\MTKJPAY
|
||||
mvn clean package -DskipTests
|
||||
```
|
||||
|
||||
3. **上传并启动**
|
||||
2. **上传并启动**
|
||||
```bash
|
||||
# 上传 jar 文件到服务器
|
||||
# 启动应用
|
||||
java -jar mt-pay-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
|
||||
# 启动应用(使用生产环境配置)
|
||||
java -jar mt-startup-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
|
||||
|
||||
# 或后台运行
|
||||
nohup java -jar mt-pay-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev > app.log 2>&1 &
|
||||
nohup java -jar mt-startup-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod > app.log 2>&1 &
|
||||
```
|
||||
|
||||
### 前端部署
|
||||
@@ -34,42 +28,20 @@
|
||||
npm run build
|
||||
```
|
||||
|
||||
2. **本地测试打包结果(验证打包是否正确)**
|
||||
```bash
|
||||
cd dist
|
||||
python -m http.server 3000
|
||||
# 或
|
||||
npx http-server -p 3000
|
||||
# 访问 http://localhost:3000(应该能看到页面,不是空白)
|
||||
```
|
||||
|
||||
3. **API地址配置**
|
||||
- ✅ `.env.production` 文件已创建
|
||||
- ✅ API地址已设置为 `/api`(相对路径,通过Nginx代理)
|
||||
- ⚠️ **重要:** 必须使用相对路径 `/api`,不要使用完整URL
|
||||
|
||||
4. **上传到服务器**
|
||||
```bash
|
||||
# 上传dist目录下的所有文件到服务器
|
||||
scp -r dist/* root@175.178.252.59:/path/to/web/root/
|
||||
```
|
||||
|
||||
5. **服务器配置**
|
||||
- 如果服务器已有Web服务器,将dist内容放到Web根目录
|
||||
2. **上传到服务器**
|
||||
- 上传 `dist` 目录下的所有文件到服务器Web根目录
|
||||
- 确保支持Vue Router的history模式(配置 `try_files`)
|
||||
|
||||
## 配置说明
|
||||
|
||||
- **开发环境**:使用 `application-dev.yml`(本地开发,默认)
|
||||
- **生产环境**:使用 `application-prod.yml`(服务器部署,需指定 `--spring.profiles.active=prod`)
|
||||
|
||||
## 配置检查清单
|
||||
|
||||
部署前请检查以下配置:
|
||||
|
||||
- [x] 后端 `app.frontend.url` 已设置为 `http://175.178.252.59`(公网地址)
|
||||
- [x] 后端 `paypal.webhook-url` 已设置为 `https://175.178.252.59/api/paypal/webhook`(HTTPS)
|
||||
- [x] 后端端口已设置为 `8082`
|
||||
- [x] 前端API地址已配置为 `/api`(相对路径,通过Nginx代理)
|
||||
- [ ] 数据库连接信息正确
|
||||
- [ ] 服务器防火墙已开放必要端口(8082等)
|
||||
- [ ] **Nginx已配置SSL证书(PayPal Webhook必需)**
|
||||
- [ ] PayPal控制台Webhook URL已更新为 `https://175.178.252.59/api/paypal/webhook`
|
||||
- [ ] **Nginx配置中的proxy_pass端口已更新为8082**
|
||||
|
||||
|
||||
- [ ] 使用 `--spring.profiles.active=prod` 启动(生产环境配置)
|
||||
- [ ] 数据库连接信息正确(生产环境)
|
||||
- [ ] 服务器防火墙已开放必要端口(8082、443等)
|
||||
- [ ] Nginx已配置SSL证书(PayPal Webhook必需HTTPS)
|
||||
- [ ] Nginx配置中的proxy_pass端口为8082
|
||||
- [ ] PayPal控制台Webhook URL已配置为域名(HTTPS)
|
||||
|
||||
@@ -1,134 +0,0 @@
|
||||
# 域名配置总结
|
||||
|
||||
## ✅ 已完成的配置修改
|
||||
|
||||
### 域名信息
|
||||
- **域名**: `shopd.mtkj2025.com`
|
||||
- **SSL证书**: 已配置(Let's Encrypt)
|
||||
- **协议**: HTTPS(443端口)
|
||||
|
||||
### 1. 后端配置文件
|
||||
|
||||
#### application-dev.yml
|
||||
- ✅ `app.frontend.url: https://shopd.mtkj2025.com`
|
||||
- ✅ `paypal.webhook-url: https://shopd.mtkj2025.com/api/paypal/webhook`
|
||||
|
||||
#### application-prod.yml
|
||||
- ✅ `app.frontend.url: ${app.frontend.url:https://shopd.mtkj2025.com}`
|
||||
- ✅ `paypal.webhook-url: ${paypal.webhook-url:https://shopd.mtkj2025.com/api/paypal/webhook}`
|
||||
|
||||
#### mt-startup/application-dev.yml
|
||||
- ✅ `app.frontend.url: https://shopd.mtkj2025.com`
|
||||
|
||||
#### mt-startup/application.yml
|
||||
- ✅ `app.frontend.url: https://shopd.mtkj2025.com`
|
||||
|
||||
### 2. Java代码
|
||||
|
||||
#### ProductServiceImpl.java
|
||||
- ✅ 默认值: `https://shopd.mtkj2025.com`
|
||||
- ✅ 注释示例已更新
|
||||
|
||||
#### ProductLinkServiceImpl.java
|
||||
- ✅ 默认值: `https://shopd.mtkj2025.com`
|
||||
|
||||
#### MtPayApplication.java
|
||||
- ✅ 启动日志使用域名和HTTPS协议
|
||||
- ✅ 前端地址提示: `https://shopd.mtkj2025.com`
|
||||
|
||||
#### MtkjpayApplication.java
|
||||
- ✅ 启动日志使用域名和HTTPS协议
|
||||
- ✅ 前端地址提示: `https://shopd.mtkj2025.com`
|
||||
|
||||
### 3. 前端配置
|
||||
|
||||
#### .env.production
|
||||
- ✅ `VITE_API_BASE_URL=/api`(相对路径,自动使用当前域名)
|
||||
|
||||
#### config/index.js
|
||||
- ✅ 使用相对路径,自动适配HTTPS域名
|
||||
|
||||
## 📋 配置说明
|
||||
|
||||
### 前端URL配置
|
||||
- **配置值**: `https://shopd.mtkj2025.com`
|
||||
- **用途**: 生成商品详情页链接
|
||||
- **格式**: `https://shopd.mtkj2025.com/product/{linkCode}`
|
||||
|
||||
### PayPal Webhook配置
|
||||
- **配置值**: `https://shopd.mtkj2025.com/api/paypal/webhook`
|
||||
- **要求**: PayPal只接受HTTPS(端口443)
|
||||
- **说明**: 通过Nginx SSL转发到后端8082端口
|
||||
|
||||
### 前端API请求
|
||||
- **配置**: 相对路径 `/api`
|
||||
- **说明**: 自动使用当前域名和协议(HTTPS)
|
||||
- **实际请求**: `https://shopd.mtkj2025.com/api/xxx`
|
||||
|
||||
## 🔧 服务器配置要求
|
||||
|
||||
### Nginx配置
|
||||
需要确保Nginx配置支持:
|
||||
1. **HTTPS监听**(443端口)
|
||||
2. **SSL证书**(已配置)
|
||||
3. **强制HTTPS**(建议开启)
|
||||
4. **API反向代理**(转发到后端8082)
|
||||
|
||||
### 防火墙
|
||||
- ✅ 443端口已开放(HTTPS)
|
||||
- ✅ 80端口已开放(HTTP,可重定向到HTTPS)
|
||||
- ✅ 8082端口已开放(后端服务,仅内网访问)
|
||||
|
||||
## 📝 下一步操作
|
||||
|
||||
### 1. 重新打包后端
|
||||
```bash
|
||||
cd E:\MTKJPAY
|
||||
mvn clean package -DskipTests
|
||||
```
|
||||
|
||||
### 2. 上传并部署
|
||||
- 上传新的jar包到服务器
|
||||
- 重启后端服务
|
||||
|
||||
### 3. 更新PayPal控制台
|
||||
- Webhook URL: `https://shopd.mtkj2025.com/api/paypal/webhook`
|
||||
- 测试Webhook连接
|
||||
|
||||
### 4. 验证配置
|
||||
- 访问前端: `https://shopd.mtkj2025.com`
|
||||
- 测试API: `https://shopd.mtkj2025.com/api/health`
|
||||
- 创建商品,检查生成的链接是否为: `https://shopd.mtkj2025.com/product/xxxxx`
|
||||
|
||||
## ⚠️ 重要提示
|
||||
|
||||
1. **强制HTTPS**
|
||||
- 在宝塔面板中开启"强制HTTPS"开关
|
||||
- 确保所有HTTP请求自动重定向到HTTPS
|
||||
|
||||
2. **商品链接生成**
|
||||
- 所有生成的商品链接将使用: `https://shopd.mtkj2025.com/product/{linkCode}`
|
||||
- 确保链接可以通过HTTPS正常访问
|
||||
|
||||
3. **PayPal Webhook**
|
||||
- 必须使用HTTPS域名
|
||||
- 确保Nginx正确转发到后端
|
||||
- 测试Webhook连接是否正常
|
||||
|
||||
4. **前端访问**
|
||||
- 前端通过HTTPS访问: `https://shopd.mtkj2025.com`
|
||||
- API请求自动使用HTTPS: `https://shopd.mtkj2025.com/api/xxx`
|
||||
|
||||
## ✅ 配置检查清单
|
||||
|
||||
- [x] 所有配置文件中的URL已更新为域名
|
||||
- [x] 所有URL使用HTTPS协议
|
||||
- [x] Java代码默认值已更新
|
||||
- [x] 启动日志已更新
|
||||
- [x] 前端使用相对路径(自动适配域名)
|
||||
- [ ] 重新打包后端
|
||||
- [ ] 上传并部署新版本
|
||||
- [ ] 在宝塔面板开启"强制HTTPS"
|
||||
- [ ] 更新PayPal控制台Webhook URL
|
||||
- [ ] 验证所有功能正常
|
||||
|
||||
@@ -1,190 +0,0 @@
|
||||
# Nginx SSL配置指南(PayPal Webhook必需)
|
||||
|
||||
## 问题说明
|
||||
|
||||
PayPal Webhook **只接受HTTPS(端口443)**的URL,不接受HTTP或其他端口。
|
||||
|
||||
当前配置:
|
||||
- ❌ `http://175.178.252.59:8082/api/paypal/webhook` - PayPal不接受
|
||||
- ✅ `https://175.178.252.59/api/paypal/webhook` - PayPal接受
|
||||
|
||||
## 解决方案
|
||||
|
||||
需要通过Nginx配置SSL证书,将HTTPS请求转发到后端的HTTP服务。
|
||||
|
||||
## 配置步骤
|
||||
|
||||
### 1. 在宝塔面板中配置SSL证书
|
||||
|
||||
1. **进入网站设置**
|
||||
- 宝塔面板 → 网站 → 选择你的网站(175.178.252.59)
|
||||
- 点击"设置" → "SSL"
|
||||
|
||||
2. **申请或配置SSL证书**
|
||||
|
||||
**选项A:使用Let's Encrypt免费证书(推荐)**
|
||||
- 点击"Let's Encrypt"
|
||||
- 输入域名(如果有)或使用IP地址
|
||||
- 点击"申请"
|
||||
- 等待证书申请完成
|
||||
|
||||
**选项B:使用自签名证书(仅测试用)**
|
||||
- 点击"自签证书"
|
||||
- 生成自签名证书
|
||||
- ⚠️ 注意:自签名证书PayPal可能不接受,建议使用Let's Encrypt
|
||||
|
||||
3. **启用HTTPS**
|
||||
- 证书申请成功后,点击"强制HTTPS"
|
||||
- 保存配置
|
||||
|
||||
### 2. 配置Nginx反向代理(SSL)
|
||||
|
||||
在宝塔面板中:
|
||||
1. 网站 → 设置 → 配置文件
|
||||
2. 找到 `location /api/` 配置块
|
||||
3. 确保配置如下:
|
||||
|
||||
```nginx
|
||||
# HTTP请求重定向到HTTPS(可选,如果启用了强制HTTPS)
|
||||
# server {
|
||||
# listen 80;
|
||||
# server_name 175.178.252.59;
|
||||
# return 301 https://$server_name$request_uri;
|
||||
# }
|
||||
|
||||
# HTTPS服务器配置
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
listen [::]:443 ssl http2;
|
||||
server_name 175.178.252.59;
|
||||
|
||||
# SSL证书配置(宝塔会自动配置)
|
||||
ssl_certificate /www/server/panel/vhost/cert/175.178.252.59/fullchain.pem;
|
||||
ssl_certificate_key /www/server/panel/vhost/cert/175.178.252.59/privkey.pem;
|
||||
|
||||
# SSL配置(宝塔会自动配置)
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers HIGH:!aNULL:!MD5;
|
||||
ssl_prefer_server_ciphers on;
|
||||
|
||||
root /www/wwwroot/175.178.252.59;
|
||||
index index.html index.htm;
|
||||
|
||||
# 前端路由配置
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
# API反向代理(关键配置)
|
||||
location /api/ {
|
||||
proxy_pass http://127.0.0.1:8082; # 转发到后端HTTP服务
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme; # 传递原始协议(HTTPS)
|
||||
|
||||
# WebSocket支持(如果需要)
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
|
||||
# 超时配置
|
||||
proxy_connect_timeout 60s;
|
||||
proxy_send_timeout 60s;
|
||||
proxy_read_timeout 60s;
|
||||
}
|
||||
|
||||
# 静态资源缓存
|
||||
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
|
||||
expires 30d;
|
||||
}
|
||||
|
||||
location ~ .*\.(js|css)?$ {
|
||||
expires 12h;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 修改后端配置
|
||||
|
||||
后端配置文件已更新:
|
||||
- `application-dev.yml`: `paypal.webhook-url: https://175.178.252.59/api/paypal/webhook`
|
||||
|
||||
### 4. 更新PayPal控制台
|
||||
|
||||
在PayPal控制台中配置Webhook URL:
|
||||
- **Webhook URL**: `https://175.178.252.59/api/paypal/webhook`
|
||||
- ✅ 使用HTTPS(不是HTTP)
|
||||
- ✅ 不指定端口(默认443)
|
||||
- ✅ 通过Nginx转发到后端
|
||||
|
||||
### 5. 验证配置
|
||||
|
||||
1. **测试HTTPS访问**
|
||||
```bash
|
||||
curl https://175.178.252.59/api/health
|
||||
```
|
||||
|
||||
2. **测试Webhook端点**
|
||||
```bash
|
||||
curl -X POST https://175.178.252.59/api/paypal/webhook \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"test": "data"}'
|
||||
```
|
||||
|
||||
3. **检查PayPal Webhook配置**
|
||||
- 在PayPal控制台测试Webhook
|
||||
- 应该不再显示端口错误
|
||||
|
||||
## 重要提示
|
||||
|
||||
1. **SSL证书是必需的**
|
||||
- PayPal只接受HTTPS
|
||||
- 建议使用Let's Encrypt免费证书
|
||||
- 自签名证书PayPal可能不接受
|
||||
|
||||
2. **Nginx配置要点**
|
||||
- 监听443端口(HTTPS)
|
||||
- 将 `/api/` 请求转发到 `http://127.0.0.1:8082`
|
||||
- 设置 `X-Forwarded-Proto` 头,让后端知道原始请求是HTTPS
|
||||
|
||||
3. **后端不需要修改**
|
||||
- 后端仍然监听8082端口(HTTP)
|
||||
- Nginx负责SSL终止和转发
|
||||
|
||||
4. **防火墙配置**
|
||||
- 确保443端口已开放
|
||||
- 80端口可以重定向到443
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q1: 没有域名,只有IP地址,能申请SSL证书吗?
|
||||
|
||||
**A:** Let's Encrypt需要域名,不能为IP地址签发证书。解决方案:
|
||||
- 使用自签名证书(PayPal可能不接受)
|
||||
- 使用内网穿透服务(如ngrok、cpolar)提供HTTPS
|
||||
- 申请一个域名并解析到服务器IP
|
||||
|
||||
### Q2: 使用自签名证书PayPal会接受吗?
|
||||
|
||||
**A:** 通常不会。PayPal会验证SSL证书的有效性,自签名证书会被拒绝。建议:
|
||||
- 使用Let's Encrypt免费证书(需要域名)
|
||||
- 或使用内网穿透服务
|
||||
|
||||
### Q3: 如何测试Webhook是否正常工作?
|
||||
|
||||
**A:**
|
||||
1. 在PayPal控制台发送测试Webhook
|
||||
2. 查看后端日志,确认收到请求
|
||||
3. 检查Nginx访问日志和错误日志
|
||||
|
||||
## 配置检查清单
|
||||
|
||||
- [ ] SSL证书已申请并配置
|
||||
- [ ] Nginx监听443端口
|
||||
- [ ] `/api/` 路径正确转发到 `http://127.0.0.1:8082`
|
||||
- [ ] 后端配置中的webhook URL已改为HTTPS
|
||||
- [ ] PayPal控制台Webhook URL已更新为 `https://175.178.252.59/api/paypal/webhook`
|
||||
- [ ] 443端口已开放防火墙
|
||||
- [ ] 测试HTTPS访问正常
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
# 项目改进计划
|
||||
|
||||
## 已完成功能
|
||||
|
||||
- ✅ 商品管理(创建、查询、下架、分页)
|
||||
- ✅ 订单管理(创建、查询、分页、状态管理)
|
||||
- ✅ PayPal支付集成(创建订单、捕获支付、Webhook处理)
|
||||
- ✅ 库存管理(扣减、恢复)
|
||||
- ✅ 货币转换(实时汇率、多币种支持)
|
||||
- ✅ ERP用户系统(注册、登录、信息管理)
|
||||
- ✅ 国际化支持(6种语言)
|
||||
|
||||
## 待实现功能(按优先级)
|
||||
|
||||
### 高优先级
|
||||
1. **商品编辑功能** - 支持修改商品信息
|
||||
2. **订单详情页面** - 显示完整订单和支付信息
|
||||
3. **订单状态管理** - 发货、完成、取消功能
|
||||
4. **密码加密升级** - MD5升级为BCrypt
|
||||
|
||||
### 中优先级
|
||||
5. **JWT Token实现** - 替换MD5+Base64 Token
|
||||
6. **Redis缓存集成** - PayPal token和汇率缓存
|
||||
7. **角色权限系统** - 角色和权限管理
|
||||
8. **操作日志系统** - 记录用户操作
|
||||
|
||||
### 低优先级
|
||||
9. **单元测试** - 测试覆盖率>70%
|
||||
10. **Swagger文档** - API文档自动生成
|
||||
11. **数据统计** - 销售和订单统计
|
||||
12. **容器化部署** - Docker支持
|
||||
|
||||
## 实施建议
|
||||
|
||||
**第一阶段(1-2周)**:商品编辑、订单详情、订单状态管理、密码加密升级
|
||||
|
||||
**第二阶段(2-3周)**:JWT Token、角色权限系统
|
||||
|
||||
**第三阶段(3-4周)**:Redis缓存、操作日志、性能优化
|
||||
@@ -1,120 +0,0 @@
|
||||
# 公网访问配置检查清单
|
||||
|
||||
## ✅ 已完成的配置修改
|
||||
|
||||
### 1. 后端配置
|
||||
|
||||
#### 端口配置
|
||||
- ✅ `application-dev.yml`: `server.port: 8082`
|
||||
- ✅ `application-prod.yml`: `server.port: ${server.port:8082}`
|
||||
- ✅ `ProductServiceImpl.java`: 默认端口改为 `8082`
|
||||
|
||||
#### 前端URL配置(用于生成商品链接)
|
||||
- ✅ `application-dev.yml`: `app.frontend.url: http://175.178.252.59`
|
||||
- ✅ `application-prod.yml`: `app.frontend.url: ${app.frontend.url:http://175.178.252.59}`
|
||||
- ✅ `mt-startup/application-dev.yml`: `app.frontend.url: http://175.178.252.59`
|
||||
- ✅ `mt-startup/application.yml`: `app.frontend.url: http://175.178.252.59`
|
||||
- ✅ `ProductServiceImpl.java`: 默认值改为 `http://175.178.252.59`
|
||||
- ✅ `ProductLinkServiceImpl.java`: 默认值改为 `http://175.178.252.59`
|
||||
|
||||
#### PayPal Webhook配置
|
||||
- ✅ `application-dev.yml`: `paypal.webhook-url: https://175.178.252.59/api/paypal/webhook`(HTTPS,PayPal要求)
|
||||
|
||||
#### 启动类日志
|
||||
- ✅ `MtPayApplication.java`: 启动日志使用公网地址
|
||||
- ✅ `MtkjpayApplication.java`: 启动日志使用公网地址
|
||||
|
||||
### 2. 前端配置
|
||||
|
||||
#### API地址
|
||||
- ✅ `.env.production`: `VITE_API_BASE_URL=/api`(相对路径,通过Nginx代理)
|
||||
- ✅ `vite.config.js`: 开发环境代理(保留127.0.0.1,仅用于本地开发)
|
||||
|
||||
### 3. 代码注释
|
||||
- ✅ `ProductServiceImpl.java`: 注释中的示例URL已更新为公网地址
|
||||
|
||||
## 📋 部署前检查清单
|
||||
|
||||
### 后端检查
|
||||
- [x] 端口配置为 `8082`
|
||||
- [x] 前端URL配置为 `http://175.178.252.59`(无端口,通过Nginx访问)
|
||||
- [x] PayPal Webhook URL配置为 `https://175.178.252.59/api/paypal/webhook`(HTTPS)
|
||||
- [ ] 重新打包后端:`mvn clean package -DskipTests`
|
||||
- [ ] 上传新的jar包到服务器
|
||||
- [ ] 启动后端服务并确认监听在 `8082` 端口
|
||||
|
||||
### 前端检查
|
||||
- [x] `.env.production` 使用相对路径 `/api`
|
||||
- [ ] 重新构建前端:`npm run build`
|
||||
- [ ] 上传新的dist目录到服务器
|
||||
|
||||
### Nginx配置检查
|
||||
- [ ] `proxy_pass` 端口为 `8082`:
|
||||
```nginx
|
||||
location /api/ {
|
||||
proxy_pass http://127.0.0.1:8082;
|
||||
...
|
||||
}
|
||||
```
|
||||
- [ ] Nginx配置已保存并重载
|
||||
|
||||
### PayPal配置检查
|
||||
- [ ] **Nginx已配置SSL证书(PayPal Webhook必需,只接受HTTPS)**
|
||||
- [ ] PayPal控制台Webhook URL已更新为:`https://175.178.252.59/api/paypal/webhook`
|
||||
|
||||
### 防火墙检查
|
||||
- [ ] 端口 `8082` 已开放(如果需要外部直接访问)
|
||||
- [ ] 端口 `80` 已开放(Nginx前端访问)
|
||||
|
||||
## 🔍 验证步骤
|
||||
|
||||
### 1. 验证后端服务
|
||||
```bash
|
||||
# 在服务器上执行
|
||||
curl http://127.0.0.1:8082/api/health
|
||||
```
|
||||
|
||||
### 2. 验证Nginx代理
|
||||
```bash
|
||||
# 在服务器上执行
|
||||
curl http://127.0.0.1/api/health
|
||||
```
|
||||
|
||||
### 3. 验证商品链接生成
|
||||
- 创建商品后,检查生成的链接是否为:`http://175.178.252.59/product/xxxxx`
|
||||
- 不应包含 `localhost` 或端口号
|
||||
|
||||
### 4. 验证前端访问
|
||||
- 浏览器访问:`http://175.178.252.59`
|
||||
- 检查浏览器控制台(F12)中的API请求
|
||||
- 请求URL应为:`http://175.178.252.59/api/xxx`(通过Nginx代理)
|
||||
|
||||
## ⚠️ 重要提示
|
||||
|
||||
1. **前端URL不需要端口号**
|
||||
- 配置为:`http://175.178.252.59`(不是 `http://175.178.252.59:3000`)
|
||||
- 因为前端通过Nginx访问,默认使用80端口
|
||||
|
||||
2. **后端API配置**
|
||||
- PayPal Webhook通过Nginx HTTPS访问:`https://175.178.252.59/api/paypal/webhook`(Nginx转发到后端8082)
|
||||
- 前端通过Nginx代理访问:`http://175.178.252.59/api/xxx`(Nginx转发到8082)
|
||||
- ⚠️ **重要:** PayPal只接受HTTPS(端口443),必须配置SSL证书
|
||||
|
||||
3. **商品链接生成**
|
||||
- 使用 `app.frontend.url` 配置生成
|
||||
- 格式:`{frontendUrl}/product/{linkCode}`
|
||||
- 示例:`http://175.178.252.59/product/2563c74bd94c4a4b95abccf697a6c756`
|
||||
|
||||
## 📝 修改总结
|
||||
|
||||
所有 `localhost` 和硬编码地址已替换为公网地址 `175.178.252.59`:
|
||||
- ✅ 配置文件中的URL
|
||||
- ✅ Java代码中的默认值
|
||||
- ✅ 启动日志中的提示信息
|
||||
- ✅ 代码注释中的示例
|
||||
|
||||
所有端口已统一为 `8082`:
|
||||
- ✅ 后端服务端口
|
||||
- ✅ PayPal Webhook URL
|
||||
- ✅ 代码中的默认值
|
||||
|
||||
Reference in New Issue
Block a user