# liteOps **Repository Path**: yc168/lite-ops ## Basic Information - **Project Name**: liteOps - **Description**: # LiteOps - Windows Server IIS运维工具 ## 功能介绍 LiteOps是一款基于Tauri + Rust + Vue 3 + Element Plus的Windows Server IIS运维工具,提供直观的Web界面和强大的REST API,帮助管理员高效管理IIS站点、自动更新应用、备份和回滚版本。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-17 - **Last Updated**: 2026-01-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LiteOps - Windows Server IIS运维工具 ## 功能介绍 LiteOps是一款基于Tauri + Rust + Vue 3 + Element Plus的Windows Server IIS运维工具,提供直观的Web界面和强大的REST API,帮助管理员高效管理IIS站点、自动更新应用、备份和回滚版本。 ### 核心功能 #### 1. IIS站点管理 - 实时监控所有IIS站点状态(运行/停止) - 一键启动/停止站点 - 查看站点详细信息(物理路径、应用池、绑定信息等) - 监控应用程序池状态 #### 2. 应用自动更新 - **更新模式**:支持"上传文件"和"本地文件"两种模式 - **批量部署**:支持一次上传部署到多个站点 - **智能覆盖**:采用覆盖替换模式,不会删除整个目录,只更新zip包中的文件 - **自动备份**:更新前自动创建备份,失败可回滚 - **自动重试**:更新失败时自动重试(最多3次) - **自动清理**:部署完成后自动清理旧备份(保留最近5个) - 停止/启动应用程序池 - 支持指定站点更新 - 支持大文件上传 #### 3. 自动化备份与恢复 - 一键创建站点备份 - 自动压缩应用目录(使用Robocopy) - 支持按站点、时间、版本号管理备份 - 一键恢复任意备份版本 - 恢复前自动创建临时备份 - 自动清理旧备份(可配置保留天数) #### 4. REST API服务 - 提供完整的API接口,支持远程调用所有功能 - 支持文件上传接口 - 批量部署接口 - 健康检查接口 - 详细的API文档 #### 5. 系统托盘支持 - 最小化到系统托盘 - 点击托盘图标快速显示主窗口 - 开机自启动配置 - 关闭时可选择开启自启动 ## 安装说明 ### 系统要求 - Windows Server 2016/2019/2022 Datacenter/Standard - Windows 10/11 专业版及以上 - IIS 10.0及以上版本 - .NET Framework 4.8及以上 - WebView2 运行时(首次运行时自动检测) - 管理员权限 ### 安装步骤 1. **下载安装包** - 从发布页面下载最新版本的安装包 - 支持两种安装格式: - MSI安装包:`liteops_1.3.0_x64_en-US.msi` - NSIS安装包:`liteops_1.3.0_x64-setup.exe` 2. **运行安装程序** - 右键点击安装包,选择"以管理员身份运行" - 按照安装向导完成安装 - 安装完成后,桌面上会创建快捷方式 3. **首次运行** - 双击桌面快捷方式,或从开始菜单启动LiteOps - 系统会提示是否允许应用访问网络,选择"允许" - 应用将自动启动,并在系统托盘中显示图标 - 首次运行会自动检测WebView2,如未安装会提示安装 4. **访问Web界面** - 打开浏览器,访问 `http://localhost:9168` - 默认端口为 9168,可通过设置修改 - 即可看到LiteOps的Web管理界面 ## 使用指南 ### 1. IIS站点管理 #### 查看站点列表 1. 登录Web界面后,默认显示"站点管理"页面 2. 页面会自动加载所有IIS站点信息 3. 显示站点名称、状态、应用池、物理路径等信息 #### 启动/停止站点 1. 在站点列表中找到目标站点 2. 点击站点右侧的"启动"或"停止"按钮 3. 系统会自动执行相应操作,并更新站点状态 4. 操作结果会显示在页面顶部的消息通知中 ### 2. 应用更新 #### 通过Web界面更新 1. 点击左侧导航栏的"应用更新"选项 2. 选择更新模式:**上传文件** 或 **本地文件** 3. 选择目标站点(支持多选) 4. 上传或选择 .zip 格式的更新包 5. 填写版本描述(可选) 6. 点击"开始更新"进行部署 7. 系统会自动执行以下6个步骤: - **步骤 1/6**: 停止应用程序池 - **步骤 2/6**: 创建当前应用备份 - **步骤 3/6**: 解压更新文件到目标目录(覆盖模式) - **步骤 4/6**: 启动应用程序池 - **步骤 5/6**: 清理旧备份(保留最近5个) - **步骤 6/6**: 验证应用运行状态 8. 更新结果会显示在页面上 #### 重要说明 - **不会删除文件**:更新时采用智能覆盖模式,只会更新zip包中包含的文件,不会删除整个目录 - **自动备份**:每次更新前都会自动创建备份,确保可以回滚 - **批量部署**:支持同时部署到多个站点 - **自动重试**:更新失败时自动重试最多3次 #### 通过API更新 请参考API文档部分的 `/api/upload-deploy` 接口 ### 3. 备份与恢复 #### 创建备份 1. 点击左侧导航栏的"备份管理"选项 2. 选择目标站点 3. 点击"创建备份"按钮 4. 可选择添加备份描述 5. 点击"确定"按钮,系统开始创建备份 6. 备份完成后,会显示在备份列表中 #### 恢复备份 1. 在备份列表中找到要恢复的备份 2. 点击备份右侧的"恢复"按钮 3. 系统会提示确认恢复操作 4. 点击"确定"按钮,系统开始恢复操作: - 停止应用程序池 - 创建当前应用的临时备份 - 解压目标备份到应用目录 - 启动应用程序池 - 验证应用运行状态 5. 恢复结果会显示在页面上 #### 删除备份 1. 在备份列表中找到要删除的备份 2. 点击备份右侧的"删除"按钮 3. 系统会提示确认删除操作 4. 点击"确定"按钮,系统删除备份文件和记录 ## API文档 ### 基础信息 - API Base URL: `http://localhost:8080/api` - 所有请求需要管理员权限 - 支持的请求方法:GET, POST ### 站点管理 #### 获取站点列表 ``` GET /sites ``` **响应示例**: ```json [ { "id": "site_default_web_site", "name": "Default Web Site", "state": "Started", "state_display": "运行中", "physical_path": "C:\\inetpub\\wwwroot", "app_pool": "DefaultAppPool", "app_pool_state": "Started", "app_pool_state_display": "运行中", "bindings": [ { "protocol": "http", "binding_info": "端口 80", "raw_binding_info": "*:80:", "certificate_hash": null } ], "last_updated": "2026-01-15 14:30:00" } ] ``` #### 启动站点 ``` POST /sites/{name}/start ``` **参数**: - `name`: 站点名称 **响应示例**: ```json { "success": true, "message": "站点启动成功" } ``` #### 停止站点 ``` POST /sites/{name}/stop ``` **参数**: - `name`: 站点名称 **响应示例**: ```json { "success": true, "message": "站点停止成功" } ``` ### 应用更新 #### 批量上传并更新应用(推荐) ``` POST /upload-deploy Content-Type: multipart/form-data ``` **请求参数**(multipart/form-data): - `file`: 要上传的zip压缩包文件 - `deployments`: JSON字符串,包含部署配置数组 - `site_name`: 站点名称 - `app_pool_name`: 应用程序池名称 - `physical_path`: 站点物理路径 **deployments 示例**: ```json [ { "site_name": "Default Web Site", "app_pool_name": "DefaultAppPool", "physical_path": "C:\\inetpub\\wwwroot" }, { "site_name": "MyApp", "app_pool_name": "MyAppPool", "physical_path": "D:\\MyApp" } ] ``` **请求示例**(使用 curl): ```bash curl -X POST http://localhost:8080/api/upload-deploy \ -F "file=@update.zip" \ -F 'deployments=[{"site_name":"Default Web Site","app_pool_name":"DefaultAppPool","physical_path":"C:\\\\inetpub\\\\wwwroot"}]' ``` **请求示例**(使用 JavaScript): ```javascript const formData = new FormData(); formData.append('file', fileInput.files[0]); const deployments = [ { site_name: 'Default Web Site', app_pool_name: 'DefaultAppPool', physical_path: 'C:\\inetpub\\wwwroot' } ]; formData.append('deployments', JSON.stringify(deployments)); fetch('http://localhost:8080/api/upload-deploy', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => console.log(data)); ``` **响应示例**: ```json { "success": true, "message": "应用更新成功", "logs": [ "INFO 2026-01-19 10:30:00 - 开始部署到站点: Default Web Site", "INFO 2026-01-19 10:30:01 - 停止应用程序池: DefaultAppPool", "INFO 2026-01-19 10:30:02 - 创建备份: C:\\LiteOps\\Backups\\Default_Web_Site_20260119103002.zip", "INFO 2026-01-19 10:30:05 - 解压文件到目标目录: C:\\inetpub\\wwwroot", "INFO 2026-01-19 10:30:10 - 启动应用程序池: DefaultAppPool", "SUCCESS 2026-01-19 10:30:11 - 部署完成" ], "backup_path": "C:\\LiteOps\\Backups\\Default_Web_Site_20260119103002.zip" } ``` **更新流程(共6个步骤)**: 1. 停止应用程序池 2. 创建当前应用备份 3. 解压新应用到目标目录 4. 启动应用程序池 5. 清理旧备份(保留最近5个) 6. 验证应用运行状态 #### 单站点更新(已弃用) ``` POST /sites/{name}/update Content-Type: multipart/form-data ``` **参数**: - `name`: 站点名称 - `file`: 要上传的zip文件 **响应示例**: ```json { "success": true, "message": "应用更新成功", "backup_id": "backup_1234567890" } ``` ### 备份管理 #### 创建备份 ``` POST /sites/{name}/backup ``` **参数**: - `name`: 站点名称 - `description` (可选): 备份描述 **响应示例**: ```json { "success": true, "message": "备份创建成功", "backup_id": "backup_1234567890" } ``` #### 获取备份列表 ``` GET /sites/{name}/backups ``` **参数**: - `name`: 站点名称 **响应示例**: ```json [ { "id": "backup_1234567890", "site_name": "Default Web Site", "backup_path": "C:\\LiteOps\\Backups\\Default_Web_Site_20260115143000.zip", "backup_time": "2026-01-15 14:30:00", "version": "1.0.20260115143000", "size": 1024000, "description": "手动备份" } ] ``` #### 恢复备份 ``` POST /backups/{id}/restore ``` **参数**: - `id`: 备份ID **响应示例**: ```json { "success": true, "message": "备份恢复成功" } ``` #### 删除备份 ``` DELETE /backups/{id} ``` **参数**: - `id`: 备份ID **响应示例**: ```json { "success": true, "message": "备份删除成功" } ``` ### 健康检查 ``` GET /health ``` **响应示例**: ```json { "status": "ok", "timestamp": "2026-01-15T14:30:00Z", "version": "1.3.0" } ``` ## 系统管理 ### 日志查看 - 日志文件位于应用程序所在目录的`logs`子目录中 - 支持查看操作日志、应用日志、错误日志 - 日志文件自动按日期滚动 ### 文件位置 - **日志文件**: 应用目录下的 `logs` 文件夹 - **备份文件**: 应用目录下的 `BackUps` 文件夹 - **配置文件**: 应用目录下的配置文件 ### 系统托盘 - 最小化到系统托盘,释放桌面空间 - 点击托盘图标可快速显示主窗口 - 支持开机自启动配置 - 关闭时可选择是否开启自启动 ### 服务模式 - LiteOps支持作为Windows服务运行 - 安装后,可通过Windows服务管理器启动/停止服务 - 服务名称:`LiteOps Service` ## 常见问题与解决方案 ### 1. 无法访问Web界面 - 检查应用是否正在运行 - 检查端口9168是否被占用 - 尝试以管理员身份运行应用 - 检查防火墙设置 ### 2. 站点列表为空 - 检查IIS是否已安装 - 检查应用是否以管理员权限运行 - 检查WebAdministration模块是否可用 - 重启应用尝试 ### 3. 应用更新失败 - 检查压缩包格式是否正确(必须是zip格式) - 检查压缩包内容是否完整 - 检查目标站点的物理路径是否存在 - 检查应用程序池是否存在 - 查看日志了解详细错误信息 - 尝试使用"本地文件"模式避免上传权限问题 ### 4. 更新时文件被删除? - **不会**!v1.3.0 及以上版本采用智能覆盖模式 - 只会覆盖zip包中包含的文件 - 不会删除整个目录 - 其他文件保持不变 ### 5. 备份创建失败 - 检查磁盘空间是否足够 - 检查应用是否有写入权限 - 检查站点物理路径是否存在 - 检查Robocopy是否可用 ### 6. 最小化到托盘失败 - 检查是否有足够的系统权限 - 确保应用以管理员身份运行 - 重启应用尝试 ### 7. WebView2 相关问题 - 首次运行会自动检测WebView2 - 如未安装会提示下载安装 - WebView2 是 Microsoft Edge 的一部分,可从微软官网下载 - 安装后重启应用即可 ### 8. 端口被占用 - 默认端口为9168 - 可在"API调用"页面修改端口 - 选择一个未被占用的端口(1025-65535) ## 技术栈 - **前端框架**: Vue 3 + Element Plus + TypeScript - **后端框架**: Rust + Tauri 2.x - **API服务**: Actix-web (Rust) - **Windows API交互**: windows-rs (Rust库) - **文件压缩**: PowerShell Expand-Archive, zip (Rust库) - **文件复制**: Robocopy - **数据存储**: SQLite (Rust库) - **日志系统**: log4rs (Rust库) ## 开发与构建 ### 开发环境要求 - Node.js 18.x及以上 - Rust 1.70及以上 - Tauri CLI ### 构建步骤 1. 克隆代码仓库 2. 安装依赖: ```bash npm install ``` 3. 开发模式运行: ```bash npm run dev ``` 4. 构建生产版本: ```bash npm run build ``` 5. 打包安装程序: ```bash npx tauri build ``` ## 许可证 MIT License ## 联系方式 - 项目地址:[https://github.com/liteops/liteops](https://github.com/liteops/liteops) - 问题反馈:[https://github.com/liteops/liteops/issues](https://github.com/liteops/liteops/issues) - 邮箱:support@liteops.com