Fast Update Server:一个 Electron 应用的更新分发服务

这是什么

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 应用需要自动更新功能
  • 不想依赖第三方更新服务
  • 服务器资源有限,需要轻量级方案
  • 需要自己控制更新分发的流程

仓库地址

github.com/FxRayHughes...

相关推荐
森叶2 小时前
Electron 实战:用 utilityProcess 开子进程,去端口化承载协议处理,并由主进程拦截渲染请求后统一中转
前端·javascript·electron
茅盾体6 小时前
Electron图标相关
java·前端·electron
ejinxian19 小时前
Rust GUI框架Azul与Electron、WebView2
前端·javascript·electron
孙凯亮2 天前
Electron 项目终极实战总结:从黑屏踩坑到自动更新全流程
前端·electron
Python私教3 天前
FuturesDesk:配置驱动 UI 的 Electron 金融桌面应用模板
ui·金融·electron
孙凯亮3 天前
Electron 接口请求全解析:从疑问到落地(真实开发对话整理)
前端·electron
闲坐含香咀翠3 天前
Electron 桌面端多语言优化实战:从静态全量加载到懒加载与用户自定义
前端·electron·客户端
SailingCoder4 天前
Electron 安全IPC核心:contextBridge 安全机制
javascript·安全·electron
Cdlblbq4 天前
搜索会员中心 创作中心Vue2项目一键打包成桌面应用
前端·javascript·vue.js·electron
午安~婉4 天前
Electron(续4)利用AI辅助完成配置功能
前端·javascript·electron·应用打包与发布