Agent Skills
› nixopus/nixopus
› rust-deploy
rust-deploy
GitHub提供 Rust 应用的构建与部署指南,涵盖版本检测、二进制编译、端口识别及多种 Dockerfile 模板(含 Cargo Chef 优化),用于自动化发布流程。
Trigger Scenarios
用户询问如何部署 Rust 项目
检测到 Cargo.toml 文件
Install
npx skills add nixopus/nixopus --skill rust-deploy -g -y
SKILL.md
Frontmatter
{
"name": "rust-deploy",
"metadata": {
"version": "1.0"
},
"description": "Build and deploy Rust applications — version detection, release binaries, cargo-chef, and Dockerfile patterns. Use when deploying a Rust project, or when Cargo.toml is detected."
}
Rust Deployment
Detection
Project is Rust if Cargo.toml or cargo.toml exists.
Versions
Rust version priority:
rust-toolchain.toml→toolchain.channelCargo.toml→package.rust-version.rust-versionfileCargo.toml→package.edition(maps to minimum Rust version)- Defaults to latest stable (1.89)
Build
Build Command
cargo build --release- Binary:
target/release/<package-name> - Package name from
Cargo.toml→[package].name
Entry Resolution
- Binary crate:
src/main.rs - Multi-binary:
src/bin/<name>.rs→ binary name matches filename - Library + binary:
[bin]section inCargo.toml
Output
- Build output:
target/release/<name> - Start command:
./bin/<project-name>or./target/release/<name>
Runtime Variables
| Variable | Purpose |
|---|---|
ROCKET_ADDRESS |
Rocket bind address (use 0.0.0.0 for containers) |
PORT |
Port for web servers (default 8080) |
Port Detection
PORTin.env/.env.example- Source code patterns:
:8080,bind,TcpListenerinmain.rs - Default: 8080
Framework / Library Detection
| Crate | Category |
|---|---|
axum |
Web |
actix-web |
Web |
rocket |
Web |
warp |
Web |
tokio |
Async runtime |
tower |
Middleware |
Install Stage Optimization
Copy in order:
Cargo.toml,Cargo.locksrc/(or full source)
BuildKit Caching
| Cache key | Path |
|---|---|
cargo_registry |
~/.cargo/registry |
cargo_git |
~/.cargo/git |
cargo_target |
target/ |
Base Images
| Stage | Image |
|---|---|
| Build | rust:1.89-bookworm or rust:1.89-alpine |
| Runtime | debian:bookworm-slim or gcr.io/distroless/cc |
For Alpine build: may need musl-dev for fully static binary.
Dockerfile Patterns
Multi-Stage (Debian)
FROM rust:1.89-bookworm AS build
WORKDIR /app
COPY Cargo.toml Cargo.lock ./
RUN mkdir src && echo "fn main() {}" > src/main.rs
RUN cargo build --release
COPY src ./src
RUN touch src/main.rs && cargo build --release
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=build /app/target/release/<binary-name> .
EXPOSE 8080
CMD ["./<binary-name>"]
Cargo Chef (faster layer cache)
FROM rust:1.89-bookworm AS chef
RUN cargo install cargo-chef
FROM chef AS planner
WORKDIR /app
COPY . .
RUN cargo chef prepare --recipe-path recipe.json
FROM chef AS build
WORKDIR /app
COPY --from=planner /app/recipe.json .
RUN cargo chef cook --release --recipe-path recipe.json
COPY . .
RUN cargo build --release
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=build /app/target/release/<binary-name> .
EXPOSE 8080
CMD ["./<binary-name>"]
Simple (no chef)
FROM rust:1.89-bookworm AS build
WORKDIR /app
COPY . .
RUN cargo build --release
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=build /app/target/release/<binary-name> .
EXPOSE 8080
CMD ["./<binary-name>"]
Gotchas
- The dummy
main.rstrick (echo "fn main() {}" > src/main.rs) caches dependency compilation, buttouch src/main.rsis needed afterward to invalidate the binary build cache Cargo.lockmust be committed for binary crates — without it, dependency versions are resolved fresh on every build- Alpine builds need
musl-dev, but crates using OpenSSL also needopenssl-devandpkgconfig - Rust builds are memory-intensive —
cargo build --release -j 2limits parallelism to avoid OOM kills in resource-constrained environments - Cargo chef
preparerequires the full source tree — it scans code to compute the dependency recipe
Version History
- cf05d97 Current 2026-08-20 14:52


