在VPS上部署Rust应用:分步指南

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

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

开始课程

介绍

Rust 是一种系统编程语言,以其高性能和内存安全性而闻名。然而,编写应用程序只是成功的一半。为了让您的项目能够被互联网用户访问,您需要将其部署到服务器上。在本文中,我们将逐步介绍如何将 Rust 应用程序部署到 VPS(虚拟专用服务器)上。

我们将使用基于 actix-web 框架的典型 Web 服务器,配置环境,编译发布版本,将应用程序作为 systemd 服务运行,并配置带有 SSL 证书的 Nginx 反向代理服务器。按照本指南,您将能够在运行 Linux 的远程服务器上部署任何 Rust 应用程序。

1. 服务器和环境准备

1.1. 连接到服务器

首先,通过 SSH 连接到您的 VPS:

ssh root@your_server_ip

为了安全起见,建议创建一个具有有限权限的单独用户(sudo),但为简单起见,本指南将使用 root 用户操作。

1.2. 在服务器上安装 Rust

虽然我们可以在本地编译应用程序并直接复制二进制文件,但为了方便在目标架构上重新编译,最好在服务器上安装 Rust。使用官方脚本:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env

验证安装:

rustc --version
cargo --version

1.3. 安装系统依赖

编译某些 crate(例如 openssl)可能需要系统库。安装它们:

apt update
apt install build-essential pkg-config libssl-dev git -y

2. 应用程序的编译和准备

2.1. 基于 actix-web 的简单 Web 服务器示例

创建一个最小的应用程序。如果您已有项目,请跳过此步骤。

Cargo.toml:

[package]
name = "my_rust_app"
version = "0.1.0"
edition = "2021"

[dependencies]
actix-web = "4"
serde = { version = "1", features = ["derive"] }

src/main.rs:

use actix_web::{get, web, App, HttpServer, Responder};

#[get("/")]
async fn index() -> impl Responder {
    "Hello from Rust on VPS!"
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    println!("Starting server at 0.0.0.0:8080");
    HttpServer::new(|| {
        App::new()
            .service(index)
    })
    .bind("0.0.0.0:8080")?
    .run()
    .await
}

2.2. 以发布模式编译

在本地机器或服务器上编译应用程序。为获得最佳性能,请使用 --release 标志:

cargo build --release

生成的二进制文件位于 target/release/my_rust_app(名称与包名相同)。

2.3. 将二进制文件复制到服务器(如果在本地编译)

如果您在本地机器上编译了应用程序,请通过 SCP 复制它:

scp target/release/my_rust_app root@your_server_ip:/opt/my_rust_app/

在服务器上预先创建目录 /opt/my_rust_app:

mkdir -p /opt/my_rust_app

3. 通过 systemd 配置启动

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

3.1. 创建 unit 文件

创建文件 /etc/systemd/system/my_rust_app.service:

[Unit]
Description=My Rust Web Application
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/my_rust_app
ExecStart=/opt/my_rust_app/my_rust_app
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

博客

书籍推荐