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
-
下载预编译版本
bash# 解压 updateEC-win64-2.0.0.zip # 进入目录 cd updateEC-win64-2.0.0 -
启动服务
batch# 使用批处理脚本 updateEC-service.bat start # 或直接运行 updateEC.exe -
访问 Web 界面
http://localhost:3008
Linux
-
编译项目
bash# 克隆项目 https://gitee.com/Mr_laogui/EasyClickupdateIecRust.git cd EasyClickupdateIecRust # 编译 chmod +x build.sh ./build.sh -
启动服务
bash# 使用服务脚本 chmod +x updateEC-service.sh ./updateEC-service.sh start # 或直接运行 ./target/release/updateEC -
访问 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"
🐛 故障排查
服务无法启动
问题:服务启动失败
解决方案:
-
检查端口是否被占用
bash# Linux netstat -tulpn | grep 3008 # Windows netstat -ano | findstr :3008 -
检查配置文件格式
bash# 验证 JSON 格式 jq empty config.json # 验证 TOML 格式 cat config.toml -
查看日志文件
bashtail -f api/logs/server.log
502 Bad Gateway
问题:Nginx 无法连接到后端服务
解决方案:
-
检查服务是否运行
bash./updateEC-service.sh status -
检查端口监听
bashnetstat -tulpn | grep 3008 -
检查 Nginx 配置
bashsudo nginx -t -
重启 Nginx
bashsudo 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 项目配置
🤝 贡献
欢迎贡献代码、报告问题或提出新功能建议!
- Fork 本项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
📄 许可证
本项目采用 MIT 许可证 - 详见 <LICENSE> 文件
👨💻 作者
Mr_老鬼 - 1156346325@qq.com
🙏 致谢
感谢所有为本项目做出贡献的开发者!
📮 联系方式
- 邮箱:1156346325@qq.com
- 问题反馈:Gitee Issues
注意:本项目遵循 MIT 开源协议,您可以自由使用、修改和分发本代码,但请保留版权信息。