这是什么
Fast Update Server 是一个用 Go 语言写的更新服务器,主要用来给 Electron 应用分发更新。
如果你开发过 Electron 应用,可能用过 electron-updater。这个服务就是配合 electron-updater 使用的,通过 HTTP 接口提供版本检查和文件下载功能。
主要功能
多产品管理
一个服务实例可以管理多个应用的更新。每个应用可以配置不同的发布渠道(stable、beta 等)和支持的平台(Windows/macOS/Linux,x64/arm64)。
yaml
products:
- id: myapp
name: 我的应用
channels:
- stable
- beta
platforms:
- os: windows
arch: [x64]
- os: darwin
arch: [x64, arm64]
差异更新
支持 electron-builder 的 blockmap 协议。如果用户已经安装了旧版本,更新时只需要下载变化的部分,不用重新下载整个安装包。
版本管理
- 上传新版本:通过 HTTP POST 接口上传安装包
- 版本回滚:可以回滚到之前的版本
- 更新日志:可以为每个版本添加 changelog
自动清理
可以配置保留策略,自动删除旧版本文件:
yaml
retention:
enabled: true
max_versions: 10 # 每个渠道最多保留 10 个版本
max_age_days: 90 # 超过 90 天的自动删除
keep_latest: true # 始终保留最新版本
下载统计
记录每个版本、每个平台的下载次数,数据保存在本地 JSON 文件中。
安全相关
- Token 认证:上传和管理操作需要 Token
- 角色权限:支持 admin、uploader、reader 三种角色
- 请求限流:可以配置全局或按 IP 的请求频率限制
使用方法
部署服务
编译并运行:
bash
go build -o fast-update-server ./cmd/server
./fast-update-server -config config.yaml
Docker 部署:
bash
docker build -t fast-update-server .
docker run -p 8080:8080 \
-v ./releases:/app/releases \
-e UPLOAD_TOKEN=your-secret-token \
fast-update-server
客户端配置
在 package.json 中配置 electron-builder:
json
{
"build": {
"publish": {
"provider": "generic",
"url": "https://update.example.com/api/v1/myapp/download/stable"
}
}
}
或者在代码中配置:
javascript
const { autoUpdater } = require('electron-updater');
autoUpdater.setFeedURL({
provider: 'generic',
url: 'https://update.example.com/api/v1/myapp/download/stable'
});
autoUpdater.checkForUpdatesAndNotify();
发布新版本
bash
curl -X POST \
-H "Authorization: Bearer $UPLOAD_TOKEN" \
-F "file=@dist/myapp-1.0.0-win.exe" \
-F "version=1.0.0" \
-F "os=windows" \
-F "arch=x64" \
https://update.example.com/api/v1/myapp/releases/stable
版本回滚
bash
curl -X POST \
-H "Authorization: Bearer $UPLOAD_TOKEN" \
https://update.example.com/api/v1/myapp/releases/stable/0.9.0/rollback
存储结构
版本文件存储在本地目录中,结构如下:
arduino
releases/
├── myapp/
│ ├── stable/
│ │ ├── 1.0.0/
│ │ │ ├── myapp-1.0.0-win.exe
│ │ │ ├── myapp-1.0.0-win.exe.blockmap
│ │ │ └── release.json
│ │ ├── latest.json
│ │ └── changelogs/
│ │ └── 1.0.0.md
│ └── beta/
└── stats.json
适用场景
- 有 Electron 应用需要自动更新功能
- 不想依赖第三方更新服务
- 服务器资源有限,需要轻量级方案
- 需要自己控制更新分发的流程