Introducción
Rust es un lenguaje de programación de sistemas conocido por su rendimiento y seguridad de memoria. Sin embargo, escribir una aplicación es solo la mitad del trabajo. Para que tu proyecto esté disponible para los usuarios en internet, es necesario desplegarlo (hacer deploy) en un servidor. En este artículo, veremos el proceso paso a paso para desplegar una aplicación Rust en un VPS (Virtual Private Server).
Usaremos un servidor web típico basado en el framework actix-web, configuraremos el entorno, compilaremos una build de release, ejecutaremos la aplicación como un servicio systemd y configuraremos un proxy inverso Nginx con certificado SSL. Siguiendo esta guía, podrás desplegar cualquier aplicación Rust en un servidor remoto con Linux.
1. Preparación del servidor y el entorno
1.1. Conexión al servidor
Lo primero es conectarte a tu VPS por SSH:
ssh root@your_server_ipSe recomienda crear un usuario separado con permisos limitados (sudo) por seguridad, pero para simplificar, en esta guía trabajaremos como root.
1.2. Instalación de Rust en el servidor
Aunque podemos compilar la aplicación localmente y simplemente copiar el binario, es más conveniente instalar Rust en el servidor para una posible recompilación para la arquitectura objetivo. Usamos el script oficial:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shsource $HOME/.cargo/envVerifica la instalación:
rustc --versioncargo --version1.3. Instalación de dependencias del sistema
Para compilar algunos crates (por ejemplo, openssl) pueden ser necesarias bibliotecas del sistema. Instálalas:
apt updateapt install build-essential pkg-config libssl-dev git -y2. Compilación y preparación de la aplicación
2.1. Ejemplo de un servidor web simple con actix-web
Crearemos una aplicación mínima. Si ya tienes un proyecto, omite este paso.
Cargo.toml:
[package]name = "my_rust_app"version = "0.1.0"edition = "2021"
[dependencies]actix-web = "4"serde = { version = "1", features = ["derive"] }src/main.rs:
use actix_web::{get, web, App, HttpServer, Responder};
#[get("/")]async fn index() -> impl Responder { "Hello from Rust on VPS!"}
#[actix_web::main]async fn main() -> std::io::Result<()> { println!("Starting server at 0.0.0.0:8080"); HttpServer::new(|| { App::new() .service(index) }) .bind("0.0.0.0:8080")? .run() .await}2.2. Compilación en modo release
Compila la aplicación en tu máquina local o directamente en el servidor. Para máximo rendimiento, usa el flag --release:
cargo build --releaseEl binario resultante estará en target/release/my_rust_app (el nombre coincide con el nombre del paquete).
2.3. Copiar el binario al servidor (si compilaste localmente)
Si compilaste la aplicación en tu máquina local, cópiala mediante SCP:
scp target/release/my_rust_app root@your_server_ip:/opt/my_rust_app/En el servidor, crea el directorio /opt/my_rust_app de antemano:
mkdir -p /opt/my_rust_app3. Configuración del inicio mediante systemd
Para que la aplicación se inicie automáticamente al arrancar el sistema y se reinicie en caso de fallo, crearemos un servicio systemd.
3.1. Creación del archivo unit
Crea el archivo /etc/systemd/system/my_rust_app.service:
[Unit]Description=My Rust Web ApplicationAfter=network.target
[Service]Type=simpleUser=rootWorkingDirectory=/opt/my_rust_appExecStart=/opt/my_rust_app/my_rust_appRestart=on-failureRestartSec=10
[Install]WantedBy=multi-user.target