Tauri 开源 - 从零打造一款跨端的 AI 笔记

Tauri 开发笔记 APP 的思路与技术选型

大家好,我是 codexu。从今天开始,我将撰写一个关于 Tauri 跨端开发的系列文章,分享我在开发笔记 APP 过程中所采用技术和遇到的问题。

我开发的笔记 APP 起名为 NoteGen,“Gen” 的含义是生成,目前还处于 alpha 阶段,PC 端已经实现了核心功能,大家可以自行下载试用,完全免费,这里不对软件进行过多的介绍,有兴趣的伙伴可以进入 Github 了解。
在这里插入图片描述

想法

  • 关于写作,你更应该相信自己的大脑,大脑在放松的时候就会产生灵感,不应该依赖 AI。
  • 关于工具,曾经听过一句话:要记住,有人没有现在的笔记软件,也写出了伟大的作品,比如在监狱里写书的人。
  • 关于格式,我推崇 Markdown,专注能力的提升和产出,不在格式上浪费时间。

为什么想到要做一款笔记 APP?

为什么这么想不开做一个独立开发三件套之一的笔记呢?首先我不是个独立开发者,不指望用这个赚钱,另一方面我只是想为写作寻求一些灵感和案例,因为我之前用 Tauri 开发过一个小工具,并撰写了一篇文章《零 Rust 基础前端直接上手 Tauri 开发一个小工具》,收获了不少点赞。目前,Tauri 2.0 已经发布了正式版,并且移动端开发,因此我希望能进一步深入研究 Tauri,并计划开发一个更加复杂的软件。

我偶尔会写几篇技术文章,总结一下工作中的经验,或者记录一些有趣的技术。在这个过程中,我一直没有找到一款适合自己的笔记,平时可能就在 VSCode 中进行写作。因此,我萌生了自己造轮想法。以下是我对笔记 APP 的

你执行的命令: ```bash RUN cd src-tauri && cargo tauri bundle --release --format appimage ``` 是在 Docker 构建过程中尝试生成一个 **AppImage 格式的 Tauri 桌面应用**。这个命令本身语法正确,但在实际使用中可能会遇到一系列常见问题,尤其是在 **Docker 环境下**。 --- ## ✅ 目标说明 该命令的作用是: > 使用 Tauri 的构建工具,在 `src-tauri` 目录下打包你的前端项目为 Linux 平台的 `.AppImage` 文件(一种发行版的可执行包格式)。 最终输出类似: ``` target/release/bundle/appimage/YourApp_0.1.0_amd64.AppImage ``` --- ## ⚠️ 常见错误与解决方案(重点针对 Docker) ### ❌ 问题 1:`cargo tauri` 命令未找到 ```text error: 'cargo' is not recognized as an internal or external command ``` #### ✅ 解决方案:确保已安装 Rust 工具链 在 Dockerfile 中添加: ```Dockerfile # 安装 Rust (推荐使用 rustup) RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y ENV PATH="/root/.cargo/bin:${PATH}" ``` 然后验证是否可用: ```Dockerfile RUN cargo --version RUN rustc --version ``` --- ### ❌ 问题 2:缺少 `appimage-builder` 或 `linuxdeploy` Tauri 打包 AppImage 需要外部工具链支持,如: - [`linuxdeploy`](https://github.com/linuxdeploy/linuxdeploy)(用于收集依赖) - [`appimagetool`](https://github.com/AppImage/AppImageKit)(用于生成 .AppImage) 如果缺失,会报错: ```text Error: Cannot continue: linuxdeploy not found ``` #### ✅ 解决方案:手动安装 `linuxdeploy` 和 `appimagetool` ```Dockerfile # 下载并安装 linuxdeploy RUN wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage \ && chmod +x linuxdeploy-x86_64.AppImage \ && mv linuxdeploy-x86_64.AppImage /usr/local/bin/linuxdeploy # 下载 appimagetool RUN wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage \ && chmod +x appimagetool-x86_64.AppImage \ && mv appimagetool-x86_64.AppImage /usr/local/bin/appimagetool ``` > 💡 提示:这些是 AppImage 自身,但可以在非交互模式下运行(加 `--no-gui` 参数) 或者使用静态二进制版本避免 FUSE 问题。 --- ### ❌ 问题 3:FUSE 错误或无法挂载 AppImage ```text fuse: device not found, try 'modprobe fuse' first ``` 这是因为在 Docker 默认环境中禁用了 FUSE。 #### ✅ 解决方案 A:使用 `--no-sandbox` 运行 AppImage ```Dockerfile RUN /usr/local/bin/linuxdeploy --appdir AppDir --plugin gtk --output appimage --no-sandbox ``` #### ✅ 解决方案 B:改用静态编译的 `appimagetool` 使用不依赖 FUSE 的版本: ```Dockerfile # 使用 extract-and-run 版本 RUN wget https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-x86_64.AppImage RUN ./appimagetool-x86_64.AppImage --appimage-extract RUN mv squashfs-root usr/lib/appimagekit RUN chmod +x usr/lib/appimagekit/AppRun ``` 然后调用 `./usr/lib/appimagekit/appimagetool` 来打包。 --- ### ❌ 问题 4:缺少系统依赖库(如 webkit2gtk、libayatana-appindicator) 即使你之前安装了开发库,在发布构建时仍可能因缺少运行时库而失败。 #### ✅ 解决方案:确认已安装必要运行时依赖 ```Dockerfile RUN apt-get update && apt-get install -y \ libwebkit2gtk-4.1-0 \ libayatana-appindicator3-dev \ librsvg2-common \ libgtk-3-0 \ libgdk-pixbuf2.0-0 \ && rm -rf /var/lib/apt/lists/* ``` ⚠️ 注意:`libappindicator3-dev` 是编译期用的,运行时需要的是 `libayatana-appindicator3-1` 或类似包。 --- ### ✅ 推荐完整 Dockerfile 片段(AppImage 构建) ```Dockerfile # 必须启用特权模式构建(docker build --privileged) FROM debian:bookworm-slim AS builder # 设置非交互式环境 ENV DEBIAN_FRONTEND=noninteractive \ RUSTUP_HOME=/usr/local/rustup \ CARGO_HOME=/usr/local/cargo \ PATH=/usr/local/cargo/bin:$PATH \ RUST_VERSION=stable # 安装基础依赖 RUN apt-get update && apt-get install -y \ curl \ wget \ gcc \ pkg-config \ build-essential \ libwebkit2gtk-4.1-dev \ libayatana-appindicator3-dev \ librsvg2-dev \ libssl-dev \ patchelf \ && rm -rf /var/lib/apt/lists/* # 安装 Rust RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y ENV PATH="/root/.cargo/bin:${PATH}" # 安装 linuxdeploy 和 appimagetool RUN wget -q https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage \ && wget -q https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage RUN chmod +x *.AppImage && \ mv linuxdeploy-x86_64.AppImage /usr/local/bin/linuxdeploy && \ mv appimagetool-x86_64.AppImage /usr/local/bin/appimagetool # 设置工作目录(假设你已 COPY 前端和 src-tauri) WORKDIR /app COPY . . # 构建 Tauri 应用并打包为 AppImage RUN cd src-tauri && \ cargo tauri build --release --bundle # 输出产物位置 # target/release/bundle/appimage/*.AppImage ``` 构建命令需加 `--privileged`: ```bash docker build --privileged -t my-tauri-app . ``` --- ## 📦 输出文件位置 成功后,你会在以下路径找到 AppImage 文件: ```bash /app/src-tauri/target/release/bundle/appimage/YourApp_*.AppImage ``` 你可以通过 `docker cp` 提取它,或在多阶段构建中复制到轻量镜像。 --- ## ✅ 最佳实践建议 | 实践 | 说明 | |------|------| | ✅ 多阶段构建 | 第一阶段构建,第二阶段只保留 `.AppImage` 文件 | | ✅ 使用 `--privileged` | 否则 AppImage 工具无法运行 | | ✅ 缓存 `~/.cargo/registry` | 加快重复构建 | | ✅ 使用 GitHub Actions 或 CI 镜像 | 如 `tauri-apps/tauri-action` | --- ## 🔧 调试技巧 临时进入容器查看内容: ```bash docker run -it --rm --entrypoint /bin/bash your-image-name ls -la /app/src-tauri/target/release/bundle/ ``` 检查是否有 `.AppImage` 文件生成。 --- ## ✅ 总结 你写的这行命令: ```bash RUN cd src-tauri && cargo tauri bundle --release --format appimage ``` 逻辑上是对的,但在 Docker 中要成功运行必须满足: 1. ✅ 已安装 `rust/cargo` 2. ✅ 已安装 `linuxdeploy` 和 `appimagetool` 3. ✅ 已安装 GTK/webkit2gtk 等系统依赖 4. ✅ 使用 `--privileged` 模式运行构建 5. ✅ 清理掉默认源干扰(如前面提到的 Debian mirror 问题) 否则就会卡在构建中途。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值