Bereitstellung einer Rust-Anwendung auf VPS: Schritt für Schritt von A bis Z

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

\n\n

Sie haben eine tolle Anwendung in Rust geschrieben. Sie ist schnell, sicher und stürzt nicht ab. Aber wie sorgen Sie dafür, dass sie 24/7 auf einem entfernten Server läuft und für Benutzer verfügbar ist? Die Bereitstellung einer Rust-Anwendung auf einem VPS (Virtual Private Server) ist ein Prozess, der die Kompilierung der Binärdatei, die Einrichtung der Umgebung, den Start als Systemdienst und oft die Installation eines Reverse Proxy umfasst.

\n\n

In diesem Artikel gehen wir den gesamten Weg von Null bis zu einer voll funktionsfähigen Rust-Anwendung, die auf einem VPS mit Ubuntu bereitgestellt wird. Sie erfahren, wie Sie den Server vorbereiten, das Projekt erstellen, den automatischen Start konfigurieren und die Sicherheit gewährleisten. Diese Anleitung eignet sich sowohl für Webserver (Actix-web, Axum, Rocket) als auch für andere Rust-Daemons.

\n\n

Lassen Sie uns beginnen.

\n\n

1. Server- und Umgebungsvorbereitung

\n\n

Bevor Sie Code bereitstellen, müssen Sie den „Boden“ vorbereiten. Wir verwenden Ubuntu 22.04 LTS, aber die Anweisungen gelten auch für Debian.

\n\n

Verbindung zum Server und grundlegende Einrichtung

\n\n

Verbinden Sie sich per SSH mit Ihrem VPS:

\n\n
ssh root@ihre-server-ip
\n\n

Aktualisieren Sie die Pakete und erstellen Sie einen Benutzer (als root zu arbeiten ist keine gute Praxis):

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

Richten Sie SSH-Schlüssel für den neuen Benutzer ein, um nicht jedes Mal ein Passwort eingeben zu müssen.

\n\n

Installation von Rust auf dem Server

\n\n

Die zuverlässigste Methode ist die Verwendung des offiziellen Skripts rustup. Wechseln Sie zum Benutzer deployer und führen Sie Folgendes aus:

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

Starten Sie nach der Installation die Shell neu oder führen Sie Folgendes aus:

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

Überprüfen Sie die Version:

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

Für die Produktionserstellung benötigen wir statisches Linken (damit die Binärdatei auf jedem Linux ohne zusätzliche Bibliotheken funktioniert). Installieren Sie musl-tools:

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

2. Erstellung und Übertragung der Binärdatei auf den Server

\n\n

Es ist besser, die Anwendung auf Ihrem lokalen Rechner (oder in CI/CD) zu erstellen und dann die fertige Binärdatei auf den Server zu kopieren. Das ist schneller und belastet den VPS nicht.

\n\n

Erstellung der Produktionsversion

\n\n

Führen Sie auf Ihrem lokalen Computer im Projektordner Folgendes aus:

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

Dies erstellt eine statisch gelinkte Binärdatei ohne Abhängigkeiten von glibc. Die Größe wird größer sein, aber sie wird auf jedem Linux laufen.

\n\n

Beispiel eines einfachen Webservers mit Actix-web zum Testen (Datei 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

Kopieren auf den Server

\n\n

Verwenden Sie scp zum sicheren Kopieren:

\n\n
scp ./target/x86_64-unknown-linux-musl/release/ihr_projekt deployer@ihre-server-ip:/home/deployer/
\n\n

Verschieben Sie die Binärdatei auf dem Server nach /usr/local/bin:

\n\n
sudo mv /home/deployer/ihr_projekt /usr/local/bin/my-rust-app\nsudo chmod +x /usr/local/bin/my-rust-app
\n\n

3. Konfiguration von systemd für den automatischen Start

\n\n

Damit die Anwendung beim Systemstart startet, nach einem Absturz neu startet und im Hintergrund läuft, erstellen wir einen systemd-Dienst.

\n\n

Erstellen Sie die Dienstdatei:

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

Fügen Sie die folgende Konfiguration ein (ersetzen Sie deployer durch Ihren Benutzer):

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

Blogs

Buchempfehlungen