# Winupdate Neo 部署指南 ## 系统架构 本项目使用以下技术栈: - **前端**: Next.js 15 (TypeScript) - **数据库**: PostgreSQL + Prisma ORM - **对象存储**: MinIO (自建 S3 兼容存储) - **包管理**: Bun - **运行时**: Node.js ## 部署步骤 ### 1. 环境准备 #### 1.1 安装 Bun ```bash curl -fsSL https://bun.sh/install | bash # 或在 Windows 上: powershell -c "irm bun.sh/install.ps1 | iex" ``` #### 1.2 安装 PostgreSQL 确保 PostgreSQL 服务正在运行,并创建数据库。 #### 1.3 部署 MinIO ```bash # Docker 方式部署 MinIO docker run -p 9000:9000 -p 9001:9001 \ -v /data/minio:/data \ -e "MINIO_ROOT_USER=feie9454" \ -e "MINIO_ROOT_PASSWORD=zjh94544549ok" \ minio/minio server /data --console-address ":9001" ``` 访问 http://192.168.5.13:9001 进入 MinIO 控制台,创建名为 "winupdate" 的 bucket。 ### 2. 项目配置 #### 2.1 克隆项目 ```bash git clone cd winupdate-neo ``` #### 2.2 安装依赖 ```bash bun install ``` #### 2.3 配置环境变量 复制并编辑 `.env` 文件: ```env # 数据库配置 DATABASE_URL="postgresql://username:password@localhost:5432/winupdate_neo?schema=public" # 认证配置 AUTH_USERNAME=admin AUTH_PASSWORD=password # 服务端口 PORT=3000 # MinIO 配置(在代码中硬编码,生产环境建议移到环境变量) ``` #### 2.4 初始化数据库 ```bash # 生成 Prisma 客户端 bun run db:generate # 运行数据库迁移 bun run db:migrate ``` ### 3. 测试部署 #### 3.1 测试 MinIO 连接 ```bash bun run test-minio.ts ``` 应该看到: ``` 🎉 MinIO 测试完全成功!可以开始使用了。 ``` #### 3.2 测试文件操作 ```bash bun run test-file-operations.ts ``` 应该看到完整的文件上传、下载、删除测试成功。 #### 3.3 启动开发服务器 ```bash bun run dev ``` 访问 http://localhost:3000/api-test 查看 API 状态。 ### 4. 生产部署 #### 4.1 构建项目 ```bash bun run build ``` #### 4.2 启动生产服务器 ```bash bun run start ``` ## 存储架构说明 ### MinIO 对象存储结构 ``` winupdate bucket/ ├── screenshots/ # 截图文件 │ ├── 2025/ │ │ ├── 01/ │ │ │ ├── hostname1/ │ │ │ │ ├── uuid1.webp │ │ │ │ └── uuid2.webp │ │ │ └── hostname2/ │ │ └── 02/ │ └── 2024/ ├── versions/ # 版本文件 │ ├── 2025/ │ │ ├── 06/ │ │ │ ├── uuid1.exe │ │ │ └── uuid2.exe │ │ └── 07/ │ └── 2024/ └── files/ # 其他文件 └── ... ``` ### 性能优化特性 1. **分层目录结构**: 按时间和主机名分层,避免单目录文件过多 2. **数据库索引**: objectName 字段建立索引,快速查找 3. **元数据存储**: 文件元数据存储在 MinIO 中,避免额外数据库查询 4. **缓存友好**: 静态文件设置长期缓存 5. **并发支持**: MinIO 原生支持高并发读写 ### 扩展能力 1. **水平扩展**: MinIO 支持分布式部署 2. **存储容量**: 理论上无限制,实际受硬件限制 3. **备份恢复**: 支持 S3 兼容的备份工具 4. **监控告警**: 可集成 Prometheus + Grafana ## API 接口说明 ### 文件上传流程 1. 客户端上传文件到 `/api/hosts/{hostname}/screenshots` 2. 服务器将文件存储到 MinIO,生成 objectName 3. 在数据库中保存文件元数据,包含 objectName 4. 返回成功响应 ### 文件下载流程 1. 客户端请求 `/api/screenshots/{fileId}` 2. 服务器根据 fileId 从数据库查找 objectName 3. 从 MinIO 下载文件 4. 返回文件数据 ## 监控和维护 ### 日志监控 - MinIO 操作日志 - 应用程序日志 - 数据库查询日志 ### 存储监控 ```bash # 查看存储统计 curl http://localhost:3000/api/storage/stats ``` ### 清理策略 - 定期清理过期截图(可配置保留时间) - 监控存储空间使用情况 - 设置存储告警阈值 ## 故障排除 ### 常见问题 1. **MinIO 连接失败** - 检查 MinIO 服务状态 - 确认网络连通性 - 验证认证信息 2. **数据库连接失败** - 检查 PostgreSQL 服务状态 - 确认连接字符串正确 - 检查用户权限 3. **文件上传失败** - 检查磁盘空间 - 确认 MinIO bucket 存在 - 查看 MinIO 日志 4. **性能问题** - 监控数据库查询性能 - 检查 MinIO 服务器负载 - 优化数据库索引 ### 性能调优建议 1. **数据库优化** - 定期更新统计信息 - 监控慢查询 - 适当增加连接池大小 2. **MinIO 优化** - 使用 SSD 存储 - 配置适当的并发数 - 启用压缩(如果需要) 3. **应用优化** - 启用文件缓存 - 使用 CDN(如果有公网访问需求) - 实现文件预签名 URL(减少服务器负载) ## 安全建议 1. **访问控制** - 使用强密码 - 定期轮换认证信息 - 限制网络访问范围 2. **数据安全** - 启用数据加密 - 定期备份数据 - 监控异常访问 3. **网络安全** - 使用 HTTPS - 配置防火墙 - 启用访问日志