Introducción: Por qué Rust es ideal para producción y cómo desplegarlo
Rust es un lenguaje de programación de sistemas que combina el rendimiento de C++ con la seguridad de la memoria. Gracias a la ausencia de un recolector de basura y la posibilidad de compilar en un archivo binario nativo, las aplicaciones Rust son ideales para el despliegue en VPS (Virtual Private Server). En este artículo, recorreremos el ciclo completo de despliegue: desde la compilación del proyecto hasta la configuración del proxy inverso y el monitoreo. Aprenderá cómo convertir su aplicación Rust en un servicio de producción estable.
1. Preparación: compilación de la aplicación Rust para VPS
El primer paso es compilar un archivo binario optimizado. Para ello, necesitaremos el toolchain de Rust en su máquina local (o en el servidor).
1.1. Compilación en modo release
En la raíz del proyecto, ejecute el comando:
cargo build --releaseEsto creará un binario optimizado en la carpeta target/release/. Para aplicaciones web con actix-web o rocket, el tamaño del archivo puede ser de 5-15 MB. Para reducir el tamaño, puede agregar en Cargo.toml:
[profile.release]opt-level = 3lto = truecodegen-units = 1strip = true1.2. Configuración de variables de entorno
Cree un archivo .env.prod para la configuración de producción. Ejemplo para un servidor web:
DATABASE_URL=postgres://user:pass@localhost:5432/mydbRUST_LOG=infoSERVER_HOST=0.0.0.0SERVER_PORT=80801.3. Transferencia de archivos al VPS
Copie el binario, los archivos estáticos y la configuración al servidor. Use scp o rsync:
scp target/release/myapp user@your-vps-ip:/home/user/app/scp -r static/ user@your-vps-ip:/home/user/app/static/scp .env.prod user@your-vps-ip:/home/user/app/.env2. Configuración del servidor: systemd y Nginx
Para el inicio automático de la aplicación al reiniciar el servidor y para garantizar la seguridad, usamos systemd y Nginx.
2.1. Creación del servicio systemd
Cree el archivo /etc/systemd/system/myapp.service:
[Unit]Description=Rust web applicationAfter=network.target
[Service]User=www-dataWorkingDirectory=/home/user/appExecStart=/home/user/app/myappRestart=alwaysRestartSec=10EnvironmentFile=/home/user/app/.env
[Install]WantedBy=multi-user.targetActive el servicio:
sudo systemctl daemon-reloadsudo systemctl enable myappsudo systemctl start myappsudo systemctl status myapp2.2. Configuración de Nginx como proxy inverso
La aplicación Rust escuchará en el puerto 8080 (interno), mientras que Nginx recibirá las solicitudes externas en el puerto 80/443. Cree la configuración /etc/nginx/sites-available/myapp:
server { listen 80; server_name your-domain.com;
location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
location /static/ { alias /home/user/app/static/; expires 30d; }}Active el sitio:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/sudo nginx -tsudo systemctl reload nginx2.3. Configuración de HTTPS (opcional)
Instale Certbot y obtenga un certificado SSL:
sudo apt install certbot python3-certbot-nginxsudo certbot --nginx -d your-domain.com3. Gestión de base de datos y migraciones
Si su aplicación Rust utiliza una base de datos (por ejemplo, PostgreSQL con diesel o sqlx), configúrela en el VPS.
3.1. Instalación de PostgreSQL
sudo apt updatesudo apt install postgresql postgres