在VPS上部署Rust应用:从A到Z逐步指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言

\n\n

您用Rust编写了一个很棒的应用程序。它快速、安全且不会崩溃。但如何让它24/7在远程服务器上运行并对用户可用呢?在VPS(虚拟专用服务器)上部署Rust应用是一个过程,包括编译二进制文件、配置环境、作为系统服务启动,以及通常设置反向代理。

\n\n

在本文中,我们将从零开始,完整地走一遍在运行Ubuntu的VPS上部署Rust应用的整个过程。您将学习如何准备服务器、构建项目、配置自动启动以及确保安全。本指南适用于Web服务器(Actix-web、Axum、Rocket)以及任何其他基于Rust的守护进程。

\n\n

让我们开始吧。

\n\n

1. 服务器和环境准备

\n\n

在部署代码之前,需要先打好基础。我们将使用Ubuntu 22.04 LTS,但这些说明也适用于Debian。

\n\n

连接到服务器并进行基本配置

\n\n

通过SSH连接到您的VPS:

\n\n
ssh root@您的服务器IP
\n\n

更新软件包并创建一个用户(以root身份操作是不好的做法):

\n\n
apt update && apt upgrade -y\nadduser deployer\nusermod -aG sudo deployer
\n\n

为新用户配置SSH密钥,这样就不必每次都输入密码了。

\n\n

在服务器上安装Rust

\n\n

最可靠的方法是使用官方脚本rustup。切换到deployer用户并执行:

\n\n
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
\n\n

安装后,重新加载shell或执行:

\n\n
source $HOME/.cargo/env
\n\n

检查版本:

\n\n
rustc --version
\n\n

对于生产构建,我们需要静态链接(以便二进制文件能在任何Linux上运行,无需额外的库)。安装musl-tools:

\n\n
sudo apt install musl-tools -y\nrustup target add x86_64-unknown-linux-musl
\n\n

2. 编译并将二进制文件传输到服务器

\n\n

最好在本地机器(或CI/CD中)编译应用程序,然后将准备好的二进制文件复制到服务器。这样更快,也不会给VPS带来负担。

\n\n

编译生产版本

\n\n

在您的本地计算机上,在项目文件夹中执行:

\n\n
cargo build --release --target x86_64-unknown-linux-musl
\n\n

这将创建一个静态链接的二进制文件,不依赖于glibc。文件大小会更大,但它可以在任何Linux上运行。

\n\n

一个用于测试的简单Actix-web Web服务器示例(文件src/main.rs):

\n\n
use actix_web::{web, App, HttpServer, Responder};\n\nasync fn hello() -> impl Responder {\n    "Hello from Rust on VPS!"\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new().route("/", web::get().to(hello))\n    })\n    .bind("0.0.0.0:8080")?\n    .run()\n    .await\n}
\n\n

复制到服务器

\n\n

使用scp进行安全复制:

\n\n
scp ./target/x86_64-unknown-linux-musl/release/您的项目 deployer@您的服务器IP:/home/deployer/
\n\n

在服务器上,将二进制文件移动到/usr/local/bin:

\n\n
sudo mv /home/deployer/您的项目 /usr/local/bin/my-rust-app\nsudo chmod +x /usr/local/bin/my-rust-app
\n\n

3. 配置systemd以实现自动启动

\n\n

为了让应用程序在系统启动时运行、崩溃后重启并在后台运行,我们将创建一个systemd服务。

\n\n

创建服务文件:

\n\n
sudo nano /etc/systemd/system/rust-app.service
\n\n

粘贴以下配置(将deployer替换为您的用户名):

\n\n
[Unit]\nDescription=Rust Application\nAfter=network.target\n\n[Service]\nType=simple\nUse                

博客

书籍推荐