当前位置: 首页 > news >正文

Tauri 中实现自更新(Auto Update)

在 Tauri 中实现自更新(Auto Update)主要依赖于官方的updater插件。该机制通过数字签名确保更新包的安全性,防止篡改。

以下是基于Tauri v2(当前主流版本)的完整自更新实施步骤:

1. 安装 Updater 插件

首先,你需要将 updater 插件添加到你的 Tauri 项目中。在项目根目录运行:

# 如果使用 pnpmpnpmtauriaddupdater# 如果使用 npmnpmrun tauriaddupdater# 如果使用 yarnyarntauriaddupdater

2. 生成签名密钥

Tauri 强制要求对更新包进行签名。你需要生成一对密钥(公钥和私钥):

  • 私钥:用于在构建时签名更新包(必须严格保密,不能上传到代码仓库)。
  • 公钥:嵌入到应用程序中,用于验证下载的安装包签名。

运行以下命令生成密钥(会将密钥保存在~/.tauri/目录下):

pnpmtauri signer generate -w ~/.tauri/key.key# 或者指定密码保护私钥pnpmtauri signer generate -w ~/.tauri/key.key --password

执行后,请记下生成的公钥 (Public Key)字符串。

3. 配置tauri.conf.json

打开src-tauri/tauri.conf.json,在plugins或根配置中添加updater配置项(Tauri v2 结构可能略有不同,通常在plugins.updater下):

{"plugins":{"updater":{"active":true,"endpoints":["https://your-server.com/update/{{target}}/{{arch}}/{{current_version}}"],"dialog":true,"pubkey":"YOUR_GENERATED_PUBLIC_KEY_HERE"}},"bundle":{"windows":{"certificateThumbprint":null,"digestAlgorithm":"sha256","timestampUrl":""}}}
  • endpoints: 你的更新服务器地址。Tauri 会自动替换{{target}}(如windows-x86_64),{{arch}},{{current_version}}等变量。
  • dialog: 设置为true会使用系统原生弹窗提示用户更新;设置为false则需在前端自行编写 UI 逻辑。
  • pubkey: 填入第2步生成的公钥。

4. 后端服务器返回格式

你的更新服务器需要返回一个 JSON 响应,告诉客户端是否有新版本。标准格式如下:

{"version":"1.0.1","notes":"修复了若干Bug,提升了性能","pub_date":"2026-02-24T10:00:00Z","platforms":{"windows-x86_64":{"signature":"SIGNATURE_GENERATED_DURING_BUILD","url":"https://your-server.com/downloads/app-v1.0.1.msi"},"darwin-aarch64":{"signature":"...","url":"..."}}}

注意:signature字段通常需要在构建后获取,或者由构建脚本自动上传到服务器。如果是简单的静态托管,可以使用 GitHub Releases 配合第三方服务(如 UpgradeLink)或直接编写脚本生成此 JSON。

5. 前端调用更新逻辑

如果配置了"dialog": true,Tauri 会在检测到更新时自动弹窗。如果需要自定义 UI,可以在前端(React/Vue/Svelte等)调用 API:

import{checkUpdate,installUpdate}from'@tauri-apps/plugin-updater';asyncfunctionupdateApp(){constupdate=awaitcheckUpdate();if(update?.available){console.log(`发现新版本:${update.version}`);// 可以在此显示自定义UItry{awaitinstallUpdate();// 安装完成后通常需要重启应用// import { relaunch } from '@tauri-apps/plugin-process';// await relaunch();}catch(e){console.error('更新失败',e);}}else{console.log('已是最新版本');}}

6. 构建并签名发布

在构建应用时,必须提供私钥以便对安装包进行签名。可以通过环境变量设置:

Linux/macOS:

exportTAURI_PRIVATE_KEY=$(cat~/.tauri/key.key)# 如果设置了密码exportTAURI_KEY_PASSWORD="your_password"pnpmtauri build

Windows (PowerShell):

$env:TAURI_PRIVATE_KEY =Get-Content~/.tauri/key.key-Raw# 如果设置了密码$env:TAURI_KEY_PASSWORD ="your_password"pnpm tauri build

构建完成后,src-tauri/target/release/bundle目录下会生成已签名的安装包(.msi,.app.tar.gz等)以及对应的.sig签名文件。你需要将这些文件和第4步提到的 JSON 更新描述文件部署到你的服务器上。

常见方案推荐

对于个人开发者或小团队,维护一个完整的更新服务器比较麻烦,推荐以下两种简便方案:

  1. GitHub Releases + 第三方服务:将安装包上传到 GitHub Releases,使用如UpgradeLinkTauri Updates等托管服务来生成符合格式的 JSON 和签名管理。
  2. 对象存储 (OSS/S3):将安装包上传到阿里云 OSS 或 AWS S3,自己编写一个简单的云函数或静态 JSON 文件来返回更新信息(需注意签名值的获取,通常需要在 CI/CD 流程中提取构建后的签名值并更新到 JSON 文件中)。

安全提示:切勿将key.key(私钥) 提交到 Git 仓库!建议在 CI/CD 流程中通过 Secrets 注入。

http://www.jsqmd.com/news/409327/

相关文章:

  • 【DREAMVFIA开源】量子云平台构建:服务化量子计算资源管理
  • MCP Apps深度解读教程(非常详细),重构Web应用从入门到精通,收藏这一篇就够了!
  • 题解:AcWing 889 满足条件的01序列
  • .NET 11 预览版1:CoreCLR 在 WebAssembly 上的全面集成与性能突破
  • 题解:AcWing 888 求组合数 IV
  • 题解:AcWing 887 求组合数 III
  • Java 方法引用
  • Java基础(下)之Stream
  • Java基础(下)之方法引用
  • 题解:AcWing 886 求组合数 II
  • 题解:AcWing 885 求组合数 I
  • 功能炸裂!推荐一款低代码数据大屏可视化系统,内置丰富模版,支持拖拽构建炫酷大屏
  • 视频孪生终结者:镜像视界空间神经系统与空间控制权重构——融合统一空间坐标反演体系 × 三维实时定位引擎 × 多路径概率展开模型 × 前向围堵优化算法的跨行业空间压制与主动调度控制平台
  • 大数据领域数据产品的搜索功能优化
  • AI原生应用开发:如何利用Copilot实现代码质量与效率双提升
  • HNOI 2026 退役记
  • 从零开始:使用 Claude Code 打造字母消除游戏
  • 价值投资中的AI智能体可持续发展能力分析系统
  • AI模型部署自动化的核心:镜像+编排+监控的三位一体设计
  • 微信小程序 uniapp+vue老年人心血管健康
  • 基于径向基神经网络(RBF)预制构件需求量预测GUI软件
  • Sass/SCSS函数深度解析
  • 1亿条URL去重,怎么搞才不崩?生产级方案全解析(从入门到大厂实战)
  • 强化学习·价值学习-MC,TD和Q-learning算法
  • day95(2.24)——leetcode面试经典150
  • 强化学习·导论
  • 一些喜欢的 ACG 曲
  • 灰色关联度模型正负性问题的研究及其改进附Matlab代码
  • 小程序商城开发怎么选?5 家优质平台实测推荐,避开低价陷阱不踩雷 - 企业数字化改造和转型
  • 基于动态神经网络NARX/GRNN/BP/RBF的IBM收盘价预测-时间序列预测附Matlab代码