From 1a59f5c888390b1b158ca2e9a77d278e009b5d3e Mon Sep 17 00:00:00 2001 From: qiube <18969599531@163.com> Date: Fri, 26 Dec 2025 16:08:33 +0800 Subject: [PATCH] =?UTF-8?q?docs(deployment):=20=E7=A7=BB=E9=99=A4=E8=BF=87?= =?UTF-8?q?=E6=97=B6=E7=9A=84=E9=85=8D=E7=BD=AE=E6=96=87=E6=A1=A3=E5=B9=B6?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=83=A8=E7=BD=B2=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除了 502 错误排查指南文档 - 删除了配置文件管理说明文档 - 删除了域名配置总结文档 - 删除了 Nginx SSL 配置指南文档 - 删除了项目改进计划文档 - 删除了公网访问配置检查清单文档 - 更新了部署说明文档中的后端部署流程 - 简化了前端部署说明,移除了冗余的配置验证步骤 - 更新了配置检查清单,聚焦生产环境部署要点 --- 502_ERROR_TROUBLESHOOTING.md | 220 --------------------------------- CONFIG_MANAGEMENT.md | 232 ----------------------------------- DEPLOYMENT_README.md | 64 +++------- DOMAIN_CONFIG_SUMMARY.md | 134 -------------------- NGINX_SSL_CONFIG.md | 190 ---------------------------- PROJECT_IMPROVEMENT_PLAN.md | 39 ------ PUBLIC_ACCESS_CHECKLIST.md | 120 ------------------ 7 files changed, 18 insertions(+), 981 deletions(-) delete mode 100644 502_ERROR_TROUBLESHOOTING.md delete mode 100644 CONFIG_MANAGEMENT.md delete mode 100644 DOMAIN_CONFIG_SUMMARY.md delete mode 100644 NGINX_SSL_CONFIG.md delete mode 100644 PROJECT_IMPROVEMENT_PLAN.md delete mode 100644 PUBLIC_ACCESS_CHECKLIST.md diff --git a/502_ERROR_TROUBLESHOOTING.md b/502_ERROR_TROUBLESHOOTING.md deleted file mode 100644 index 2bb02ad..0000000 --- a/502_ERROR_TROUBLESHOOTING.md +++ /dev/null @@ -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 - ``` - diff --git a/CONFIG_MANAGEMENT.md b/CONFIG_MANAGEMENT.md deleted file mode 100644 index b32711b..0000000 --- a/CONFIG_MANAGEMENT.md +++ /dev/null @@ -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配置 - diff --git a/DEPLOYMENT_README.md b/DEPLOYMENT_README.md index 1749c58..0e00c5f 100644 --- a/DEPLOYMENT_README.md +++ b/DEPLOYMENT_README.md @@ -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) diff --git a/DOMAIN_CONFIG_SUMMARY.md b/DOMAIN_CONFIG_SUMMARY.md deleted file mode 100644 index 2a63be5..0000000 --- a/DOMAIN_CONFIG_SUMMARY.md +++ /dev/null @@ -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 -- [ ] 验证所有功能正常 - diff --git a/NGINX_SSL_CONFIG.md b/NGINX_SSL_CONFIG.md deleted file mode 100644 index 2403360..0000000 --- a/NGINX_SSL_CONFIG.md +++ /dev/null @@ -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访问正常 - diff --git a/PROJECT_IMPROVEMENT_PLAN.md b/PROJECT_IMPROVEMENT_PLAN.md deleted file mode 100644 index 16f6add..0000000 --- a/PROJECT_IMPROVEMENT_PLAN.md +++ /dev/null @@ -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缓存、操作日志、性能优化 diff --git a/PUBLIC_ACCESS_CHECKLIST.md b/PUBLIC_ACCESS_CHECKLIST.md deleted file mode 100644 index a170483..0000000 --- a/PUBLIC_ACCESS_CHECKLIST.md +++ /dev/null @@ -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 -- ✅ 代码中的默认值 -