Despliegue de aplicación Rust en VPS: paso a paso de la A a la Z

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

\n\n

Has escrito una aplicación genial en Rust. Es rápida, segura y no se cae. Pero, ¿cómo hacer que funcione 24/7 en un servidor remoto y esté disponible para los usuarios? Desplegar una aplicación Rust en un VPS (Virtual Private Server) es un proceso que incluye la compilación del binario, la configuración del entorno, la ejecución como servicio del sistema y, a menudo, la instalación de un reverse proxy.

\n\n

En este artículo, recorreremos todo el camino desde cero hasta una aplicación Rust completamente funcional, desplegada en un VPS con Ubuntu. Aprenderás cómo preparar el servidor, compilar el proyecto, configurar el inicio automático y garantizar la seguridad. Esta guía es adecuada tanto para servidores web (Actix-web, Axum, Rocket) como para cualquier otro demonio en Rust.

\n\n

Comencemos.

\n\n

1. Preparación del servidor y el entorno

\n\n

Antes de desplegar el código, debemos preparar el "terreno". Usaremos Ubuntu 22.04 LTS, pero las instrucciones también sirven para Debian.

\n\n

Conexión al servidor y configuración básica

\n\n

Conéctate a tu VPS por SSH:

\n\n
ssh root@tu-ip-del-servidor
\n\n

Actualiza los paquetes y crea un usuario (trabajar como root es una mala práctica):

\n\n
apt update && apt upgrade -y\nadduser deployer\nusermod -aG sudo deployer
\n\n

Configura las claves SSH para el nuevo usuario para no tener que introducir la contraseña cada vez.

\n\n

Instalación de Rust en el servidor

\n\n

La forma más fiable es usar el script oficial rustup. Cambia al usuario deployer y ejecuta:

\n\n
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
\n\n

Después de la instalación, reinicia el shell o ejecuta:

\n\n
source $HOME/.cargo/env
\n\n

Verifica la versión:

\n\n
rustc --version
\n\n

Para la compilación en producción, necesitaremos enlace estático (para que el binario funcione en cualquier Linux sin bibliotecas adicionales). Instala musl-tools:

\n\n
sudo apt install musl-tools -y\nrustup target add x86_64-unknown-linux-musl
\n\n

2. Compilación y transferencia del binario al servidor

\n\n

Es mejor compilar la aplicación en tu máquina local (o en CI/CD) y luego copiar el binario listo al servidor. Esto es más rápido y no sobrecarga el VPS.

\n\n

Compilación de la versión de producción

\n\n

En tu computadora local, dentro de la carpeta del proyecto, ejecuta:

\n\n
cargo build --release --target x86_64-unknown-linux-musl
\n\n

Esto creará un binario estáticamente enlazado sin dependencias de glibc. El tamaño será mayor, pero se ejecutará en cualquier Linux.

\n\n

Ejemplo de un servidor web simple con Actix-web para prueba (archivo src/main.rs):

\n\n
use actix_web::{web, App, HttpServer, Responder};\n\nasync fn hello() -> impl Responder {\n    "Hello from Rust on VPS!"\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new().route("/", web::get().to(hello))\n    })\n    .bind("0.0.0.0:8080")?\n    .run()\n    .await\n}
\n\n

Copia al servidor

\n\n

Usa scp para una copia segura:

\n\n
scp ./target/x86_64-unknown-linux-musl/release/tu_proyecto deployer@tu-ip-del-servidor:/home/deployer/
\n\n

En el servidor, mueve el binario a /usr/local/bin:

\n\n
sudo mv /home/deployer/tu_proyecto /usr/local/bin/my-rust-app\nsudo chmod +x /usr/local/bin/my-rust-app
\n\n

3. Configuración de systemd para inicio automático

\n\n

Para que la aplicación se inicie al arrancar el sistema, se reinicie después de un fallo y funcione en segundo plano, crearemos un servicio systemd.

\n\n

Crea el archivo de servicio:

\n\n
sudo nano /etc/systemd/system/rust-app.service
\n\n

Inserta la siguiente configuración (reemplaza deployer por tu usuario):

\n\n
[Unit]\nDescription=Rust Application\nAfter=network.target\n\n[Service]\nType=simple\nUse                

Blogs

Book Recommendations