Migrate project from typing_practiceweb
This commit is contained in:
354
KMEANS_DEPLOYMENT.md
Normal file
354
KMEANS_DEPLOYMENT.md
Normal file
@@ -0,0 +1,354 @@
|
||||
# K-Means 演示页面部署指南
|
||||
|
||||
## 已完成的工作
|
||||
|
||||
### 1. 创建的文件
|
||||
|
||||
- **src/components/KMeansDemo.tsx** - K-Means 算法演示组件
|
||||
- **KMEANS_README.md** - 使用说明文档
|
||||
- **KMEANS_DEPLOYMENT.md** - 本部署指南
|
||||
|
||||
### 2. 修改的文件
|
||||
|
||||
- **src/App.tsx** - 添加了 `/kmeans` 路由
|
||||
- **src/components/Navbar.tsx** - 添加了导航菜单项
|
||||
|
||||
### 3. 功能特性
|
||||
|
||||
✅ 画布绘图功能(800x600)
|
||||
✅ 随机生成点(可控制数量)
|
||||
✅ 鼠标左键添加点/设置质心
|
||||
✅ 鼠标右键清空画布
|
||||
✅ K值可调节(1-10)
|
||||
✅ 坐标显示开关
|
||||
✅ 逐步演示 K-Means 算法
|
||||
✅ 距离可视化(线段 + 数值)
|
||||
✅ 导出到 Excel
|
||||
✅ 从 Excel 导入
|
||||
✅ 响应式布局
|
||||
|
||||
## 本地开发环境
|
||||
|
||||
### 访问地址
|
||||
|
||||
- 开发服务器: http://localhost:3001/kmeans
|
||||
|
||||
### 启动命令
|
||||
|
||||
```bash
|
||||
# 1. 安装依赖(首次或更新后)
|
||||
npm install
|
||||
|
||||
# 2. 启动开发服务器
|
||||
npm run start
|
||||
|
||||
# 或者只启动前端(K-Means 是纯前端功能)
|
||||
npm run client
|
||||
```
|
||||
|
||||
### 浏览器预览
|
||||
|
||||
启动成功后:
|
||||
1. 打开浏览器访问 http://localhost:3001
|
||||
2. 点击导航栏中的 "K-Means演示" 菜单项
|
||||
3. 或直接访问 http://localhost:3001/kmeans
|
||||
|
||||
## 生产环境部署
|
||||
|
||||
### 方案一:使用现有服务器
|
||||
|
||||
如果您已经有一个运行中的服务器:
|
||||
|
||||
1. **构建生产版本**
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
2. **部署构建文件**
|
||||
- 构建后的文件在 `build/` 目录下
|
||||
- 将整个 `build/` 目录复制到服务器的静态文件目录
|
||||
- 确保服务器配置了 SPA 路由支持(所有路由都指向 index.html)
|
||||
|
||||
3. **Nginx 配置示例**
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name your-domain.com;
|
||||
|
||||
root /path/to/build;
|
||||
index index.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
# 静态资源缓存
|
||||
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
4. **访问地址**
|
||||
- https://your-domain.com/kmeans
|
||||
|
||||
### 方案二:静态托管服务
|
||||
|
||||
可以使用以下任一平台进行静态托管:
|
||||
|
||||
#### Vercel 部署
|
||||
|
||||
```bash
|
||||
# 安装 Vercel CLI
|
||||
npm install -g vercel
|
||||
|
||||
# 部署
|
||||
vercel
|
||||
```
|
||||
|
||||
#### Netlify 部署
|
||||
|
||||
```bash
|
||||
# 安装 Netlify CLI
|
||||
npm install -g netlify-cli
|
||||
|
||||
# 构建并部署
|
||||
npm run build
|
||||
netlify deploy --prod --dir=build
|
||||
```
|
||||
|
||||
#### GitHub Pages 部署
|
||||
|
||||
1. 修改 `package.json`,添加 homepage 字段:
|
||||
```json
|
||||
{
|
||||
"homepage": "https://yourusername.github.io/typing_practiceweb"
|
||||
}
|
||||
```
|
||||
|
||||
2. 安装 gh-pages:
|
||||
```bash
|
||||
npm install --save-dev gh-pages
|
||||
```
|
||||
|
||||
3. 添加部署脚本到 `package.json`:
|
||||
```json
|
||||
{
|
||||
"scripts": {
|
||||
"predeploy": "npm run build",
|
||||
"deploy": "gh-pages -d build"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
4. 部署:
|
||||
```bash
|
||||
npm run deploy
|
||||
```
|
||||
|
||||
### 方案三:Docker 容器化部署
|
||||
|
||||
创建 `Dockerfile`:
|
||||
|
||||
```dockerfile
|
||||
# 构建阶段
|
||||
FROM node:18 AS build
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm install
|
||||
COPY . .
|
||||
RUN npm run build
|
||||
|
||||
# 生产阶段
|
||||
FROM nginx:alpine
|
||||
COPY --from=build /app/build /usr/share/nginx/html
|
||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
EXPOSE 80
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
||||
```
|
||||
|
||||
创建 `nginx.conf`:
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
location / {
|
||||
root /usr/share/nginx/html;
|
||||
index index.html index.htm;
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
构建和运行:
|
||||
|
||||
```bash
|
||||
# 构建镜像
|
||||
docker build -t typing-practice-web .
|
||||
|
||||
# 运行容器
|
||||
docker run -d -p 80:80 typing-practice-web
|
||||
```
|
||||
|
||||
## 环境要求
|
||||
|
||||
### 最低要求
|
||||
|
||||
- Node.js >= 16.x
|
||||
- npm >= 7.x
|
||||
- 现代浏览器(支持 ES2017+ 和 Canvas API)
|
||||
|
||||
### 推荐配置
|
||||
|
||||
- Node.js 18.x LTS
|
||||
- npm 9.x
|
||||
- Chrome/Firefox/Safari/Edge 最新版本
|
||||
|
||||
## 性能优化建议
|
||||
|
||||
### 1. 代码分割
|
||||
|
||||
当前 K-Means 组件已经是独立的,React Router 会自动进行代码分割。如需进一步优化,可以使用懒加载:
|
||||
|
||||
```typescript
|
||||
// App.tsx
|
||||
const KMeansDemo = lazy(() => import('./components/KMeansDemo'));
|
||||
|
||||
// 在路由中使用
|
||||
<Route path="/kmeans" element={
|
||||
<Suspense fallback={<div>加载中...</div>}>
|
||||
<KMeansDemo />
|
||||
</Suspense>
|
||||
} />
|
||||
```
|
||||
|
||||
### 2. CDN 加速
|
||||
|
||||
如果使用自己的服务器,建议配置 CDN 加速静态资源:
|
||||
|
||||
- 将 build 目录下的静态文件上传到 CDN
|
||||
- 修改构建配置指向 CDN 地址
|
||||
|
||||
### 3. 压缩优化
|
||||
|
||||
生产构建已经自动启用:
|
||||
- JavaScript minification
|
||||
- CSS minification
|
||||
- Tree shaking
|
||||
- Gzip 压缩(需服务器支持)
|
||||
|
||||
## 验证部署
|
||||
|
||||
### 检查清单
|
||||
|
||||
- [ ] 页面可以正常访问(/kmeans 路由)
|
||||
- [ ] 导航菜单显示 "K-Means演示" 链接
|
||||
- [ ] 画布可以正常显示(800x600)
|
||||
- [ ] 可以生成随机点
|
||||
- [ ] 可以手动添加点和质心
|
||||
- [ ] "执行一步" 按钮功能正常
|
||||
- [ ] 距离线和数值显示正确
|
||||
- [ ] Excel 导入导出功能正常
|
||||
- [ ] 右键菜单被禁用(用于清空画布)
|
||||
- [ ] 响应式布局在不同设备上正常
|
||||
|
||||
### 测试步骤
|
||||
|
||||
1. 访问 /kmeans 页面
|
||||
2. 设置 K=3
|
||||
3. 点击"生成随机点"
|
||||
4. 在画布上点击3次设置质心
|
||||
5. 点击"执行一步"查看算法演示
|
||||
6. 导出数据到 Excel
|
||||
7. 清空画布后重新导入 Excel 数据
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 问题1: 页面404
|
||||
|
||||
**原因**: SPA 路由未配置
|
||||
|
||||
**解决**:
|
||||
- 检查服务器配置是否支持 SPA 路由
|
||||
- Nginx 需要配置 `try_files $uri $uri/ /index.html`
|
||||
- Apache 需要配置 `.htaccess`
|
||||
|
||||
### 问题2: Excel 导入导出不工作
|
||||
|
||||
**原因**: xlsx 库未正确加载
|
||||
|
||||
**解决**:
|
||||
```bash
|
||||
npm install xlsx --save
|
||||
npm rebuild
|
||||
```
|
||||
|
||||
### 问题3: 画布不显示
|
||||
|
||||
**原因**: Canvas API 不支持或样式问题
|
||||
|
||||
**解决**:
|
||||
- 检查浏览器是否支持 Canvas
|
||||
- 检查是否有 CSS 样式冲突
|
||||
- 打开浏览器开发者工具查看错误信息
|
||||
|
||||
### 问题4: TypeScript 编译错误
|
||||
|
||||
**原因**: 类型定义缺失
|
||||
|
||||
**解决**:
|
||||
```bash
|
||||
npm install --save-dev @types/react @types/react-dom
|
||||
```
|
||||
|
||||
## 安全考虑
|
||||
|
||||
1. **CSP 策略**: 如果服务器配置了 Content Security Policy,确保允许:
|
||||
- Canvas 绘图
|
||||
- Blob URLs (用于 Excel 下载)
|
||||
|
||||
2. **CORS**: K-Means 是纯前端功能,不涉及跨域请求
|
||||
|
||||
3. **数据隐私**:
|
||||
- 所有数据都在浏览器本地处理
|
||||
- Excel 导入导出不会上传到服务器
|
||||
- 不收集用户数据
|
||||
|
||||
## 维护和更新
|
||||
|
||||
### 更新依赖
|
||||
|
||||
```bash
|
||||
# 检查过期的依赖
|
||||
npm outdated
|
||||
|
||||
# 更新依赖
|
||||
npm update
|
||||
|
||||
# 更新主要版本(谨慎)
|
||||
npm install <package>@latest
|
||||
```
|
||||
|
||||
### 监控和日志
|
||||
|
||||
生产环境建议添加:
|
||||
- 错误监控(如 Sentry)
|
||||
- 性能监控(如 Google Analytics)
|
||||
- 用户行为分析
|
||||
|
||||
## 联系和支持
|
||||
|
||||
如遇到问题:
|
||||
1. 查看浏览器控制台错误信息
|
||||
2. 检查本文档的故障排查章节
|
||||
3. 查看 KMEANS_README.md 了解功能说明
|
||||
|
||||
## 更新日志
|
||||
|
||||
### v1.0.0 (2025-10-17)
|
||||
- ✨ 初始版本发布
|
||||
- ✨ 完整的 K-Means 算法可视化
|
||||
- ✨ Excel 导入导出功能
|
||||
- ✨ 响应式设计
|
||||
- ✨ 集成到主应用导航
|
||||
Reference in New Issue
Block a user