介绍
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