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

相关推荐
小雨下雨的雨12 小时前
数独算法与求解器鸿蒙PC Electron框架完成深度解析
javascript·人工智能·算法·游戏·华为·electron·鸿蒙系统
薛定谔的猫-菜鸟程序员13 小时前
从Electron到Tauri,Rust+Vue(Tauri) 实现超高性能桌面日志应用开发,以及开发避坑指南
vue.js·rust·electron
小雨下雨的雨18 小时前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
TrisighT1 天前
Electron 窗口切后台,我的轮询怎么停了?排查一下午才发现是浏览器搞的鬼
electron·harmonyos
怕浪猫1 天前
Electron 开发实战(十二):安全性最佳实践|彻底杜绝漏洞、代码执行与数据泄露
前端·javascript·electron
AI_零食2 天前
鸿蒙PC Electron跨平台应用开发:24时区时间表应用详解
前端·华为·electron·开源·harmonyos·鸿蒙
提子拌饭1332 天前
爆发效果技术——基于鸿蒙PC Electron框架实现
华为·架构·electron·开源·harmonyos·鸿蒙·鸿蒙系统
TrisighT2 天前
Electron 的 printToPDF 在鸿蒙 PC 上翻车了,我换了个纯前端方案绕过去
electron·harmonyos
怕浪猫2 天前
Electron 开发实战(十一):自动更新机制|服务架构、公私网更新、版本回滚全解
前端·javascript·electron
web打印社区3 天前
前端html转换pdf并静默打印pdf最佳实现路径
前端·javascript·vue.js·electron·html