Introducción
\n\nHas 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\nEn 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\nComencemos.
\n\n1. Preparación del servidor y el entorno
\n\nAntes de desplegar el código, debemos preparar el "terreno". Usaremos Ubuntu 22.04 LTS, pero las instrucciones también sirven para Debian.
\n\nConexión al servidor y configuración básica
\n\nConéctate a tu VPS por SSH:
\n\nssh root@tu-ip-del-servidor\n\nActualiza los paquetes y crea un usuario (trabajar como root es una mala práctica):
\n\napt update && apt upgrade -y\nadduser deployer\nusermod -aG sudo deployer\n\nConfigura las claves SSH para el nuevo usuario para no tener que introducir la contraseña cada vez.
\n\nInstalación de Rust en el servidor
\n\nLa forma más fiable es usar el script oficial rustup. Cambia al usuario deployer y ejecuta:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\nDespués de la instalación, reinicia el shell o ejecuta:
\n\nsource $HOME/.cargo/env\n\nVerifica la versión:
\n\nrustc --version\n\nPara 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\nsudo apt install musl-tools -y\nrustup target add x86_64-unknown-linux-musl\n\n2. Compilación y transferencia del binario al servidor
\n\nEs 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\nCompilación de la versión de producción
\n\nEn tu computadora local, dentro de la carpeta del proyecto, ejecuta:
\n\ncargo build --release --target x86_64-unknown-linux-musl\n\nEsto creará un binario estáticamente enlazado sin dependencias de glibc. El tamaño será mayor, pero se ejecutará en cualquier Linux.
\n\nEjemplo de un servidor web simple con Actix-web para prueba (archivo src/main.rs):
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\nCopia al servidor
\n\nUsa scp para una copia segura:
scp ./target/x86_64-unknown-linux-musl/release/tu_proyecto deployer@tu-ip-del-servidor:/home/deployer/\n\nEn el servidor, mueve el binario a /usr/local/bin:
sudo mv /home/deployer/tu_proyecto /usr/local/bin/my-rust-app\nsudo chmod +x /usr/local/bin/my-rust-app\n\n3. Configuración de systemd para inicio automático
\n\nPara 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\nCrea el archivo de servicio:
\n\nsudo nano /etc/systemd/system/rust-app.service\n\nInserta la siguiente configuración (reemplaza deployer por tu usuario):
[Unit]\nDescription=Rust Application\nAfter=network.target\n\n[Service]\nType=simple\nUse