|
|
3 weeks ago | |
|---|---|---|
| broadcast-client | 1 month ago | |
| call-client | 3 weeks ago | |
| docs | 3 weeks ago | |
| scripts | 1 month ago | |
| .dockerignore | 2 months ago | |
| README.md | 1 month ago | |
| 切换框架.md | 2 months ago | |
| 需求修改记录.md | 3 weeks ago | |
README.md
TauriClient 打包与目录说明
1. 打包命令流程
推荐使用双容器模式(默认)同时产出 amd64 和 arm64:
cd /path/to/TauriClient
chmod +x ./scripts/docker/run-build.sh
./scripts/docker/run-build.sh
默认会在打包结束后自动执行:
scripts/inject-deb-bootstrap.sh(向 deb 注入postinst,安装时自动写源与公钥)scripts/build-apt-repo.sh(生成可直接部署的dist/repo/)scripts/verify-apt-repo.sh(发布前完整性自检)
只打指定项目:
./scripts/docker/run-build.sh call-client
./scripts/docker/run-build.sh broadcast-client
可选模式:
- 默认(双容器):
./scripts/docker/run-build.sh - 混合模式:
./scripts/docker/run-build.sh --hybrid- 宿主机构建
amd64 - 容器构建
arm64
- 宿主机构建
- 若仅需
.deb不生成仓库目录:GENERATE_APT_REPO=0 ./scripts/docker/run-build.sh - 默认使用签名 Key:
com.jgzy.product(密钥缺失时会自动创建) - 如需禁用自动创建密钥:
APT_GPG_AUTO_CREATE=0 ./scripts/docker/run-build.sh - 如需跳过 deb 自动初始化注入:
INJECT_DEB_BOOTSTRAP=0 ./scripts/docker/run-build.sh - 默认会在生成仓库后自动自检(
verify-apt-repo.sh);如需跳过:VERIFY_APT_REPO=0 ./scripts/docker/run-build.sh
2. 打包产物位置
统一产物目录:
dist/linux-deb/call-client/amd64/*.debdist/linux-deb/call-client/arm64/*.debdist/linux-deb/broadcast-client/amd64/*.debdist/linux-deb/broadcast-client/arm64/*.deb
自动生成的 APT 仓库目录(可直接打包上传仓库机):
dist/repo/dists/v10/...dist/repo/pool/main/...
Tauri 原始输出目录:
call-client/src-tauri/target/x86_64-unknown-linux-gnu/release/bundle/deb/call-client/src-tauri/target/aarch64-unknown-linux-gnu/release/bundle/deb/broadcast-client/src-tauri/target/x86_64-unknown-linux-gnu/release/bundle/deb/broadcast-client/src-tauri/target/aarch64-unknown-linux-gnu/release/bundle/deb/
3. 配置文件目录与日志目录
以下与各自 src-tauri/tauri.conf.json 里的 bundle.identifier 一致(当前为 com.ziyun.callclient、com.ziyun.broadcastclient)。若改过 identifier,中间目录名会随之变化。
路径中的用户名:下文以 Linux 用户 alice、Windows 用户 Alice 为例;请把 alice / Alice 换成本机实际登录名(Linux 一般为 /home/<登录名> 中的 <登录名>;Windows 一般为 C:\Users\<登录名> 中的 <登录名>)。
3.1 call-client
Bundle ID:com.ziyun.callclient。
默认环境(未设置 XDG_CONFIG_HOME、XDG_DATA_HOME)
| 用途 | Linux 完整路径示例 | Windows 完整路径示例 |
|---|---|---|
| 应用配置 | /home/alice/.config/com.ziyun.callclient/config.json |
C:\Users\Alice\AppData\Roaming\com.ziyun.callclient\config.json |
| 主程序日志 | /home/alice/.config/com.ziyun.callclient/app.log(轮转文件形如 /home/alice/.config/com.ziyun.callclient/app-20260513120000.log) |
C:\Users\Alice\AppData\Roaming\com.ziyun.callclient\app.log(同级目录下 app-*.log) |
| 运行时会话(多窗口共享) | /home/alice/.local/share/com.ziyun.callclient/runtime_session.json |
C:\Users\Alice\AppData\Local\com.ziyun.callclient\runtime_session.json |
| 单实例锁 | /home/alice/.local/share/com.ziyun.callclient/single-instance.lock |
C:\Users\Alice\AppData\Local\com.ziyun.callclient\single-instance.lock |
若设置了 XDG 环境变量(Linux)
- 当
XDG_CONFIG_HOME为/data/my-config时,配置文件与app.log在:
/data/my-config/com.ziyun.callclient/config.json
/data/my-config/com.ziyun.callclient/app.log - 当
XDG_DATA_HOME为/data/my-data时,runtime_session.json与single-instance.lock在:
/data/my-data/com.ziyun.callclient/runtime_session.json
/data/my-data/com.ziyun.callclient/single-instance.lock
实现依据:call-client/src-tauri/src/commands/config.rs、logger.rs、session.rs。
旧版本若使用独立目录名
call-client或日志放在local/state等路径,已废弃;当前统一为上述com.ziyun.callclient目录。
3.2 broadcast-client
Bundle ID:com.ziyun.broadcastclient。
默认环境(未设置 XDG_CONFIG_HOME)
| 用途 | Linux 完整路径示例 | Windows 完整路径示例 |
|---|---|---|
| 持久化配置 | /home/alice/.config/com.ziyun.broadcastclient/broadcast-config.json |
C:\Users\Alice\AppData\Roaming\com.ziyun.broadcastclient\broadcast-config.json |
| Socket 服务日志(文件名含时间戳) | /home/alice/.config/com.ziyun.broadcastclient/socket-service-20260513-120000-000.log |
C:\Users\Alice\AppData\Roaming\com.ziyun.broadcastclient\socket-service-20260513-120000-000.log |
若 XDG_CONFIG_HOME 为 /data/my-config(Linux)
/data/my-config/com.ziyun.broadcastclient/broadcast-config.json/data/my-config/com.ziyun.broadcastclient/socket-service-<时间戳>.log
浏览器侧回退(localStorage 键名,非磁盘路径):runtime_broadcast_config、broadcast_config_local_fallback。
实现依据:broadcast-client/src/services/configStore.ts、broadcast-client/src-tauri/src/lib.rs。
旧版本若使用
broadcast-client作为配置目录名,已废弃;当前为com.ziyun.broadcastclient。
3.3 两个项目仓库内 Tauri 打包配置(源码路径)
call-client/src-tauri/tauri.conf.jsonbroadcast-client/src-tauri/tauri.conf.json
4. 应用图标(bundle)
推荐:tauri icon(@tauri-apps/cli 内置,社区常用)
Tauri 官方 CLI 提供 tauri icon:用一张高质量源图生成各平台所需尺寸(32x32.png、128x128.png、icon.ico 等)。部分环境下 tauri.conf.json 的 bundle.icon 不会自动改写,若发现未更新,请确认其中包含上述生成文件(本仓库已按生成结果维护默认列表)。
源图要求: 正方形 PNG,建议 1024×1024,RGBA(带透明)。可先用 Photoshop / Figma 导出一张再执行下面命令。
在各子项目根目录执行:
# call-client(默认源图:src-tauri/icons/call_icon.png)
cd call-client
npm run icons:generate
# broadcast-client(默认源图:src-tauri/icons/bc_icon.png)
cd broadcast-client
npm run icons:generate
等价命令:
npm run tauri -- icon ./src-tauri/icons/call_icon.png
# 或 broadcast-client 下对 bc_icon.png
生成结果会写入各项目 src-tauri/icons/。若 bundle.icon 未自动更新,请对照目录里新生成的 32x32.png、128x128.png、128x128@2x.png、icon.icns、icon.ico、icon.png 检查配置。换源图路径可改对应 package.json 里的 icons:generate 脚本。
说明
- 这里使用的是
@tauri-apps/cli自带的icon子命令,无需再装名为tauri-icon的独立包;若文档里写作「tauri-icon 工具」,一般即指该命令。 - 源图若不是 RGBA,构建阶段仍可能报
icon ... is not RGBA,请在上游导出时勾选透明度。
5. Windows Nginx + 内网 APT 仓库(麒麟 V10)模板
以下模板用于“客户端检查更新 + 引导 apt 升级”,适用于 call-client 与 broadcast-client。
5.1 仓库目录模板
repo/
├─ dists/
│ └─ v10/
│ ├─ InRelease
│ ├─ Release
│ ├─ Release.gpg
│ └─ main/
│ ├─ binary-amd64/
│ │ ├─ Packages
│ │ └─ Packages.gz
│ └─ binary-arm64/
│ ├─ Packages
│ └─ Packages.gz
└─ pool/
└─ main/
├─ c/call-client/call-client_<version>_amd64.deb
├─ c/call-client/call-client_<version>_arm64.deb
├─ b/broadcast-client/broadcast-client_<version>_amd64.deb
└─ b/broadcast-client/broadcast-client_<version>_arm64.deb
5.2 发布步骤(每次发版)
由于仓库机是内网且不安装构建环境,统一在发布机器执行:
cd /path/to/TauriClient
chmod +x ./scripts/docker/run-build.sh ./scripts/build-apt-repo.sh ./scripts/inject-deb-bootstrap.sh ./scripts/verify-apt-repo.sh
./scripts/docker/run-build.sh
执行完成后会得到:
dist/linux-deb/...:原始构建产物.debdist/repo/...:可直接部署到仓库机的 APT 仓库目录(含索引与签名)dist/repo/zyyun-archive-keyring.asc:客户端导入用 ASCII 公钥dist/repo/zyyun-archive-keyring.gpg:客户端可直接使用的 keyring 二进制公钥
最后只需把 dist/repo 整体打包上传到仓库机并对外提供 http://80.12.140.29:80/apt。
脚本内置的签名密钥生成命令如下(密钥不存在且
APT_GPG_AUTO_CREATE=1时自动执行):
gpg --batch --pinentry-mode loopback --passphrase "" --quick-gen-key "com.jgzy.product" rsa4096 sign 5y
手工初始化(仅在未使用 deb 自动初始化时作为兜底):
curl -fsSL http://80.12.140.29:80/apt/zyyun-archive-keyring.asc | sudo gpg --dearmor -o /usr/share/keyrings/zyyun-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/zyyun-archive-keyring.gpg] http://80.12.140.29:80/apt v10 main" | sudo tee /etc/apt/sources.list.d/zyyun.list
sudo apt update
发布后可手工复核(脚本已在 run-build.sh 里自动执行一次):
bash ./scripts/verify-apt-repo.sh
该脚本会校验以下关键项:
InRelease、Release、Release.gpg- 公钥文件
zyyun-archive-keyring.asc、zyyun-archive-keyring.gpg - 各架构
Packages.gz是否存在且可正常解压 pool/main下是否存在.deb包
5.2.1 deb 自动初始化(已默认启用)
run-build.sh 默认会调用 scripts/inject-deb-bootstrap.sh,对构建出的 deb 注入 postinst 与内置公钥。
用户只需执行 deb 安装(图形安装器或 dpkg -i),安装阶段会自动:
- 安装公钥到
/usr/share/keyrings/zyyun-archive-keyring.gpg - 写入源文件
/etc/apt/sources.list.d/zyyun.list - 执行
apt-get update(失败不阻断安装)
内置源固定为:
deb [signed-by=/usr/share/keyrings/zyyun-archive-keyring.gpg] http://80.12.140.29:80/apt v10 main
发版前可快速确认某个包已注入 bootstrap:
bash ./scripts/verify-deb-bootstrap.sh dist/linux-deb/call-client/amd64/*.deb
或校验全部 deb:
bash ./scripts/verify-deb-bootstrap.sh --all
5.3 Windows Nginx 本地目录直读模板
server {
listen 80;
server_name 80.12.140.29;
location /apt/ {
alias F:/workspace/zyclient_linux/TauriClient/dist/repo/;
autoindex on;
}
}
路径映射关系:
http://80.12.140.29:80/apt/dists/v10/Release- 对应本地文件
F:/workspace/zyclient_linux/TauriClient/dist/repo/dists/v10/Release
客户端源配置示例:
deb [arch=amd64 signed-by=/usr/share/keyrings/zyyun-archive-keyring.gpg] http://80.12.140.29:80/apt v10 main
5.3.1 方案二:80 端口被其他服务占用时
如果 80.12.140.29:80 已由 IIS / Apache / 其他网关占用,推荐做法是:
- 保持现有 80 入口不变(外部地址仍为
http://80.12.140.29:80/apt)。 - 让 Nginx 改为监听本机其他端口(例如
127.0.0.1:8080)。 - 由现有 80 入口服务将
/apt/路径反向代理到http://127.0.0.1:8080/apt/。
Nginx(仓库中转)示例:
server {
listen 127.0.0.1:8080;
server_name localhost;
location /apt/ {
alias F:/workspace/zyclient_linux/TauriClient/dist/repo/;
autoindex on;
}
}
80 入口服务需要保证:
- 对外保留路径
/apt/。 - 不对
dists/、pool/、Packages.gz、InRelease做重写或鉴权跳转。 - 转发后客户端源配置保持不变:
deb [arch=amd64 signed-by=/usr/share/keyrings/zyyun-archive-keyring.gpg] http://80.12.140.29:80/apt v10 main
5.4 客户端交互建议
- “检查更新”按钮只做检测与引导,不在应用内直接执行
sudo。 - 检测成功有新版本时,提示并复制命令:
sudo apt update && sudo apt install --only-upgrade call-clientsudo apt update && sudo apt install --only-upgrade broadcast-client