温馨提示×

Debian Rust项目部署指南

小樊
32
2026-01-03 15:15:07
栏目: 编程语言

Debian Rust 项目部署指南

一 环境准备与构建

  • 安装 Rust 工具链:使用 rustup 安装与更新,完成后执行 source $HOME/.cargo/env,并用 rustc --versioncargo --version 验证环境可用。
  • 获取代码与依赖:在开发机或 CI 中 git clone 项目后,执行 cargo build --release 生成优化二进制,产物位于 target/release/
  • 产物整理:可按需执行 strip target/release/your_app 减小体积;准备配置文件、静态资源、环境变量、以及 systemd 单元文件等随包或随部署物交付的内容。

二 部署方式选型

方式 适用场景 核心优点 关键要点
手动发布 + systemd 小型服务、物理/虚拟机、学习/测试 简单直观、可控性强 使用 scp/rsync 传输二进制,配置 systemd 管理进程与开机自启
自动化脚本 + systemd 团队内多环境、频繁发布 一键拉取、构建、备份、滚动重启 脚本包含 git pullcargo build --release、备份旧版、拷贝新版本、systemctl restart 与状态校验
cargo-deb 打包为 .deb 需要纳入 apt 体系、多机标准化分发 版本管理、依赖声明、系统级安装/卸载 cargo-deb 生成 .deb,支持 systemd 单元、维护者脚本、依赖声明
piku Git 推送即部署 追求极简 PaaS、多项目托管 git push 自动构建与部署、低资源 服务器安装 piku,项目根目录提供 Procfile/ENV,SSH 触发部署与进程管理

三 手动发布与 systemd 服务

  • 传输与运行:将 target/release/your_app 上传至服务器(如 /opt/your_app/),执行 ./your_app 验证运行。
  • 创建 systemd 单元(示例):
    • 新建文件: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-reload
    • sudo systemctl enable --now your_app
    • sudo systemctl status your_appjournalctl -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.log
  • 部署脚本要点(可保存为 your_app-prod.shchmod +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"
    
  • 回滚思路:从 BACKUP_DIR 将旧二进制拷回 BIN_DIR,再 systemctl restart your_app

五 打包为 Debian 包与 piku 极简 PaaS

  • 使用 cargo-deb 打包:
    • 安装:cargo install cargo-deb
    • 构建:cargo deb(产物在 target/debian/,命名形如 name_version-1_arch.deb
    • 安装:sudo dpkg -i target/debian/your_app_*.debcargo deb --install
    • 高级:在 Cargo.toml[package.metadata.deb] 中声明维护者、描述、依赖、以及 systemd-units 以随包部署服务单元。
  • 使用 piku Git 推送即部署:
    • 服务器安装:curl https://piku.github.io/get | sh
    • 本地配置 SSH 公钥后,添加远端:git remote add piku piku@your-server:your_app
    • 推送部署:git push piku main(piku 将自动构建并部署,支持多语言与 systemd 管理)。

0