Introduction : pourquoi Rust est idéal pour la production
Rust n'est pas simplement un langage de programmation à la mode. Ses principaux atouts sont la sécurité mémoire, des performances élevées et un comportement prévisible. Lorsque vous écrivez en Rust, vous obtenez un fichier binaire qui peut être exécuté sur n'importe quel serveur Linux sans avoir à installer de machine virtuelle ou d'interpréteur. Cela rend le déploiement d'applications Rust sur un VPS incroyablement simple et efficace.
Dans cet article, nous allons détailler le processus complet : de la compilation du projet à la configuration de l'environnement de production avec Nginx et systemd. Vous apprendrez à compiler correctement l'application, à configurer le démarrage automatique et à assurer la sécurité.
Préparation du VPS et de l'environnement
Choix et configuration du serveur
Pour déployer une application Rust, n'importe quel VPS sous Linux convient (Ubuntu 22.04 LTS est le choix optimal). Configuration minimale requise : 1 vCPU, 1 Go de RAM, 20 Go de SSD. Cela est suffisant pour la plupart des services web en Rust.
La première étape consiste à se connecter au serveur via SSH :
ssh root@votre-adresse-ip
Mettez à jour les paquets et installez les outils nécessaires :
apt update && apt upgrade -y
apt install curl git build-essential pkg-config libssl-dev -y
Installation de Rust sur le serveur
Bien que nous compilions le binaire localement, il est parfois pratique de compiler directement sur le serveur. Installez Rust :
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
Vérifiez l'installation :
rustc --version
cargo --version
Compilation de l'application Rust pour la production
Optimisation de la compilation
Pour la production, vous devez compiler l'application avec le flag --release. Cela active les optimisations qui réduisent la taille du binaire et accélèrent son exécution. Ajoutez les paramètres suivants dans Cargo.toml :
[profile.release]
opt-level = 3
lto = true
codegen-units = 1
strip = true
- opt-level = 3 — optimisation maximale de la vitesse
- lto = true — Link Time Optimization, réduit la taille et accélère
- codegen-units = 1 — augmente le temps de compilation mais améliore l'optimisation
- strip = true — supprime les informations de débogage, réduisant la taille du binaire de 30 à 50 %
Compilation du binaire
Exécutez la commande sur votre machine locale (ou sur le serveur CI) :
cargo build --release
Le binaire prêt se trouve dans target/release/nom-du-projet. Sa taille doit être petite — de 2 à 10 Mo pour une application web typique.
Copie sur le serveur
Utilisez scp ou rsync pour transférer le fichier :
scp target/release/votre-application root@votre-adresse-ip:/opt/app/
Créez le répertoire /opt/app sur le serveur à l'avance :
mkdir -p /opt/app
mkdir -p /opt/app/static # s'il y a des fichiers statiques
Configuration de systemd pour le démarrage automatique
Création du service
Systemd est le gestionnaire de services standard sous Linux. Il démarrera automatiquement votre application après un redémarrage du serveur et la relancera en cas de crash.
Créez le fichier de service :
nano /etc/systemd/system/rust-app.service
Ajoutez la configuration :
[Unit]
Description=Rust Web Application
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/opt/app
ExecStart=/opt/app/votre-application
Restart=always
RestartSec=5
Environment=RUST_LOG=info
Environment=DATABASE_URL=postgres://user:pass@localhost/dbname
[Install]
WantedBy=multi-user.target
Paramètres importants :
- User — exécutez sous un utilisateur non privilégié
www-data - Restart=always — redémarrage automatique