Debian 上 Rust 项目部署上线的实用方案
一 准备与构建
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shsource "$HOME/.cargo/env"rustc --version、cargo --versionsudo apt update && sudo apt install -y build-essential gcc makegit clone <repo> && cd <repo>cargo build --release(产物在 target/release/)二 部署方式选择
方式 A 直接发布可执行文件(简单、通用)
scp target/release/myapp user@server:/opt/myapp//opt/myapp/myapp方式 B 打包为 Debian 包(便于标准化分发与升级)
cargo install cargo-debcargo deb(产物位于 target/debian/)sudo dpkg -i target/debian/*.debsudo apt-get install -f方式 C 自动化编译与热更新脚本(适合持续交付)
cargo build --release、备份旧二进制、拷贝新二进制、重启服务并校验状态。三 以 systemd 托管服务
sudo nano /etc/systemd/system/myapp.service[Unit]
Description=My Rust Application
After=network.target
[Service]
Type=simple
ExecStart=/opt/myapp/myapp
WorkingDirectory=/opt/myapp
User=www-data
Group=www-data
Restart=always
StandardOutput=append:/var/log/myapp.log
StandardError=append:/var/log/myapp.error.log
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reloadsudo systemctl enable --now myappsudo systemctl status myapp、journalctl -u myapp -f四 网络与防火墙
sudo ufw allow 8080/tcpsudo firewall-cmd --add-port=8080/tcp --permanent && sudo firewall-cmd --reload五 上线检查清单与常见问题
cargo build --releasechmod +x /opt/myapp/myappsystemctl status myappjournalctl -u myapp -fss -ltnp | grep 8080 或 curl -I http://localhost:8080/healthsudo apt-get install -fapt install <旧版本.deb> 回退