在 Tauri 中实现自更新(Auto Update)主要依赖于官方的 updater 插件。该机制通过数字签名确保更新包的安全性,防止篡改。
以下是基于 Tauri v2(当前主流版本)的完整自更新实施步骤:
1. 安装 Updater 插件
首先,你需要将 updater 插件添加到你的 Tauri 项目中。在项目根目录运行:
bash
# 如果使用 pnpm
pnpm tauri add updater
# 如果使用 npm
npm run tauri add updater
# 如果使用 yarn
yarn tauri add updater
2. 生成签名密钥
Tauri 强制要求对更新包进行签名。你需要生成一对密钥(公钥和私钥):
- 私钥:用于在构建时签名更新包(必须严格保密,不能上传到代码仓库)。
- 公钥:嵌入到应用程序中,用于验证下载的安装包签名。
运行以下命令生成密钥(会将密钥保存在 ~/.tauri/ 目录下):
bash
pnpm tauri signer generate -w ~/.tauri/key.key
# 或者指定密码保护私钥
pnpm tauri signer generate -w ~/.tauri/key.key --password
执行后,请记下生成的 公钥 (Public Key) 字符串。
3. 配置 tauri.conf.json
打开 src-tauri/tauri.conf.json,在 plugins 或根配置中添加 updater 配置项(Tauri v2 结构可能略有不同,通常在 plugins.updater 下):
json
{
"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 响应,告诉客户端是否有新版本。标准格式如下:
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:
typescript
import { checkUpdate, installUpdate } from '@tauri-apps/plugin-updater';
async function updateApp() {
const update = await checkUpdate();
if (update?.available) {
console.log(`发现新版本: ${update.version}`);
// 可以在此显示自定义UI
try {
await installUpdate();
// 安装完成后通常需要重启应用
// import { relaunch } from '@tauri-apps/plugin-process';
// await relaunch();
} catch (e) {
console.error('更新失败', e);
}
} else {
console.log('已是最新版本');
}
}
6. 构建并签名发布
在构建应用时,必须提供私钥以便对安装包进行签名。可以通过环境变量设置:
Linux/macOS:
bash
export TAURI_PRIVATE_KEY=$(cat ~/.tauri/key.key)
# 如果设置了密码
export TAURI_KEY_PASSWORD="your_password"
pnpm tauri build
Windows (PowerShell):
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 更新描述文件部署到你的服务器上。
常见方案推荐
对于个人开发者或小团队,维护一个完整的更新服务器比较麻烦,推荐以下两种简便方案:
- GitHub Releases + 第三方服务 :将安装包上传到 GitHub Releases,使用如 UpgradeLink 或 Tauri Updates 等托管服务来生成符合格式的 JSON 和签名管理。
- 对象存储 (OSS/S3):将安装包上传到阿里云 OSS 或 AWS S3,自己编写一个简单的云函数或静态 JSON 文件来返回更新信息(需注意签名值的获取,通常需要在 CI/CD 流程中提取构建后的签名值并更新到 JSON 文件中)。
安全提示 :切勿将 key.key (私钥) 提交到 Git 仓库!建议在 CI/CD 流程中通过 Secrets 注入。