Introduction : Pourquoi Rust est idéal pour la production et comment le déployer
Rust est un langage de programmation système qui combine les performances du C++ avec la sécurité mémoire. Grâce à l'absence de ramasse-miettes et à la possibilité de compiler en fichier binaire natif, les applications Rust sont parfaitement adaptées au déploiement sur un VPS (Virtual Private Server). Dans cet article, nous allons parcourir le cycle complet de déploiement : de la compilation du projet à la configuration du proxy inverse et du monitoring. Vous apprendrez comment transformer votre application Rust en un service de production stable.
1. Préparation : compilation de l'application Rust pour le VPS
La première étape consiste à compiler un fichier binaire optimisé. Pour cela, vous aurez besoin de la chaîne d'outils Rust sur votre machine locale (ou sur le serveur).
1.1. Compilation en mode release
À la racine du projet, exécutez la commande :
cargo build --releaseCela créera un binaire optimisé dans le dossier target/release/. Pour les applications web utilisant actix-web ou rocket, la taille du fichier peut être de 5 à 15 Mo. Pour réduire la taille, vous pouvez ajouter dans Cargo.toml :
[profile.release]opt-level = 3lto = truecodegen-units = 1strip = true1.2. Configuration des variables d'environnement
Créez un fichier .env.prod pour la configuration de production. Exemple pour un serveur web :
DATABASE_URL=postgres://user:pass@localhost:5432/mydbRUST_LOG=infoSERVER_HOST=0.0.0.0SERVER_PORT=80801.3. Transfert des fichiers vers le VPS
Copiez le binaire, les fichiers statiques et la configuration sur le serveur. Utilisez scp ou rsync :
scp target/release/myapp user@your-vps-ip:/home/user/app/scp -r static/ user@your-vps-ip:/home/user/app/static/scp .env.prod user@your-vps-ip:/home/user/app/.env2. Configuration du serveur : systemd et Nginx
Pour le démarrage automatique de l'application au redémarrage du serveur et pour assurer la sécurité, nous utilisons systemd et Nginx.
2.1. Création du service systemd
Créez le fichier /etc/systemd/system/myapp.service :
[Unit]Description=Rust web applicationAfter=network.target
[Service]User=www-dataWorkingDirectory=/home/user/appExecStart=/home/user/app/myappRestart=alwaysRestartSec=10EnvironmentFile=/home/user/app/.env
[Install]WantedBy=multi-user.targetActivez le service :
sudo systemctl daemon-reloadsudo systemctl enable myappsudo systemctl start myappsudo systemctl status myapp2.2. Configuration de Nginx comme proxy inverse
L'application Rust écoutera sur le port 8080 (interne), tandis que Nginx acceptera les requêtes externes sur les ports 80/443. Créez la configuration /etc/nginx/sites-available/myapp :
server { listen 80; server_name your-domain.com;
location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
location /static/ { alias /home/user/app/static/; expires 30d; }}Activez le site :
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/sudo nginx -tsudo systemctl reload nginx2.3. Configuration HTTPS (optionnelle)
Installez Certbot et obtenez un certificat SSL :
sudo apt install certbot python3-certbot-nginxsudo certbot --nginx -d your-domain.com3. Gestion de la base de données et migrations
Si votre application Rust utilise une base de données (par exemple, PostgreSQL avec diesel ou sqlx), configurez-la sur le VPS.
3.1. Installation de PostgreSQL
sudo apt updatesudo apt install postgresql postgres