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...

相关推荐
王家视频教程图书馆21 小时前
electron 环境搭建
前端·javascript·electron
胡斌附体2 天前
Windows 打包方式与 exe图标说明
windows·electron·exe·package·build·nsis
#做一个清醒的人3 天前
Electron 保活方案:用子进程彻底解决原生插件崩溃问题
前端·electron·node.js
野槐3 天前
Electron开发
前端·javascript·electron
#做一个清醒的人3 天前
【Electron】开发两年Electron项目评估报告
前端·electron
misty youth4 天前
pnpm build,发生了什么
前端·electron·pnpm·build
toobeloong5 天前
旧版Electron打包时让logset有效
electron·nsis
Ama_tor7 天前
将本地的 Electron 项目上传到 Gitee(码云)的 Git 操作流程
git·electron·gitee
晴天167 天前
【Electron】从零构建你的第一个桌面应用
前端·javascript·electron
C澒7 天前
PC 桌面富应用:Electron 相机画面渲染性能优化
性能优化·electron·相机·web app