Déploiement d'une application Rust sur VPS : niveau avancé pas à pas

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : pourquoi un déploiement avancé de Rust sur VPS est une nécessité

\n

Le développement en Rust n'est que la moitié du travail. La seconde moitié, tout aussi importante, est un déploiement fiable et sécurisé. Les méthodes de base, comme la compilation manuelle et l'exécution via cargo run, ne conviennent pas à la production. Au niveau avancé, l'automatisation, l'isolation des processus, la surveillance et la garantie d'une haute disponibilité sont nécessaires.

\n

Dans cet article, nous allons voir comment configurer le déploiement d'une application Rust sur VPS en utilisant Docker, CI/CD (GitHub Actions), systemd pour le démarrage automatique et Nginx comme proxy inverse. Tous les exemples de code sont donnés en Rust et Bash.

\n\n

1. Préparation du VPS et de l'environnement

\n

1.1. Configuration de base du serveur

\n

Supposons que vous ayez un VPS sous Ubuntu 22.04 LTS. Commencez par mettre à jour les paquets et installer les outils nécessaires :

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

Installez Rust via rustup :

\n
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\nsource $HOME/.cargo/env\nrustc --version  # vérification
\n

1.2. Installation de Docker

\n

Docker assurera l'isolation et la reproductibilité de l'environnement :

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

1.3. Installation de Nginx

\n

Nginx agira comme proxy inverse et équilibreur de charge :

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

2. Conteneurisation de l'application Rust avec Docker

\n

2.1. Construction multi-étapes (multi-stage build)

\n

Pour réduire la taille de l'image, utilisez une construction multi-étapes. Créez un Dockerfile à la racine du projet :

\n
# Étape de construction\nFROM rust:1.75-slim-bookworm AS builder\nWORKDIR /app\nCOPY Cargo.toml Cargo.lock ./\nCOPY src ./src\nRUN cargo build --release\n\n# Étape finale\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

Ici, my_app est le nom de votre fichier binaire. Assurez-vous que Cargo.toml contient name = "my_app".

\n

2.2. Construction et exécution du conteneur

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

Vérifiez que l'application répond :

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

3. Configuration du démarrage automatique et de la surveillance (systemd + Docker Compose)

\n

3.1. Docker Compose pour la gestion des services

\n

Créez un fichier 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

Notez que ports est lié à 127.0.0.1 afin que les requêtes externes passent uniquement par Nginx.

\n

3.2. Unité Systemd pour la gestion du service

\n

Créez le fichier /etc/systemd/system/my_app.service :

\n
[Unit]\nDescription=Mon application Rust\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

Activez et démarrez :

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

4. Configuration de Nginx

Blogs

Book Recommendations