Bereitstellung einer Rust-Anwendung auf einem VPS: Schritt-für-Schritt-Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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_ip

Es 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 --version


1.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 -y


2. 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 --release

Die 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_app


3. 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

Blogs

Buchempfehlungen