¿Por qué autoalojar Rails en un VPS?
Una aplicación Rails en producción combina varios procesos: el servidor web Puma, workers Sidekiq para las tareas asíncronas, PostgreSQL y Redis. Las plataformas gestionadas facturan cada dyno o worker por separado, lo que dispara la factura en cuanto la aplicación crece. En un VPS, todos estos procesos conviven en un mismo servidor que usted controla: ajusta el número de hilos y de workers de Puma, lanza tantos workers Sidekiq como permita la RAM, y gestiona la precompilación de los assets y la caché. Con Rails 7 y posteriores, la integración nativa de Propshaft, Solid Queue y Solid Cache simplifica todavía más el autoalojamiento. Mantiene un coste fijo y una stack totalmente transparente.
Beneficios concretos de un Rails autoalojado
- Puma y Sidekiq en el mismo VPS, sin facturar cada worker por separado.
- Ajuste del número de hilos y de workers de Puma según los núcleos y la RAM.
- Tareas en segundo plano ilimitadas con Sidekiq/Redis o Solid Queue.
- PostgreSQL bajo control: índices, copias de seguridad
pg_dumpy ajuste de las conexiones. - Precompilación de los assets y caché de Rails gestionadas localmente, sin coste añadido.
- Coste fijo y previsible, ideal para los SaaS y las aplicaciones de negocio en crecimiento.
Requisitos de hardware y software
Rails consume más RAM que la media por culpa de los workers de Puma y Sidekiq: apunte a 2 GB como mínimo, y a 4 GB en cuanto lance varios workers o añada Redis y Elasticsearch. Instale Ruby 3.2+ mediante rbenv o asdf, o utilice una imagen Docker ruby:3.3-slim. Prevea PostgreSQL 15, Redis para Sidekiq y la caché, Node.js si utiliza un bundler JS, y Bundler. Nginx actúa como frontal para el TLS y los assets estáticos. Se requiere un dominio apuntado al VPS. Defina RAILS_ENV=production y genere una SECRET_KEY_BASE.
Desplegar Rails paso a paso
Preparar el servidor y la aplicación
Por SSH, instale Ruby 3.3, PostgreSQL y Redis (o Docker). Clone el repositorio y configure las variables:
DATABASE_URL,REDIS_URL,RAILS_MASTER_KEYySECRET_KEY_BASE. Ejecutebundle install --without development test.Precompilar los assets y migrar
Ejecute
RAILS_ENV=production bin/rails assets:precompiley despuésbin/rails db:migrate. Con Rails 7+, Propshaft y el importmap simplifican el pipeline de assets sin un build de Node complejo.Lanzar Puma
Arranque el servidor con
bundle exec puma -C config/puma.rb, ajustandoWEB_CONCURRENCY(workers) yRAILS_MAX_THREADSen el entorno. Haga que Puma escuche en un socket Unix para obtener mejor rendimiento con Nginx, y gestione el proceso mediante systemd.Arrancar los workers Sidekiq
Cree un servicio systemd que ejecute
bundle exec sidekiq -e production -C config/sidekiq.yml, con reinicio automático. Ajuste el número de hilos de Sidekiq según la carga de tareas y la memoria disponible.Configurar Nginx y el SSL
Apunte Nginx al socket de Puma con
upstreamyproxy_pass, sirvapublic/assetsdirectamente con una caché larga y luego obtenga un certificado Let's Encrypt con Certbot paravotredomaine.com. Fuerce el HTTPS y la renovación automática.Automatizar los despliegues
Ponga en marcha un script o Kamal/Capistrano que encadene
git pull,bundle install,db:migrate,assets:precompiley el reinicio de Puma y Sidekiq. El despliegue atómico con enlaces simbólicos permite volver atrás al instante si surge un problema.
Vigile la huella de memoria de Puma: los procesos Ruby se hinchan con el tiempo por culpa de la fragmentación de memoria. Active jemalloc como asignador (mediante LD_PRELOAD) para reducir de forma significativa la RAM que consumen los workers, y configure un reinicio periódico de los workers de Puma. En un VPS donde la RAM es el recurso más limitante para Rails, este único ajuste puede evitar tener que subir de gama.
Desplegar Rails con un clic desde el Marketplace
El Marketplace de ServOrbit ofrece una plantilla Rails Stack que configura automáticamente Ruby 3.2, Puma, Nginx, PostgreSQL y Redis en su VPS Ubuntu 24.04 en unos minutos. Elija su VPS, seleccione la plantilla y obtendrá un entorno de producción listo para recibir su aplicación Rails — sin ninguna línea de comandos de sistema. El aprovisionamiento instala toda la cadena de herramientas; solo queda clonar su repositorio, ejecutar bundle install, db:migrate y assets:precompile, y después arrancar Puma.