Debian Rust项目部署上线实战指南
一 准备与构建
- 在 Debian 服务器安装 Rust 工具链(优先使用 rustup):
- 安装:curl --proto ‘=https’ --tlsv1.2 -sSf https://sh.rustup.rs | sh
- 生效:source “$HOME/.cargo/env”
- 验证:rustc --version、cargo --version
- 获取与构建:
- 拉取代码:git clone && cd
- 生产构建:cargo build --release(产物在 target/release/)
- 如项目监听端口(例如 8080),放行防火墙:
- UFW:sudo ufw allow 8080/tcp
- firewalld:sudo firewall-cmd --add-port=8080/tcp --permanent && sudo firewall-cmd --reload
二 部署方式对比与选择
| 方式 |
适用场景 |
核心优点 |
关键步骤要点 |
| 直接部署可执行文件 + systemd |
物理机/虚拟机、追求极致性能与最小依赖 |
无容器开销、启动快、易管控 |
上传可执行文件,配置 systemd 服务,开机自启,日志用 journalctl 查看 |
| 打包为 .deb 包 |
内网多机、需要标准化交付与依赖管理 |
版本化、可回滚、易于分发与安装 |
使用 cargo-deb 生成 .deb,dpkg -i 安装,必要时 apt-get -f 修复依赖 |
| Docker 容器化 |
环境一致性、弹性伸缩、CI/CD 友好 |
隔离依赖、镜像复用、部署一致 |
多阶段构建减小镜像体积,运行容器并映射端口,可选 docker-compose/K8s |
三 方式一 直接部署可执行文件与 systemd 管理服务
- 上传可执行文件到目标路径(示例:/opt/myapp/):
- scp target/release/myapp user@server:/opt/myapp/
- 创建 systemd 服务(/etc/systemd/system/myapp.service):
- [Unit]
- Description=My Rust App
- After=network.target
- [Service]
- ExecStart=/opt/myapp/myapp
- WorkingDirectory=/opt/myapp
- User=www-data
- Restart=always
- StandardOutput=append:/var/log/myapp.log
- StandardError=append:/var/log/myapp.err.log
- [Install]
- WantedBy=multi-user.target
- 启用与启动:
- sudo systemctl daemon-reload
- sudo systemctl enable --now myapp
- 查看状态与日志:systemctl status myapp;journalctl -u myapp -f
- 可选:优雅发布脚本(拉取代码→构建→备份旧版→拷贝新版本→重启服务→健康检查)
四 方式二 打包为 Debian 包 .deb 交付
- 安装打包工具与依赖:
- cargo install cargo-deb(建议 Rust ≥ 1.63)
- 系统依赖:sudo apt-get install -y dpkg-dev liblzma-dev
- 生成 .deb:
- 在项目根目录执行:cargo deb(产物位于 target/debian/)
- 可分离调试符号:cargo deb --separate-debug-symbols
- 安装与修复依赖:
- sudo dpkg -i target/debian/*.deb
- 遇到依赖问题:sudo apt-get install -f
- 进阶:将 systemd 单元随包安装
- 在 Cargo.toml 增加:
- [package.metadata.deb]
- systemd-units = [“myapp.service”]
- 打包时自动包含单元文件,安装即注册服务
五 方式三 Docker 容器化部署
- 多阶段构建示例(减小镜像体积,基于 Debian 运行时):
- Dockerfile:
- FROM rust:1.75 AS build
- WORKDIR /app
- COPY . .
- RUN cargo build --release
- FROM debian:bookworm-slim
- WORKDIR /app
- COPY --from=build /app/target/release/myapp /usr/local/bin/myapp
- CMD [“myapp”]
- 构建与运行:
- docker build -t myapp:latest .
- docker run -d --name myapp -p 8080:8080 myapp:latest
- 编排与扩展:
- 使用 docker-compose 管理多服务(应用 + 数据库/缓存)
- 生产可进一步推送到镜像仓库并部署到 Kubernetes