部署 Rust 项目
Zeabur 原则上支持所有类型的 Rust 应用——默认情况会自动查找执行档;假如项目有多个执行档,亦可在“Service 名称”一栏自行指定要运行的文件名。
倘若你手边没有项目,可以 fork zeabur/axum-template (opens in a new tab) 仓库到你的 GitHub 账号,然后在 Zeabur 上试着部署。
支持的项目类型
- 单执行档项目:即执行档只有
src/main.rs
一个入口的 Rust 项目。Zeabur 会自动查找编译产物 (target/release
) 中的唯一一个可执行档。你也可以在“Service 名称”一栏填写“你想运行的最终产物的名称,”保证运行的程序符合你的预期。 - 多执行档项目:假如除了
src/main.rs
,项目在src/bin
也有其他执行档,请在“Service 名称”一栏填写“你想运行的最终产物的名称。” - Cargo Workspace monorepo:假如你的项目是由多个 crate 组成,请在“Service 名称”一栏填写“你想运行的最终产物的名称。”
若你填写的执行档不存在,则会改用自动查找的形式。“自动查找”会查找 target/release
的所有文件,并运行找到的第一个文件。因为这种模式在多项目情况下很容易猜错,因此在复杂的项目场景下(如第二和第三点提到的多执行档项目),建议你根据〈查找最终产物名称〉的方式填写正确的“Service 名称”。
查找最终产物名称
最终产物可以在你项目的 target/release
中找到。具体查找的方式:
-
你需要 Rust toolchain 才能编译项目,可到 Rust 官方网站 (opens in a new tab) 下載。
-
clone 你要部署的项目,并且进到项目目录。
-
运行
cargo build --release
编译项目。$ cargo run --release Compiling zeabur v0.1.0 (/project) Finished release [optimized] target(s) in 0.65s Running `target/release/zeabur`
-
找到 Running
target/release/zeabur
那一行,我们选取最后的执行档名称 (zeabur) 即可 -
在 Service 名称填入
zeabur
。
拷贝其他文件
假如你除了执行档之外,还依赖源代码库的其他文件。举例来说:
*
|`-- public <-- 你的程序依赖这个文件夹
|`-- src
| `-- main.rs
|`-- Cargo.toml
|`-- Cargo.lock
`--- config.toml <-- 你的程序依赖这个文件
你可以在源代码库填写 .zeabur-preserve
文件。里面填入你想保留的文件夹或文件,文件夹可以选择用 /
结尾。示例如下:
public/
config.toml
技术细节与注意事项
- 默认采用 Multi-stage build,runtime 使用
docker.io/library/debian:bookworm-slim
作为 base image。某些动态链接的 libraries,可能在迁移到本 image 时,因为缺少某些依赖而无法正常运作。如有遇到此类情况,请回报给我们以便增加这个依赖的支持。- 目前会特别安装的依赖有
openssl
。
- 目前会特别安装的依赖有
- 运行时不提供 Root 权限,若有相关需要请自行撰写 Dockerfile。
- 为了加快编译速度,我们使用
lld
进行编译。若你的项目不支持lld
,建议你自己在项目中指定config.toml
调用标准的ld
;若你想使用如mold
等不内置的 linker,则需要自行撰写 Dockerfile。 - 我们使用
cargo-chef
以使缓存的 build layer 最大化。如果有遇到不兼容的问题,可以报告 Zeabur 或上游LukeMathWalker/cargo-chef
(opens in a new tab)。