Despliegue de una aplicación Rust en VPS: guía paso a paso

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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_ip

Se 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/env

Verifica la instalación:

rustc --versioncargo --version


1.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 -y


2. 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 --release

El 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_app


3. 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

Blogs

Book Recommendations