Introduction
\n\nVous avez écrit une superbe application en Rust. Elle est rapide, sécurisée et ne plante pas. Mais comment faire pour qu'elle fonctionne 24h/24 et 7j/7 sur un serveur distant et soit accessible aux utilisateurs ? Le déploiement d'une application Rust sur un VPS (Virtual Private Server) est un processus qui comprend la compilation du binaire, la configuration de l'environnement, le lancement en tant que service système et, souvent, la mise en place d'un reverse proxy.
\n\nDans cet article, nous allons parcourir tout le chemin, de zéro à une application Rust entièrement fonctionnelle, déployée sur un VPS avec Ubuntu. Vous apprendrez à préparer le serveur, à compiler le projet, à configurer le démarrage automatique et à assurer la sécurité. Ce guide convient aussi bien pour les serveurs web (Actix-web, Axum, Rocket) que pour tout autre démon en Rust.
\n\nCommençons.
\n\n1. Préparation du serveur et de l'environnement
\n\nAvant de déployer le code, il faut préparer le terrain. Nous utiliserons Ubuntu 22.04 LTS, mais les instructions conviennent également pour Debian.
\n\nConnexion au serveur et configuration de base
\n\nConnectez-vous à votre VPS via SSH :
\n\nssh root@votre-ip-serveur\n\nMettez à jour les paquets et créez un utilisateur (travailler en tant que root est une mauvaise pratique) :
\n\napt update && apt upgrade -y\nadduser deployer\nusermod -aG sudo deployer\n\nConfigurez les clés SSH pour le nouvel utilisateur afin de ne pas avoir à saisir le mot de passe à chaque fois.
\n\nInstallation de Rust sur le serveur
\n\nLa méthode la plus fiable est d'utiliser le script officiel rustup. Basculez sur l'utilisateur deployer et exécutez :
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\nAprès l'installation, rechargez le shell ou exécutez :
\n\nsource $HOME/.cargo/env\n\nVérifiez la version :
\n\nrustc --version\n\nPour une compilation de production, nous aurons besoin d'une liaison statique (afin que le binaire fonctionne sur n'importe quel Linux sans bibliothèques supplémentaires). Installez musl-tools :
\n\nsudo apt install musl-tools -y\nrustup target add x86_64-unknown-linux-musl\n\n2. Compilation et transfert du binaire sur le serveur
\n\nIl est préférable de compiler l'application sur votre machine locale (ou dans un CI/CD), puis de copier le binaire prêt sur le serveur. C'est plus rapide et ne charge pas le VPS.
\n\nCompilation de la version de production
\n\nSur votre ordinateur local, dans le dossier du projet, exécutez :
\n\ncargo build --release --target x86_64-unknown-linux-musl\n\nCela créera un binaire lié statiquement, sans dépendances à glibc. La taille sera plus grande, mais il se lancera sur n'importe quel Linux.
\n\nExemple d'un serveur web simple avec Actix-web pour le test (fichier src/main.rs) :
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\nCopie sur le serveur
\n\nUtilisez scp pour une copie sécurisée :
scp ./target/x86_64-unknown-linux-musl/release/votre_projet deployer@votre-ip-serveur:/home/deployer/\n\nSur le serveur, déplacez le binaire dans /usr/local/bin :
sudo mv /home/deployer/votre_projet /usr/local/bin/my-rust-app\nsudo chmod +x /usr/local/bin/my-rust-app\n\n3. Configuration de systemd pour le démarrage automatique
\n\nPour que l'application se lance au démarrage du système, redémarre après une panne et fonctionne en arrière-plan, nous allons créer un service systemd.
\n\nCréez le fichier de service :
\n\nsudo nano /etc/systemd/system/rust-app.service\n\nInsérez la configuration suivante (remplacez deployer par votre utilisateur) :
[Unit]\nDescription=Rust Application\nAfter=network.target\n\n[Service]\nType=simple\nUse