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

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: Warum fortgeschrittenes Deployment von Rust auf einem VPS notwendig ist

\n

Die Entwicklung in Rust ist nur die eine Hälfte der Arbeit. Die zweite, nicht weniger wichtige Hälfte ist das zuverlässige und sichere Deployment. Grundlegende Methoden wie manuelle Kompilierung und Start über cargo run sind für die Produktion ungeeignet. Auf fortgeschrittenem Niveau sind Automatisierung, Prozessisolierung, Überwachung und die Gewährleistung hoher Verfügbarkeit erforderlich.

\n

In diesem Artikel werden wir behandeln, wie das Deployment einer Rust-Anwendung auf einem VPS mit Docker, CI/CD (GitHub Actions), systemd für den Autostart und Nginx als Reverse Proxy eingerichtet wird. Alle Codebeispiele sind in Rust und Bash gegeben.

\n\n

1. Vorbereitung des VPS und der Umgebung

\n

1.1. Grundlegende Serverkonfiguration

\n

Angenommen, Sie haben einen VPS mit Ubuntu 22.04 LTS. Aktualisieren Sie zunächst die Pakete und installieren Sie die notwendigen Werkzeuge:

\n
sudo apt update && sudo apt upgrade -y\nsudo apt install -y curl git build-essential pkg-config libssl-dev
\n

Installieren Sie Rust über rustup:

\n
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\nsource $HOME/.cargo/env\nrustc --version  # Überprüfung
\n

1.2. Installation von Docker

\n

Docker sorgt für Isolierung und Reproduzierbarkeit der Umgebung:

\n
sudo apt install -y docker.io\nsudo systemctl enable --now docker\nsudo usermod -aG docker $USER\nnewgrp docker
\n

1.3. Installation von Nginx

\n

Nginx fungiert als Reverse Proxy und Lastverteiler:

\n
sudo apt install -y nginx\nsudo systemctl enable --now nginx
\n\n

2. Containerisierung der Rust-Anwendung mit Docker

\n

2.1. Multi-Stage-Build

\n

Um die Image-Größe zu reduzieren, verwenden wir einen Multi-Stage-Build. Erstellen Sie eine Dockerfile im Projektstammverzeichnis:

\n
# Build-Stufe\nFROM rust:1.75-slim-bookworm AS builder\nWORKDIR /app\nCOPY Cargo.toml Cargo.lock ./\nCOPY src ./src\nRUN cargo build --release\n\n# Finale Stufe\nFROM debian:bookworm-slim\nRUN apt update && apt install -y ca-certificates && rm -rf /var/lib/apt/lists/*\nWORKDIR /app\nCOPY --from=builder /app/target/release/my_app .\nEXPOSE 8080\nCMD ["./my_app"]
\n

Hier ist my_app der Name Ihrer Binärdatei. Stellen Sie sicher, dass in Cargo.toml name = "my_app" angegeben ist.

\n

2.2. Build und Start des Containers

\n
docker build -t my_app:latest .\ndocker run -d --name my_app -p 8080:8080 my_app:latest
\n

Überprüfen Sie, ob die Anwendung antwortet:

\n
curl http://localhost:8080
\n\n

3. Einrichtung von Autostart und Überwachung (systemd + Docker Compose)

\n

3.1. Docker Compose zur Verwaltung der Dienste

\n

Erstellen Sie eine docker-compose.yml:

\n
version: '3.8'\nservices:\n  app:\n    image: my_app:latest\n    restart: always\n    ports:\n      - "127.0.0.1:8080:8080"\n    environment:\n      - RUST_LOG=info\n    healthcheck:\n      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]\n      interval: 30s\n      timeout: 10s\n      retries: 3
\n

Beachten Sie: ports ist an 127.0.0.1 gebunden, sodass externe Anfragen nur über Nginx erfolgen.

\n

3.2. Systemd-Unit zur Verwaltung des Dienstes

\n

Erstellen Sie die Datei /etc/systemd/system/my_app.service:

\n
[Unit]\nDescription=My Rust Application\nAfter=docker.service\nRequires=docker.service\n\n[Service]\nType=oneshot\nRemainAfterExit=yes\nWorkingDirectory=/opt/my_app\nExecStart=/usr/bin/docker compose up -d\nExecStop=/usr/bin/docker compose down\nUser=deploy\nGroup=deploy\n\n[Install]\nWantedBy=multi-user.target
\n

Aktivieren und starten Sie:

\n
sudo systemctl daemon-reload\nsudo systemctl enable my_app\nsudo systemctl start my_app
\n\n

4. Einrichtung von Nginx

Blogs

Buchempfehlungen