# PolyHermes 部署文档 本文档介绍如何部署 PolyHermes 项目,包括后端和前端的不同部署方式。 ## 目录 - [一体化部署(推荐)](#一体化部署推荐) - [后端部署](#后端部署) - [Java 直接部署](#java-直接部署) - [Docker 部署](#docker-部署) - [前端部署](#前端部署) - [环境配置](#环境配置) - [常见问题](#常见问题) ## 一体化部署(推荐) 将前后端一起部署到一个 Docker 容器中,使用 Nginx 提供前端静态文件并代理后端 API。 ### 前置要求 - Docker 20.10+ - Docker Compose 2.0+ ### 部署步骤 1. **使用部署脚本(推荐)** ```bash # 在项目根目录 ./deploy.sh ``` 脚本会自动: - 检查 Docker 环境 - 创建 `.env` 配置文件(如果不存在) - 构建 Docker 镜像(包含前后端) - 启动服务(应用 + MySQL) 2. **手动部署** ```bash # 创建 .env 文件 cat > .env < .env < .env.production < ServerName your-domain.com DocumentRoot /path/to/frontend/dist # API 代理 ProxyPass /api http://localhost:8000/api ProxyPassReverse /api http://localhost:8000/api # WebSocket 代理 ProxyPass /ws ws://localhost:8000/ws ProxyPassReverse /ws ws://localhost:8000/ws # 前端路由(SPA) Options Indexes FollowSymLinks AllowOverride All Require all granted RewriteEngine On RewriteBase / RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.html [L] ``` #### 方式3:使用 serve(开发/测试) ```bash # 安装 serve npm install -g serve # 启动服务 serve -s dist -l 3000 ``` ## 环境配置 ### 后端环境变量 | 变量名 | 说明 | 默认值 | 必需 | |--------|------|--------|------| | `SPRING_PROFILES_ACTIVE` | Spring Profile | `dev` | 否 | | `DB_URL` | 数据库连接 URL | - | 是(生产) | | `DB_USERNAME` | 数据库用户名 | `root` | 是(生产) | | `DB_PASSWORD` | 数据库密码 | - | 是(生产) | | `SERVER_PORT` | 服务器端口 | `8000` | 否 | | `POLYGON_RPC_URL` | Polygon RPC 地址 | `https://polygon-rpc.com` | 否 | | `JWT_SECRET` | JWT 密钥 | - | 是(生产) | | `ADMIN_RESET_PASSWORD_KEY` | 管理员密码重置密钥 | - | 是(生产) | ### 前端环境变量 | 变量名 | 说明 | 默认值 | |--------|------|--------| | `VITE_API_URL` | 后端 API 地址 | `http://127.0.0.1:8000` | | `VITE_WS_URL` | WebSocket 地址 | `ws://127.0.0.1:8000` | ### 配置文件说明 #### 后端配置文件 - `application.properties` - 基础配置(所有环境共享) - `application-dev.properties` - 开发环境配置 - `application-prod.properties` - 生产环境配置 通过 `--spring.profiles.active=prod` 或环境变量 `SPRING_PROFILES_ACTIVE=prod` 切换环境。 #### 前端环境变量 Vite 使用 `.env.production` 文件在构建时注入环境变量。构建脚本会自动创建此文件。 ## 常见问题 ### 1. 数据库连接失败 **问题**: 后端无法连接数据库 **解决方案**: - 检查数据库服务是否运行 - 检查数据库连接 URL、用户名、密码是否正确 - 检查防火墙是否允许连接 - 对于 Docker 部署,确保使用正确的数据库地址(`mysql` 而非 `localhost`) ### 2. 前端无法连接后端 **问题**: 前端请求后端 API 失败 **解决方案**: - 检查后端服务是否运行 - 检查 `VITE_API_URL` 配置是否正确 - 检查 CORS 配置(如果跨域) - 检查网络连接和防火墙 ### 3. WebSocket 连接失败 **问题**: WebSocket 无法建立连接 **解决方案**: - 检查 `VITE_WS_URL` 配置是否正确 - 检查 WebSocket 代理配置(Nginx/Apache) - 检查防火墙是否允许 WebSocket 连接 - 检查后端 WebSocket 服务是否正常 ### 4. Docker 容器无法访问数据库 **问题**: Docker 容器中的后端无法连接宿主机数据库 **解决方案**: - 使用 `host.docker.internal` 作为数据库地址(Mac/Windows) - 使用 Docker 网络连接(推荐使用 docker-compose) - 检查数据库是否允许远程连接 ### 5. 构建失败 **问题**: 前端或后端构建失败 **解决方案**: - 检查 Node.js 版本(需要 18+) - 检查 Java 版本(需要 17+) - 清理缓存后重新构建: ```bash # 前端 rm -rf node_modules dist npm install npm run build # 后端 ./gradlew clean build ``` ## 生产环境检查清单 - [ ] 修改所有默认密码和密钥(JWT_SECRET、ADMIN_RESET_PASSWORD_KEY、数据库密码) - [ ] 配置正确的数据库连接(使用 SSL) - [ ] 设置正确的 Spring Profile(`prod`) - [ ] 配置正确的后端 API 地址(前端) - [ ] 配置反向代理(Nginx/Apache) - [ ] 配置 HTTPS(生产环境推荐) - [ ] 配置防火墙规则 - [ ] 设置日志轮转 - [ ] 配置监控和告警 - [ ] 定期备份数据库 ## 性能优化建议 ### 后端 - 调整 JVM 参数(堆内存、GC 策略) - 配置数据库连接池大小 - 启用 HTTP 压缩 - 配置缓存策略 ### 前端 - 启用 Gzip 压缩(Nginx) - 配置静态资源缓存 - 使用 CDN 加速 - 启用 HTTP/2 ## 安全建议 - 使用 HTTPS(生产环境必须) - 配置 CORS 白名单 - 定期更新依赖包 - 使用强密码和密钥 - 限制数据库访问权限 - 配置防火墙规则 - 定期备份数据 - 监控异常访问 ## 技术支持 如有问题,请提交 Issue 到 [GitHub](https://github.com/WrBug/PolyHermes) 或联系 [Twitter](https://x.com/quant_tr)。