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

相关推荐
Joy T1 天前
【Electron架构解析】打破浏览器沙盒:从 Web 前端到桌面客户端的技术跨越
前端·架构·electron
跟着珅聪学java2 天前
electron 安装教程
javascript·arcgis·electron
Joy T2 天前
vite is not recognized :一次典型的 Electron/Vite 打包处置手册
javascript·git·electron
困死,根本不会2 天前
Electron 开发环境搭建超详细学习笔记
笔记·学习·electron
●VON2 天前
【鸿蒙PC】在 HarmonyOS 上跑 Electron?手把手教你搞定桌面欢迎页!(Mac版)
开发语言·macos·华为·electron·电脑·harmonyos
小圣贤君2 天前
从「选中一段」到「整章润色」:编辑器里的 AI 润色是怎么做出来的
人工智能·electron·编辑器·vue3·ai写作·deepseek·写小说
ZengLiangYi3 天前
PPT Timer:一个置顶于PPT全屏放映之上的LCD倒计时器
electron
一拳不是超人12 天前
Electron主窗口弹框被WebContentView遮挡?独立WebContentView弹框方案详解!
前端·javascript·electron
柯南952716 天前
Electron 无边框窗口拖拽实现
vue.js·electron