发布于2026-07-04 阅读(0)
扫一扫,手机访问
把Rust项目部署到Ubuntu服务器上,这件事说难不难,说简单也不简单。从环境搭建、项目构建,到生产环境下的进程管理和监控,每一步都有不少细节值得留意。这篇指南把整个过程梳理了一遍,希望能帮你少走一些弯路。
在部署之前,先确保系统里已经装好了Rust工具链——包括rustc编译器和Cargo包管理器,以及一些必要的依赖。官方推荐的安装方式是使用rustup,这套工具链管理器用起来最顺手。

安装步骤大致如下:
# 安装curl(如果还没安装的话)
sudo apt install curl
# 下载并运行rustup安装脚本
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 按提示完成安装,重启终端或执行以下命令激活环境
source $HOME/.cargo/env
# 验证安装(显示Rust版本则说明没问题)
rustc --version && cargo --version
另外,由于国内网络环境的特殊性,建议提前配置好国内镜像源(比如清华或中科大的镜像),这一步能极大提升依赖下载的速度。修改~/.cargo/config.toml文件,添加以下内容即可:
[source.crates-io]
replace-with = 'ustc'
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index/"
进入项目根目录(就是包含Cargo.toml的那个文件夹),执行下面这条命令来构建发布版本——编译时会开启优化,生成的可执行文件更适合直接扔到生产环境去跑:
cargo build --release
构建完成后,可执行文件会乖乖待在target/release/目录里,文件名就是你在Cargo.toml里定义的项目名。比如项目叫my_project,那生成的就是target/release/my_project。如果只是想调试,用cargo build就行,生成的文件在target/debug/目录下,会包含符号信息,排查问题更方便。
把target/release/下的可执行文件传到目标服务器上。最常用的工具是scp,命令长这样:
scp target/release/my_project user@your_server_ip:/path/to/deploy
记得把user换成实际的服务器用户名,your_server_ip换成IP地址,/path/to/deploy是你想放文件的位置(比如/opt/my_rust_app)。路径别搞错了,后面的步骤都得基于这个路径来操作。
这一步其实很容易被忽视,但恰恰很关键。如果项目依赖了外部库(比如PostgreSQL客户端、OpenSSL之类的),那服务器上也得装上对应的系统级依赖。举个例子,如果项目需要连PostgreSQL:
sudo apt install libpq-dev
另外,环境变量的配置也不能马虎。比如数据库连接字符串、API密钥、日志级别这些,都可以通过export命令临时设置,或者直接写到~/.bashrc(用户级)或/etc/environment(系统级)文件里。示例如下:
export DATABASE_URL="postgres://user:password@localhost:5432/my_db"
export RUST_LOG="info"
执行source ~/.bashrc就能让这些变量立即生效。
在服务器上进入到目标路径,直接执行可执行文件即可:
cd /path/to/deploy
./my_project
不过这种前台运行的方式并不适合生产环境,一关终端程序就停了。想让它在后台托管运行,可以用nohup:
nohup ./my_project > app.log 2>&1 &
这样标准输出和错误输出都会被重定向到app.log文件里,方便后续查看日志。
如果希望项目能在服务器重启后自动启动,或者程序崩溃后自动恢复运行,那用systemd来管理是最靠谱的选择。具体操作如下:
sudo nano /etc/systemd/system/my_rust_app.service
[Unit]
Description=My Rust Application
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/opt/my_rust_app
ExecStart=/opt/my_rust_app/my_project
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start my_rust_app
sudo systemctl enable my_rust_app
sudo systemctl status my_rust_app
如果输出显示“active (running)”,那就说明服务已经跑起来了。这一步是生产环境部署的标配,强烈建议用起来。
如果你的应用需要跨平台部署,或者希望有更彻底的环境隔离,那用Docker容器化是一个不错的选择。做法如下:
sudo apt update
sudo apt install docker.io
sudo systemctl start docker && sudo systemctl enable docker
Dockerfile,内容参考:FROM rust:1.70
WORKDIR /app
COPY . .
RUN cargo build --release
EXPOSE 8080
CMD ["./target/release/my_project"]
docker build -t my_rust_app .
docker run -d -p 8080:8080 --name my_rust_container my_rust_app
把容器的8080端口映射到服务器的8080端口,然后就可以通过http://your_server_ip:8080访问应用了。这种方式的优势在于,环境的强一致性几乎杜绝了“在我这好好的,到你那就不行了”这种问题。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8