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

相关推荐
爱丶不疚11 小时前
Electron net 模块你可以没用过,但不能不知道
前端·electron
瑞码空间4 天前
Web应用的多端部署之道:浏览器 · Electron · Docker
前端·docker·electron·浏览器·web
upgrador12 天前
桌面应用开发:Electron 与 NSIS 的关系、打包流程及 Windows 本地构建实战
javascript·windows·electron
盒子里的加菲猫13 天前
什么?不会C语言也可以搭建窗口级应用程序?(Electron)
c语言·开发语言·electron
薛定谔的猫-菜鸟程序员15 天前
基于 Electron 的本地短视频解析与下载工具:架构设计与工程实践
java·electron·音视频
imber16 天前
别把多平台发布当复制粘贴:一套可复用的内容工程工作流
electron
imber16 天前
Visual Muse 三平台真实发布验收
electron
前端逗比逗16 天前
Electron 全维度完整配置手册(最新稳定版,适配 Electron 25+)
前端·electron
寒水馨20 天前
Windows下载、安装electron-v43.2.0(附安装包electron-v43.2.0-win32-x64.zip)
javascript·windows·typescript·electron·跨平台·桌面应用·chromium
寒水馨20 天前
macOS下载、安装electron-v43.2.0(附安装包electron-v43.2.0-darwin-arm64.zip)
javascript·macos·electron·node.js·跨平台·桌面应用开发·开源框架