Linux 上部署 Rust 项目的实用流程
一 准备与构建
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh,完成后执行 source $HOME/.cargo/env,验证 rustc --version、cargo --version。cargo build --release,产物位于 target/release/。scp 或 rsync 将二进制上传到服务器,运行 ./your_binary 验证。二 以 systemd 托管进程
sudo nano /etc/systemd/system/yourapp.service,示例:[Unit]
Description=My Rust App
After=network.target
[Service]
Type=simple
User=your_user
WorkingDirectory=/path/to/deploy
ExecStart=/path/to/deploy/your_binary
Restart=always
RestartSec=5
Environment=RUST_LOG=info
Environment=DATABASE_URL=postgres://user:pass@localhost/db
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload、sudo systemctl enable --now yourapp.servicesudo systemctl status yourapp.service、journalctl -u yourapp.service -f三 网络发布与反向代理
firewall-cmd --permanent --add-port=8080/tcp && firewall-cmd --reload)。server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
四 静态编译与跨平台交付
rustup target add x86_64-unknown-linux-muslcargo build --release --target x86_64-unknown-linux-muslldd target/x86_64-unknown-linux-musl/release/your_binary 应显示 not a dynamic executable。cargo-zigbuild,添加目标 rustup target add x86_64-unknown-linux-muslcargo zigbuild --target x86_64-unknown-linux-musl --releasefile your_binary 应显示 statically linked。FROM rust:latest AS builder
WORKDIR /app
COPY . .
RUN cargo build --release
FROM debian:buster-slim
COPY --from=builder /app/target/release/your_binary /usr/local/bin/your_binary
ENTRYPOINT ["your_binary"]
docker build -t my-rust-app . && docker run -d -p 8080:8080 my-rust-app。五 常见问题与排查清单
ldd your_binary 检查依赖;若需跨发行版运行,优先采用 MUSL 静态构建或容器化交付。Restart= 策略与日志 journalctl -u yourapp.service -f。x86_64-unknown-linux-gnu vs x86_64-unknown-linux-musl),必要时使用 Docker 或 cross/cargo-zigbuild 保证一致性。