用途:指导把 Axum 服务部署到生产环境,涵盖发布构建、容器化、优雅停机与容器规范四类问题。资料称这些部署模式在 Axum 0.7 与 0.8 上一致,axum::serve 与 Serve::with_graceful_shutdown 签名相同。
主要能力:
- 发布构建:cargo build --release;可选在 Cargo.toml 的 [profile.release] 中设置 opt-level、lto、codegen-units、strip。
- 静态 musl 二进制:rustup target add x86_64-unknown-linux-musl,再 cargo build --release --target x86_64-unknown-linux-musl;musl 下建议用 rustls。
- 优雅停机:用 tokio::signal 同时处理 SIGINT(ctrl_c)与 SIGTERM(unix::signal(SignalKind::terminate())),非 Unix 分支用 std::future::pending::<()>(),通过 tokio::select! 汇合,再传给 with_graceful_shutdown。信号 future 必须返回 ()、Send 且 'static。
- 资源释放:serve 返回后调用 pool.close().await(sqlx),并刷新 tracing/OpenTelemetry。
- 容器化:多阶段 Dockerfile(rust builder + debian:bookworm-slim 等运行时),或 scratch/distroless;用 cargo-chef 缓存依赖层,musl 构建需在 cook 与 build 都加 --target。
使用方式:按资料给出的命令与代码模式接入;容器内绑定 0.0.0.0,配置从环境变量读取,使用非 root 用户,添加 .dockerignore。
适用场景:Docker、Kubernetes、systemd 下的 Axum 服务部署与滚动更新。
限制:资料未提供具体版本兼容范围之外的说明、性能数据或收费信息;未提及平台支持细节。