UpdateEC - EasyClick 项目热更新系统(Rust构建)

UpdateEC - EasyClick 项目热更新系统(Rust构建)

基于 Rust 重构的高性能项目热更新系统(开源),支持 Android 和 iOS 平台

✨ 特性

核心功能

  • 🚀 高性能:基于 Rust 和 Actix-web 构建,提供卓越的性能
  • 📱 多平台支持:支持 Android 和 iOS 项目管理
  • 🔄 热更新:支持项目版本热更新和回滚
  • 🔒 安全可靠:MD5 文件校验,确保文件完整性
  • 📊 版本管理:完整的版本上传、删除、切换功能
  • 📝 日志记录:详细的操作日志和系统监控
  • 🎨 现代化界面:响应式 Web 界面,支持暗色主题

项目类型支持

  • Android 项目 :返回 timeout 字段
  • iOS 项目 :返回 download_timeout 字段
  • 类型隔离:Android 和 iOS 项目不能使用相同名称
  • 类型锁定:项目类型仅在上传时设置,不可修改

技术特性

  • 异步 I/O 处理(Tokio)
  • 并发下载控制
  • 自动日志轮转
  • 系统资源监控
  • RESTful API 设计
  • 静态文件服务

📦 安装

系统要求

Windows
  • Windows 10 或更高版本
  • x86_64 架构
Linux
  • Ubuntu 18.04+ / CentOS 7+ / Debian 9+
  • x86_64 架构

快速开始

Windows
  1. 下载预编译版本

    bash 复制代码
    # 解压 updateEC-win64-2.0.0.zip
    # 进入目录
    cd updateEC-win64-2.0.0
  2. 启动服务

    batch 复制代码
    # 使用批处理脚本
    updateEC-service.bat start
    
    # 或直接运行
    updateEC.exe
  3. 访问 Web 界面

    复制代码
    http://localhost:3008
Linux
  1. 编译项目

    bash 复制代码
    # 克隆项目
    https://gitee.com/Mr_laogui/EasyClickupdateIecRust.git
    cd EasyClickupdateIecRust
    
    # 编译
    chmod +x build.sh
    ./build.sh
  2. 启动服务

    bash 复制代码
    # 使用服务脚本
    chmod +x updateEC-service.sh
    ./updateEC-service.sh start
    
    # 或直接运行
    ./target/release/updateEC
  3. 访问 Web 界面

    复制代码
    http://localhost:3008

⚙️ 配置

配置文件

系统支持两种配置文件格式:

config.json
json 复制代码
{
  "server": {
    "port": 3008,
    "workers": 8,
    "upload_timeout_ms": 300000,
    "maxFileSize": 52428800
  },
  "paths": {
    "log_file": "api/logs/server.log",
    "base_dir": "api",
    "projects_dir": "projects",
    "logs_dir": "logs"
  },
  "logging": {
    "max_files": 3,
    "max_size": 1048576
  }
}
config.toml
toml 复制代码
[server]
port = 3008
workers = 8
upload_timeout_ms = 300000
max_file_size = 52428800

[paths]
base_dir = "api"
projects_dir = "projects"
log_file = "server.log"
logs_dir = "logs"

[logging]
max_files = 3
max_size = 1048576

配置说明

配置项 说明 默认值
server.port 服务监听端口 3008
server.workers 工作线程数 8
server.upload_timeout_ms 上传超时时间(毫秒) 300000
server.maxFileSize 最大文件大小(字节) 52428800 (50MB)
paths.base_dir 基础目录 api
paths.projects_dir 项目目录 projects
paths.logs_dir 日志目录 logs
logging.max_files 最大日志文件数 3
logging.max_size 单个日志文件最大大小(字节) 1048576 (1MB)

🚀 部署

使用 Nginx 反向代理

Nginx 配置示例
nginx 复制代码
server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:3008;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # 超时设置
        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
        proxy_read_timeout 300s;
    }
}

使用 Systemd 服务(Linux)

创建服务文件 /etc/systemd/system/updateEC.service

ini 复制代码
[Unit]
Description=UpdateEC Service
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/path/to/updateEC
ExecStart=/path/to/updateEC/updateEC
Restart=always
RestartSec=10
StandardOutput=append:/path/to/updateEC/updateEC.log
StandardError=append:/path/to/updateEC/updateEC.log

[Install]
WantedBy=multi-user.target

启用并启动服务:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl enable updateEC
sudo systemctl start updateEC
sudo systemctl status updateEC

📚 文档

快速开始

迁移指南

其他文档

🔧 服务管理

Windows 服务脚本

batch 复制代码
updateEC-service.bat start    # 启动服务
updateEC-service.bat stop     # 停止服务
updateEC-service.bat restart  # 重启服务
updateEC-service.bat status   # 查看状态
updateEC-service.bat help     # 显示帮助

Linux 服务脚本

bash 复制代码
./updateEC-service.sh start    # 启动服务
./updateEC-service.sh stop     # 停止服务
./updateEC-service.sh restart  # 重启服务
./updateEC-service.sh status   # 查看状态
./updateEC-service.sh logs     # 查看日志
./updateEC-service.sh help     # 显示帮助

🌐 API 接口

检查更新

http 复制代码
GET /api/check/update?project={project_name}&version={current_version}

响应示例

json 复制代码
{
  "needUpdate": true,
  "version": "1.0.1",
  "download_url": "http://example.com/api/download/project/1.0.1.iec",
  "md5": "abc123...",
  "force": false,
  "msg": "更新说明",
  "dialog": true,
  "timeout": 300,
  "download_timeout": 600
}

文件上传

http 复制代码
POST /api/upload/file
Content-Type: multipart/form-data

参数:
- projectName: 项目名称
- version: 版本号
- iecFile: IEC 文件
- msg: 更新说明(可选)
- force: 是否强制更新(可选)
- dialog: 是否显示对话框(可选)
- projectType: 项目类型(android/ios,必需)

获取项目列表

http 复制代码
GET /api/get/projects

获取版本列表

http 复制代码
GET /api/versions?project={project_name}

删除项目

http 复制代码
DELETE /api/project?project={project_name}

切换版本

http 复制代码
POST /api/version/switch?project={project_name}&version={version}

删除版本

http 复制代码
DELETE /api/version?project={project_name}&version={version}

下载文件

http 复制代码
GET /api/download/{project_name}/{version}.iec

获取系统状态

http 复制代码
GET /api/get/system-stats

获取日志

http 复制代码
GET /api/get/log

🧪 测试

测试 Android 项目更新检查

bash 复制代码
curl "http://localhost:3008/api/check/update?project=android-project&version=1.0.0"

测试 iOS 项目更新检查

bash 复制代码
curl "http://localhost:3008/api/check/update?project=ios-project&version=1.0.0"

获取项目列表

bash 复制代码
curl "http://localhost:3008/api/get/projects"

获取版本列表

bash 复制代码
curl "http://localhost:3008/api/versions?project=android-project"

🐛 故障排查

服务无法启动

问题:服务启动失败

解决方案

  1. 检查端口是否被占用

    bash 复制代码
    # Linux
    netstat -tulpn | grep 3008
    
    # Windows
    netstat -ano | findstr :3008
  2. 检查配置文件格式

    bash 复制代码
    # 验证 JSON 格式
    jq empty config.json
    
    # 验证 TOML 格式
    cat config.toml
  3. 查看日志文件

    bash 复制代码
    tail -f api/logs/server.log

502 Bad Gateway

问题:Nginx 无法连接到后端服务

解决方案

  1. 检查服务是否运行

    bash 复制代码
    ./updateEC-service.sh status
  2. 检查端口监听

    bash 复制代码
    netstat -tulpn | grep 3008
  3. 检查 Nginx 配置

    bash 复制代码
    sudo nginx -t
  4. 重启 Nginx

    bash 复制代码
    sudo systemctl restart nginx

文件权限错误(Linux)

问题:无法读写文件

解决方案

bash 复制代码
# 修改目录权限
chmod -R 755 api/
chmod -R 644 api/projects/*.json
chmod -R 644 api/logs/*.log

# 修改所有者
chown -R www-data:www-data api/

🔄 迁移旧项目

如果您有旧版本的项目需要迁移到新版本,请参考:

快速迁移

bash 复制代码
# 使用自动化脚本迁移
chmod +x migrate_project_type.sh

# 迁移为 Android 项目
./migrate_project_type.sh android

# 迁移为 iOS 项目
./migrate_project_type.sh ios

🛠️ 开发

环境要求

  • Rust 1.70 或更高版本
  • Cargo(Rust 包管理器)

构建项目

v1.0版本地址https://gitcode.com/qq_21460781/ecupdateiec.git

v2.0版本

bash 复制代码
# 克隆项目
git clone https://github.com/your-repo/updateEC.git
cd updateEC

# 开发模式构建
cargo build

# 生产模式构建
cargo build --release

运行测试

bash 复制代码
# 运行所有测试
cargo test

# 运行特定测试
cargo test test_name

📊 项目结构

复制代码
updateEC/
├── api/                    # API 数据目录
│   ├── logs/              # 日志文件
│   └── projects/           # 项目配置和文件
├── static/                 # 静态文件(Web 界面)
│   ├── css/
│   ├── js/
│   └── image/
├── src/                    # 源代码
│   ├── config/
│   ├── storage/
│   ├── utils/
│   ├── main.rs
│   └── server.rs
├── doc/                    # 文档
├── config.json             # 配置文件(JSON)
├── config.toml            # 配置文件(TOML)
├── updateEC-service.sh     # Linux 服务脚本
├── updateEC-service.bat    # Windows 服务脚本
└── Cargo.toml             # Rust 项目配置

🤝 贡献

欢迎贡献代码、报告问题或提出新功能建议!

  1. Fork 本项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

📄 许可证

本项目采用 MIT 许可证 - 详见 <LICENSE> 文件

👨‍💻 作者

Mr_老鬼 - 1156346325@qq.com

🙏 致谢

感谢所有为本项目做出贡献的开发者!

📮 联系方式


注意:本项目遵循 MIT 开源协议,您可以自由使用、修改和分发本代码,但请保留版权信息。

相关推荐
码农幻想梦2 小时前
KY221 打印日期
开发语言·模拟
爱上妖精的尾巴2 小时前
7-13 WPS JS宏 this 用构造函数自定义类-2,调用内部对象必须用this
开发语言·javascript·wps·jsa
wm10432 小时前
代码随想录第十天 栈和队列
开发语言·python
Java后端的Ai之路2 小时前
【Java教程】- 并发编程核心知识解读
java·开发语言·并发编程
一 乐2 小时前
学生宿舍管理|基于springboot + vue学生宿舍管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·助农电商系统
Sheep Shaun2 小时前
C++11核心特性详解:从右值引用到现代C++编程
开发语言·数据结构·c++·算法
Dontla2 小时前
Mybatis Introduction (Java ORM Framework)
java·开发语言·mybatis
信码由缰2 小时前
JExten:基于Java模块系统(JPMS)构建健壮的插件架构
java·开发语言·架构
Dxy12393102162 小时前
Python使用Playwright入门教程:从环境搭建到实战应用
开发语言·python·playwright