Einleitung
Rust ist eine systemnahe Programmiersprache, die für ihre Leistung und Speichersicherheit bekannt ist. Allerdings ist das Schreiben einer Anwendung nur die halbe Miete. Damit Ihr Projekt für Benutzer im Internet zugänglich wird, muss es auf einem Server bereitgestellt (gedeployt) werden. In diesem Artikel betrachten wir den schrittweisen Prozess des Deployments einer Rust-Anwendung auf einem VPS (Virtual Private Server).
Wir werden einen typischen Webserver auf Basis des Frameworks actix-web verwenden, die Umgebung einrichten, einen Release-Build kompilieren, die Anwendung als systemd-Dienst starten und einen Reverse-Proxy-Server Nginx mit SSL-Zertifikat konfigurieren. Wenn Sie dieser Anleitung folgen, können Sie jede Rust-Anwendung auf einem entfernten Server mit Linux bereitstellen.
1. Server- und Umgebungsvorbereitung
1.1. Verbindung zum Server herstellen
Stellen Sie zunächst eine SSH-Verbindung zu Ihrem VPS her:
ssh root@your_server_ipEs wird empfohlen, aus Sicherheitsgründen einen separaten Benutzer mit eingeschränkten Rechten (sudo) zu erstellen, aber der Einfachheit halber arbeiten wir in dieser Anleitung als root.
1.2. Rust auf dem Server installieren
Obwohl wir die Anwendung lokal kompilieren und einfach die Binärdatei kopieren können, ist es praktischer, Rust auf dem Server zu installieren, um eine mögliche Neukompilierung für die Zielarchitektur zu ermöglichen. Verwenden Sie das offizielle Skript:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shsource $HOME/.cargo/envÜberprüfen Sie die Installation:
rustc --versioncargo --version1.3. Systemabhängigkeiten installieren
Für die Kompilierung einiger Crates (z. B. openssl) können Systembibliotheken erforderlich sein. Installieren Sie diese:
apt updateapt install build-essential pkg-config libssl-dev git -y2. Anwendung kompilieren und vorbereiten
2.1. Beispiel eines einfachen Webservers mit actix-web
Erstellen wir eine minimale Anwendung. Wenn Sie bereits ein Projekt haben, überspringen Sie diesen Schritt.
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. Kompilierung im Release-Modus
Kompilieren Sie die Anwendung auf Ihrem lokalen Rechner oder direkt auf dem Server. Verwenden Sie für maximale Leistung das Flag --release:
cargo build --releaseDie fertige Binärdatei befindet sich in target/release/my_rust_app (der Name entspricht dem Paketnamen).
2.3. Binärdatei auf den Server kopieren (falls lokal kompiliert)
Wenn Sie die Anwendung lokal kompiliert haben, kopieren Sie sie per SCP:
scp target/release/my_rust_app root@your_server_ip:/opt/my_rust_app/Erstellen Sie das Verzeichnis /opt/my_rust_app vorher auf dem Server:
mkdir -p /opt/my_rust_app3. Startkonfiguration über systemd
Damit die Anwendung automatisch beim Systemstart startet und bei einem Absturz neu gestartet wird, erstellen wir einen systemd-Dienst.
3.1. Unit-Datei erstellen
Erstellen Sie die Datei /etc/systemd/system/my_rust_app.service:
[Unit]Description=My Rust Web ApplicationAfter=network.target
[Service]Type=simpleUser=rootWorkingDirectory=/opt/my_rust_appExecStart=/opt/my_rust_app/my_rust_appRestart=on-failureRestartSec=10
[Install]WantedBy=multi-user.target