Files
d1kt/KMEANS_DEPLOYMENT.md

355 lines
6.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 导入导出功能
- ✨ 响应式设计
- ✨ 集成到主应用导航