【Tauri】Tauri 2.x+Vue自动更新教程对接后端接口更新
在使用 Tauri 框架进行桌面应用开发时,密钥的生成、签名以及更新功能的配置是不可或缺的步骤。Tauri 提供了强大的更新机制,可以让开发者轻松实现自动更新功能。
本文将详细介绍如何生成密钥、配置更新功能、进行项目打包,并且确保密钥与更新功能的正确对接。
文章目录
- 生成密钥key
- 项目配置文件
- 项目打包
- 总结
生成密钥key
在 Tauri 项目中,密钥用于确保应用更新时的安全性。首先,我们需要生成两个密钥:公钥和私钥。在项目根目录下,执行以下命令:
yarn tauri signer generate -w ~/.tauri/box.key
这条命令会生成两个密钥,box.key
和 box.key.pub
。box.key
是私钥,box.key.pub
是公钥。私钥用于签名操作,而公钥用于验证签名。
项目配置文件
配置文件在项目跟目录下 srt-tarui/tauri.conf.json
打开刚生成box.key.pub
复制全部内容到 pubkey
字段。
在项目的根目录下,找到 Tauri 配置文件 tauri.conf.json
,并进行配置。在该文件中,你需要将公钥(box.key.pub
)的内容复制到 updater
配置的 pubkey
字段中。具体的配置如下:
{"updater": {"active": true,"endpoints": ["https://xxxxxx.xxxx/xxx/xxx/" //API验证信息地址], "dialog": false, // 原生更新弹窗 可以是ture 用默认的"pubkey": "YOUR_UPDATER_SIGNATURE_PUBKEY"}
}
这里对接的API格式如下
{"version": "2.0.0","notes": "更新内容","pub_date": "2025-02-21T15:07:49Z","platforms": {"darwin-x86_64": {"signature": "这里是密钥box.key的内容","url": "https://your-server.com/app_v2.0.0.app.tar.gz"},"windows-x86_64": {"signature": "这里是密钥box.key的内容","url": "https://your-server.com/app_v2.0.0.nsis.zip"},"linux-x86_64": {"signature": "这里是密钥box.key的内容","url": "https://your-server.com/app_v2.0.0.linux.tar.gz"}}
}
基于python构建的API接口完整代码如下,这里的请求方法必须是 get
。并且这里需要根据打包的结果配置 signature 密钥
和 url 下载地址
。
class VersionSerializer(CustomModelSerializer):pub_date = serializers.DateTimeField(format='%Y-%m-%dT%H:%M:%SZ') # 格式化 pub_date 为 ISO 8601 格式platforms = serializers.SerializerMethodField()class Meta:model = Versionfields = ['version', 'notes', 'pub_date', 'platforms']def get_platforms(self, obj):"""根据模型数据构造 platforms 字段"""platforms_data = {"darwin-x86_64": {"signature": "Content signature generated by Tauri key","url": "https://your-server.com/app_v2.0.0.app.tar.gz"},"windows-x86_64": {"signature": "Content signature generated by Tauri key","url": "https://your-server.com/bapp_v2.0.0_x64-setup.nsis.zip"},"linux-x86_64": {"signature": "Some signature for Linux","url": "https://your-server.com/app_v2.0.0.linux.tar.gz"}}return platforms_dataclass CheckVersionAPIView(APIView):permission_classes = [AllowAny]def get(self, request, *args, **kwargs):# 获取 Version 模型的最后一条记录try:latest_version = Version.objects.latest('id') # 按id降序获取最后一条记录except Version.DoesNotExist:return Response({"detail": "No version data found."}, status=404)# 使用序列化器将数据转换为 JSON 格式serializer = VersionSerializer(latest_version)data = serializer.data# 根据需求调整返回格式,确保返回的数据符合预期的格式formatted_response = {"version": data["version"],"notes": data["notes"],"pub_date": data["pub_date"],"platforms": data["platforms"]}return Response(formatted_response)
项目打包
配置打包的系统环境变量。新建系统变量 TAURI_PRIVATE_KEY
变量值是密钥文件 ai_tools.key
的内容。这里可能需要重启机器才能打包成功。
执行打包命令。
npm run build:prod
在打包时候会提示输入密码,这个密码就是创建密钥时候的密码。
这里如果出现下面的情况是密钥变化了环境变量不匹配必须要重启机器了。
Warn The updater secret key from `TAURI_PRIVATE_KEY` does not match the public key defined in `tauri.conf.json > tauri > updater > pubkey`. If you are not rotating keys, this means your configuration is wrong and won't be accepted at runtime.
Warn The updater secret key from `TAURI_PRIVATE_KEY` does not match the public key defined in `tauri.conf.json > tauri > updater > pubkey`. If you are not rotating keys, this means your configuration is wrong and won't be accepted at runtime.
打包成功之后会提示,这里红色的路径是安装包的位置。
配置 signature 密钥
,打开目录下的 sig
文件替换接口中的 signature
字段。
配置 url 下载地址
开启Tauri更新功能
修改 tauri.conf.json:
{"updater": {"active": true,"endpoints": ["https://api.xxx.datayang.cn/api/Config/xxx/"], //这里我对接的后端服务器,这里注意一下后端返回格式必须固定并且不做任何 限制,下面我会展示返回样式"dialog": false, // 原生更新弹窗 可以是ture 用默认的"pubkey": "YOUR_UPDATER_SIGNATURE_PUBKEY" // 通过tauri signer生成 稍后我会写怎么生成这个}
}
后端返回格式参考
{"version": "2.0.0","notes": "更新内容","pub_date": "2025-02-21T15:07:49Z","platforms": {"darwin-x86_64": {"signature": "Content signature generated by Tauri key","url": "https://your-server.com/app_v2.0.0.app.tar.gz"},"windows-x86_64": {"signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVThYTUtVS29XVU56QlJ4MEFTdzFQdEQ5aEU0MUlhRkFXVnJNZHpyK1FvPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwMzgxMzA3CWZpbGU6Ym94XzIuMC4wX3g2NC1zZXR1cC5uc2lzLnppcApNL2RTNTdTVjkrN3FsV2p2OGFBRG9kb0p5SzBMQlN5ZEtDbWgzMG1UeE1jdFJCMk1IaEQwbitYcm5XZ29TZnlzQjBPNXl5QkFZZ0puNWtTOStkNEdDZz09Cg==","url": "https://api.aitools.cn/media/box_2.0.0_x64-setup.nsis.zip"},"linux-x86_64": {"signature": "Some signature for Linux","url": "https://your-server.com/app_v2.0.0.linux.tar.gz"}}
}
配置本地签名
输入命令npm tauri signer generate -w ~/.tauri/myapp.key
yarn tauri signer generate -w ~/.tauri/box.key
在tauri.conf.json
配置文件中,productName
项(例如设为"box")对应的mapp命令应为:pm tauri signer generate -w ~/.tauri/box.key
。执行时需输入两次密码,完成后会在项目根目录生成公钥和私钥密码本,如下图所示。
把 box.key.pub 里面内容给tauri.conf.json里面配置 pubkey
如果之前项目已经配置本地签名 可以跳过以上步骤!
完成之后配置本地系统环境变量,这个必须不然程序打包后报错
变量名 TAURI_PRIVATE_KEY 变量值 之前生成的 文件 box.key里面内容粘贴
打包程序
在打包前,请先更新tauri.conf.json文件中的版本号。将"version": "2.0.0"提升一级,确保高于之前发布的网络版本。
然后执行命令:npm run tauri build
在打包前,请先更新tauri.conf.json文件中的版本号。将"version": "2.0.0"提升一级,确保高于之前发布的网络版本。
然后执行命令:npm run tauri build
请输入之前设置密码,该密码与配置密钥时使用的相同(需输入两次验证)请输入之前设置密码,该密码与配置密钥时使用的相同(需输入两次验证)。
已生成两个安装包,任选其一即可发送给后端。
需要提供的文件:box.key
和 任一安装包文件。
文件路径例如:
G:\MyGitProject\MyTools\MyToolsApp\WebDeskWeb-Tauri_vue3\src-tauri\target\release\bundle\nsis\box_2.0.0_x64-setup.nsis.zip.sig
已生成两个安装包,任选其一即可发送给后端。
总结
通过这篇文章,你已经学会了如何在 Tauri 项目中生成密钥、配置更新功能并成功打包应用程序。整个过程包括了私钥和公钥的生成、配置更新功能的 API 返回格式、Python 后端实现以及如何配置 Tauri 打包时的密钥环境变量。
通过这些步骤可以轻松实现桌面应用的自动更新功能,让应用更加高效、安全地进行版本更新。