Debian Rust 项目部署指南
一 环境准备与构建
source $HOME/.cargo/env,并用 rustc --version、cargo --version 验证环境可用。git clone 项目后,执行 cargo build --release 生成优化二进制,产物位于 target/release/。strip target/release/your_app 减小体积;准备配置文件、静态资源、环境变量、以及 systemd 单元文件等随包或随部署物交付的内容。二 部署方式选型
| 方式 | 适用场景 | 核心优点 | 关键要点 |
|---|---|---|---|
| 手动发布 + systemd | 小型服务、物理/虚拟机、学习/测试 | 简单直观、可控性强 | 使用 scp/rsync 传输二进制,配置 systemd 管理进程与开机自启 |
| 自动化脚本 + systemd | 团队内多环境、频繁发布 | 一键拉取、构建、备份、滚动重启 | 脚本包含 git pull、cargo build --release、备份旧版、拷贝新版本、systemctl restart 与状态校验 |
| cargo-deb 打包为 .deb | 需要纳入 apt 体系、多机标准化分发 | 版本管理、依赖声明、系统级安装/卸载 | 用 cargo-deb 生成 .deb,支持 systemd 单元、维护者脚本、依赖声明 |
| piku Git 推送即部署 | 追求极简 PaaS、多项目托管 | git push 自动构建与部署、低资源 |
服务器安装 piku,项目根目录提供 Procfile/ENV,SSH 触发部署与进程管理 |
三 手动发布与 systemd 服务
/opt/your_app/),执行 ./your_app 验证运行。sudo nano /etc/systemd/system/your_app.service[Unit]
Description=Your Rust Application
After=network.target
[Service]
ExecStart=/opt/your_app/your_app
WorkingDirectory=/opt/your_app
User=your_user
Restart=always
StandardOutput=append:/var/log/your_app.log
StandardError=append:/var/log/your_app.error.log
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reloadsudo systemctl enable --now your_appsudo systemctl status your_app 与 journalctl -u your_app -f 查看运行状态与日志。四 自动化发布脚本与回滚
/data/deploy/rust/git/your_app/data/deploy/rust/bin/your_app/your_app/data/deploy/rust/backup/your_app-<时间戳>/data/deploy/rust/logs/your_app.logyour_app-prod.sh 并 chmod +x):#!/usr/bin/env bash
set -e
PROJECT_NAME="your_app"
CODE_DIR="/data/deploy/rust/git/$PROJECT_NAME"
BIN_DIR="/data/deploy/rust/bin/$PROJECT_NAME"
BACKUP_DIR="/data/deploy/rust/backup/${PROJECT_NAME}-$(date +'%Y%m%d%H%M%S.%N')"
LOG_FILE="/data/deploy/rust/logs/$PROJECT_NAME.log"
cd "$CODE_DIR" || { echo "代码目录不存在: $CODE_DIR"; exit 1; }
echo "拉取最新代码..."
git pull || { echo "Git 拉取失败"; exit 1; }
echo "编译..."
cargo build --release || { echo "编译失败"; exit 1; }
echo "备份旧版本..."
mkdir -p "$BACKUP_DIR"
if [[ -f "$BIN_DIR/$PROJECT_NAME" ]]; then
rsync -a --ignore-existing "$BIN_DIR/$PROJECT_NAME" "$BACKUP_DIR/"
fi
echo "部署新版本..."
mkdir -p "$BIN_DIR"
rsync -a --delete "target/release/$PROJECT_NAME" "$BIN_DIR/"
echo "重启服务..."
sudo systemctl restart "$PROJECT_NAME" || { echo "服务重启失败"; exit 1; }
sleep 2
sudo systemctl status "$PROJECT_NAME" --no-pager || { echo "服务状态异常"; exit 1; }
echo "部署完成,日志:$LOG_FILE"
systemctl restart your_app。五 打包为 Debian 包与 piku 极简 PaaS
cargo install cargo-debcargo deb(产物在 target/debian/,命名形如 name_version-1_arch.deb)sudo dpkg -i target/debian/your_app_*.deb 或 cargo deb --install[package.metadata.deb] 中声明维护者、描述、依赖、以及 systemd-units 以随包部署服务单元。curl https://piku.github.io/get | shgit remote add piku piku@your-server:your_appgit push piku main(piku 将自动构建并部署,支持多语言与 systemd 管理)。