Notas sobre construir una plataforma de despliegue.
Mecanismos que teníamos que resolver bien, decisiones que teníamos que defender, y migraciones que hemos hecho más de una vez.
Una app más Postgres: lo que cuesta de verdad, plataforma por plataforma
Los precios publicados para correr una app pequeña con base de datos, comparados directamente — incluyendo qué estás rentando de verdad versus qué estás rentando más un sobreprecio.
Dejar que un agente de IA despliegue tu app, de forma segura
Un servidor MCP delimitado para Claude Code, Cursor y cualquier otro cliente MCP: qué puede hacer solo, qué no puede, y por qué las acciones destructivas esperan a una persona.
Failover automático de Postgres, self-hosted
Cómo es en la práctica una promoción de standby de Postgres en vivo en tus propios servidores: la ventana de detección de 3 minutos, qué se copia, qué no, y cómo se compara con una base de datos administrada.
Plausible analytics self-hosted, en un solo comando
No tenía idea quién leía realmente railyard.run. Este es el stack de Plausible con un clic que lanzamos en nuestra propia plataforma para resolverlo, y lo que realmente tomó.
Qué pasa cuando tu app construida con IA llega a producción
Un agente puede escribir una app funcional en una tarde. No sabe que tus secretos no deberían estar en texto plano, ni que un token de despliegue no debería poder borrar cosas. La plataforma de abajo tiene que saberlo en su lugar.
Desplegar una app de Next.js sin una cuenta de Vercel
Next.js se detecta y construye solo en Railyard igual que en cualquier otro lado — la diferencia es que el servidor de abajo es tuyo, no una factura por request.
Canary despliegues que de verdad vigilan la tasa de error, no solo un timer
Envía el 5% del tráfico a una release nueva, compárala contra el resto de la app y déjala revertirse sola si sube la tasa de 5xx — en servidores que son tuyos, no en el botón de canary de una plataforma administrada.
La línea de tiempo del PaaS self-hosted, y de dónde viene realmente la idea
Cloud 66 demostró 'nunca hospedes la app del cliente' en 2012. Esta es la genealogía real desde Heroku hasta Fly, Render, Railway y Coolify — y por qué la idea se sigue reconstruyendo en vez de decantar en un solo ganador.
Una página de estado que no es una suscripción de US$29/mes
Barras de disponibilidad de 90 días, incidentes que se abren y cierran solos, un feed JSON para tus propias herramientas — construida con las mismas comprobaciones de disponibilidad que la plataforma ya corre, no un producto separado que pagar.
Desplegar Phoenix cuando tu cola de jobs ya vive dentro del release
Oban corre en el mismo árbol de supervisión OTP que el endpoint web — sin un segundo proceso worker que declarar solo para correr jobs en segundo plano.
Un WAF y rate limiting sin un proveedor de edge aparte
Filtrado con el OWASP Core Rule Set, límites de tasa por ruta, bloqueo por país — configurado en la app, aplicado antes de que el request la alcance. Esto es exactamente lo que ya está en vivo hoy y lo que todavía se está desplegando.
Desplegar Laravel sin escribir a mano la configuración del queue worker
APP_KEY, migraciones, Horizon, Reverb, Octane — Railyard lee lo que ya está en composer.json y .env.example en vez de pedirte que lo declares dos veces.
Una IP de salida estable, sin factura de NAT gateway
Poner la dirección de tu servidor en la lista blanca de una API de terceros normalmente significa levantar un NAT gateway en una plataforma multi-tenant. En un servidor que posees tú, la IP nunca fue compartida desde el principio.
Desplegar un servicio en Go: el build que no necesita un runtime
Un binario de Go no necesita que se descargue un intérprete, que se resuelva una versión de runtime, ni nada que instalar en tiempo de despliegue — lo que lo convierte en una de las cosas más simples de construir correctamente en un build server compartido.
Desplegar Django sin escribir un Procfile a mano
collectstatic, gunicorn, migraciones, Celery — Railyard detecta lo que ya está en requirements.txt en vez de pedirte que declares la misma información dos veces.
Cómo correr tu propia interfaz estilo ChatGPT, self-hosted
LibreChat se conecta a los proveedores de modelos para los que le das claves, con tus conversaciones en una base de datos que tú controlas. Dos trampas reales que encontramos al verificarlo, y cómo la plantilla te las evita.
Desplegar Spring Boot: por qué un Dockerfile es la respuesta correcta, no un respaldo
Los comandos de build y de arranque de la JVM varían demasiado según la estructura del proyecto como para adivinarlos con seguridad — por eso un Dockerfile es la forma deliberada y correcta de desplegar una app de Spring Boot, no un workaround por falta de soporte.
Desplegar Flask: un microframework necesita microconfiguración, no ninguna
Flask no asume una herramienta de migraciones ni una cola de jobs como lo hace Django — lo que significa que un despliegue de Flask es honesto sobre lo que de verdad hay en vez de adivinar una convención que no existe.
Cómo correr tu propia instancia de Mastodon, verificada de punta a punta
Construida directo desde el Dockerfile oficial de Mastodon, con Postgres y Redis conectados automáticamente, secretos de cifrado generados bien desde la primera vez — no un fork simplificado del original.
Correr Laravel en tu propio droplet de DigitalOcean, sin Forge
Forge te configura un droplet de DigitalOcean por una cuota mensual, encima del propio costo del droplet. Esto es lo que de verdad tiene que pasar en ese droplet — y cómo lograrlo sin la factura extra.
Un botón de despliegue para tu README, apuntando a servidores que la gente posee
El patrón de badge de despliegue en un clic, pero aterrizando en la propia cuenta de DigitalOcean o Hetzner del visitante en vez de la facturación medida de una plataforma administrada.
Una referencia de servicio que nunca se rompe, incluso antes de activar la red privada
<name>.railyard.internal se resuelve distinto según dónde corren realmente las dos apps —la misma red de contenedores, HTTPS público o una malla WireGuard entre proveedores— sin que la app sepa nunca cuál de los casos aplica.
Por qué falla un despliegue en realidad, razón por razón
Un build que se queda sin tiempo no es el mismo problema que la app respondiendo en 127.0.0.1 en vez de 0.0.0.0 — las causas reales detrás de un despliegue fallido, y el arreglo específico para cada una.
railyard.yml: la configuración de tu app como un solo archivo en git
Descarga la configuración actual de una app como archivo, válidala sin conexión, aplícala de vuelta — exactamente lo que hacen hoy los tres comandos, y lo que todavía no hacen.
Un entorno de vista previa por pull request, en servidores que posees tú
Cada PR recibe su propia copia en ejecución, que se elimina automáticamente al cerrarse — y, a diferencia de la mayoría de los sistemas de preview, se duerme cuando nadie la está mirando en vez de cobrarte 24/7.
Desplegar Spring Boot en Hetzner
Empaqueta una app Spring Boot en una imagen Docker por capas, agrega Postgres y HTTPS con Caddy, y despliégala en Hetzner con copias de seguridad.
Encontrar el desperdicio de nube que nadie está buscando
Discos sin adjuntar, load balancers inactivos, servidores corriendo al 4% de CPU — un escaneo de tus cuentas de nube reales, con una corrección de un clic para la mayoría de lo que encuentra, no solo un panel diciéndote que vayas a mirar tú mismo.
Desplegar SvelteKit en Hetzner
Construye una app SvelteKit con adapter-node, ponla en un contenedor y sírvela con HTTPS detrás de Caddy en un servidor Hetzner Cloud propio.
Cuando un secreto tiene que ser un archivo, no una variable de entorno
Un JSON de cuenta de servicio de GCP o un certificado de cliente no cabe en un par KEY=VALUE. La mayoría de las pantallas de variables de entorno de un PaaS no tienen una buena respuesta para eso — esta es la que sí la tiene.
Auto-hospedar MediaCMS para hospedaje de video
Corre MediaCMS con Postgres, Redis y un worker Celery separado para transcodificar en Docker Compose, detrás de Caddy con HTTPS, con respaldos.
SSO y un registro de auditoría, sin una llamada de ventas enterprise
El inicio de sesión único, el aprovisionamiento SCIM y un registro de auditoría real no son funciones que un equipo de 6 personas deba negociar en un contrato para conseguir.
Desplegar Nuxt en Hetzner
Construye una app Nuxt con la salida node-server de Nitro, contenerízala y sírvela detrás de Caddy con HTTPS en un servidor Hetzner Cloud.
Por qué un dominio personalizado no empieza a enrutar hasta que demuestras que es tuyo
El secuestro de subdominio es una clase de vulnerabilidad real y bien documentada: apuntar un registro DNS a infraestructura que en realidad no controlas. Esta es la comprobación específica que lo cierra por defecto.
10 suscripciones SaaS que puedes reemplazar con apps self-hosted en un clic
Proyectos open-source reales, en la misma categoría que la herramienta SaaS junto a ellos, cada uno lanzable desde el catálogo de plantillas de Railyard en un clic — no una promesa función por función, una app funcionando que de verdad puedes probar.
Auto-hospedar Castopod para publicar un podcast
Corre Castopod con MariaDB y Redis en Docker Compose detrás de Caddy con HTTPS, publica un feed RSS propio y respalda el volumen de audio.
Conectar TablePlus o psql a una base de datos sin puerto público
Las bases de datos administradas son privadas por diseño — solo las apps en el servidor pueden alcanzarlas. Así se conecta de todos modos un cliente GUI desde tu laptop, sin abrir la base de datos a internet para lograrlo.
Mover una app de Rails fuera de Heroku
Un camino de migración práctico desde una plataforma administrada hacia servidores que son tuyos: primero buildpacks, después un Dockerfile, los complementos y la fase de release.
Auto-hospedar un servidor Mastodon
Corre una instancia real de Mastodon con Postgres, Redis, la API de streaming y Sidekiq como servicios separados, detrás de Caddy con HTTPS.
Desplegar una aplicación Express en DigitalOcean
Express 5 con una ruta conectada a Postgres en un droplet de DigitalOcean, detrás de Caddy para HTTPS, más el atajo sin configuración.
Que te avisen en Slack antes de que lo note un cliente, no después
Fallas de despliegue, crash loops, un disco llenándose, un certificado por vencer — un solo motor de reglas, tres canales, acotado por app o para todo el equipo.
Auto-hospedar LibreChat para tu propia app estilo ChatGPT
Corre LibreChat con MongoDB en Docker Compose detrás de Caddy con HTTPS, con secretos reales generados, registro cerrado y copias de seguridad listas.
Desplegar una aplicación web Go en Hetzner
Construye y despliega un servicio Go net/http con Postgres en un servidor Hetzner con Docker, Compose, Caddy, respaldos y una actualización repetible.
Automatización de workflows sin la factura por ejecución
n8n hace lo mismo que Zapier y Make — conectar APIs sin escribir código de pegamento— excepto que el servidor es tuyo y nadie está contando cuántas veces corrió un workflow este mes.
Auto-hospedar AFFiNE, una alternativa de código abierto a Notion
Corre AFFiNE, la alternativa de código abierto a Notion y Miro, con Postgres y Redis en Docker Compose, HTTPS con Caddy y copias de seguridad.
Un despliegue no termina cuando el contenedor arranca
Que un contenedor esté listo y que tu app sea realmente alcanzable son dos cosas distintas. Railyard revisa las dos, y revierte si la versión nueva nunca queda en vivo.
Migrar una aplicación Django de Heroku a DigitalOcean
Migra una aplicación Django de Heroku a un droplet de DigitalOcean: dockerízala, traslada Postgres, mapea las config vars y cambia el DNS.
Auto-hospedar Meilisearch para búsqueda rápida
Corre Meilisearch en Docker Compose detrás de Caddy con HTTPS, con una master key real, una copia de seguridad y una ruta de actualización repetible.
Ejecuta workers de Sidekiq o Celery junto a tu aplicación web
Configura un proceso worker dedicado de Sidekiq o Celery junto a tu aplicación web, con Docker Compose, systemd y modos de falla reales.
Dónde Railyard realmente le gana a Heroku, Railway, Render y Fly — y dónde no
Una mirada honesta a la matriz de comparación real: cuatro cosas que se derivan directamente de poseer el servidor, y tres donde un competidor está igual o adelante.
Desplegar Phoenix en Hetzner
Construye una release de Phoenix y córrela en producción en Hetzner Cloud, con Postgres y Caddy para el HTTPS, todo en Docker.
Complemento de base de datos o servidor de base de datos: la diferencia que de verdad importa
Los dos te dan Postgres. Solo uno sobrevive a perder la máquina en la que corre. Esto es exactamente dónde está la línea, y cuándo moverte.
Migrar Heroku Postgres sin una ventana de mantenimiento
La base de datos es la parte de una migración desde Heroku que de verdad preocupa a los equipos. Esto es exactamente cómo se mueven los datos, y por qué no hay una ventana de downtime real que programar.
Autoalojar changedetection.io para vigilar páginas web
Ejecuta changedetection.io en un servidor de $6/mes y recibe un aviso cuando una página web cambie: bajada de precio, restock o un aviso actualizado.
Mueve una app Rails de Heroku a Hetzner, paso a paso
Migra una app Rails en producción fuera de Heroku a Hetzner: dockerízala, trae los datos de Postgres, mapea las config vars, y cambia el DNS con seguridad.
Desplegar Flask en DigitalOcean
Corre una app Flask en producción en un Droplet de DigitalOcean: gunicorn, Postgres y Flask-Migrate detrás de Caddy para el HTTPS, todo en Docker.
Auto-hospedar Healthchecks.io para monitorear tareas cron
Ejecuta Healthchecks.io en tu propio servidor: Docker, Postgres, HTTPS, alertas por SMTP, respaldos y el atajo de un clic.
Reemplaza las review apps de Heroku con vistas previas de pull request
Construye tus propios entornos de vista previa por PR con GitHub Actions y Docker, y mira cómo es una versión hospedada con suspensión por inactividad.
Autoalojar Memos para tomar notas
Ejecuta Memos, una app de notas ligera y autoalojada, en tu propio droplet de $6/mes con HTTPS, respaldos y un camino de actualización.
Ejecutar tareas cron para apps Dockerizadas
Agrega tareas programadas a una app contenedorizada con un contenedor planificador dedicado y etiquetas de Docker, sin demonio cron en tu imagen.
Desplegar FastAPI en Hetzner
Corre una app FastAPI en producción en un servidor de Hetzner Cloud: Postgres, migraciones Alembic y Caddy para el HTTPS, todo en Docker.
Una alternativa a Cloud 66 que no se interpone en tu camino
Cloud 66 demostró el modelo de traer tu propio servidor hace años. Esta es la versión más liviana y económica de la misma idea, y exactamente cómo se ve migrar.
Autoalojar Rocket.Chat para el chat de equipo
Despliega Rocket.Chat en tu propio servidor Hetzner con un replica set de MongoDB, HTTPS, respaldos y una ruta de actualización, de principio a fin.
Mueve una app de Next.js de Vercel a tu propio servidor
Saca tu app de Next.js de Vercel y llévala a un servidor propio: variables de entorno, build Docker standalone, HTTPS, cron jobs y cambio de DNS seguro.
Despliega Laravel en Hetzner
Ejecuta Laravel en producción en un servidor de Hetzner Cloud: FrankenPHP, MySQL, un worker de colas y el scheduler en Docker, con HTTPS automático.
Lo que de verdad se rompe al migrar desde Render
La experiencia de desarrollo de Render es genuinamente buena. Esto es lo que sobrevive al cambio a un servidor que posees tú, y el puñado de cosas que no se transfieren solas.
Auto-hospeda Metabase con Postgres
Corre Metabase, la herramienta de BI de código abierto, en tu servidor con Docker, su propia base Postgres y HTTPS, sin licencia por asiento.
Reemplaza Heroku Scheduler por tareas cron en tu servidor
Las tareas de Heroku Scheduler no garantizan ejecutarse a tiempo. Así las reemplazas por cron en tu servidor, con bloqueo y registros reales.
Auto-hospeda Jitsi Meet para videollamadas
Corre Jitsi Meet, la plataforma de videoconferencia de código abierto, en tu servidor Docker con HTTPS, y el único puerto que hace fallar casi todo.
HTTPS para varias apps en un solo servidor
Corre varias apps en un mismo VPS detrás de una sola instancia de Caddy, cada una en su propio subdominio con certificado automático.
Despliega Next.js en DigitalOcean
Ejecuta Next.js en producción en un droplet de DigitalOcean: build Docker standalone, Caddy con HTTPS automático y una rutina repetible para publicar.
Auto-hospeda Immich para tu biblioteca de fotos
Corre Immich, la alternativa de código abierto a Google Photos, en tu propio servidor con Docker, Postgres y HTTPS vía Caddy.
Los doce factores, en un servidor que posees tú
El equipo de la versión 1.0 de Heroku escribió el manifiesto de los doce factores para describir qué le exigía su plataforma a una app. Estos son los mismos doce factores, mapeados a cómo se sostienen de verdad en infraestructura que posees en vez de rentar.
Migrar desde Heroku Key-Value Store (Redis)
Heroku renombró su addon de Redis a Key-Value Store. Así se aloja su propio Redis, se transfieren los datos y la aplicación sigue funcionando.
Desplegar Next.js en Hetzner
Construye una app de Next.js en modo de salida standalone, contenedorízala, y sírvela detrás de Caddy con HTTPS en un servidor de Hetzner Cloud.
Autoalojar Gitea como tu propio servidor Git
Ejecuta Gitea en tu servidor con Docker Compose, HTTPS con Caddy y Git por SSH, más un respaldo que ya probaste restaurando.
Moverte de Fly.io a tu propio servidor
Exporta la imagen, los secretos y los datos de Postgres de tu app desde Fly y córrelos en un servidor propio, con Docker Compose y Caddy.
Autoalojar Umami para las estadísticas de tu sitio
Ejecuta Umami en tu servidor con Docker Compose, Postgres y HTTPS automático con Caddy, con respaldos que ya probaste restaurar.
Backups automáticos de Postgres que realmente puedes restaurar
Scriptea pg_dump, prográmalo con cron, envíalo fuera del servidor y comprueba que cada backup se restaura bien antes de necesitarlo.
Desplegar Django con Celery en Hetzner
Corre Django, gunicorn, Celery y Postgres en un servidor Hetzner con Docker Compose, Caddy y HTTPS, desde cero hasta producción.
Auto-hospedar Vaultwarden, el gestor de contraseñas compatible con Bitwarden
Corre tu propia bóveda compatible con Bitwarden usando Vaultwarden, Docker Compose y Caddy, con un token admin hasheado y un respaldo real.
Autoscaling de Rails por CPU y tiempo de respuesta, no por intuición
Define un mínimo y un máximo, y deja que la carga real decida — más cómo precalentar réplicas antes de un pico de tráfico que ya puedes predecir.
Moverte de Railway a tu propio servidor
Exporta tu app de Railway y su base Postgres, levántalas en tu propio servidor detrás de Caddy, y el atajo de un clic que hace casi todo por ti.
Desplegar Django en DigitalOcean
Pon Django a correr en un droplet de DigitalOcean con Postgres, gunicorn y Caddy para HTTPS, y el atajo de un clic que evita la configuración.
Cron jobs y workers en segundo plano sin un dyno aparte
Un comando programado y un worker en segundo plano son solo procesos de tu app ya existente — no una segunda cosa que desplegar, escalar o pagar por separado.
Autoalojar Ghost con MySQL
Corre Ghost en tu propio servidor con MySQL, Docker Compose y Caddy, con respaldos reales, HTTPS y un proceso de actualización probado.
Mudar de Render a tu propio servidor
Una guía completa para mover un servicio web de Render y su base de datos Postgres a un servidor propio, con HTTPS y respaldos listos al final.
Autoalojar Uptime Kuma para páginas de estado y alertas
Ejecuta Uptime Kuma en tu propio servidor con Docker Compose y Caddy en HTTPS, agrega respaldos y actualizaciones, y conoce también el atajo.
Asegura un servidor Ubuntu nuevo antes de poner aplicaciones en él
Protege un servidor Ubuntu 24.04 nuevo antes de desplegar: usuario sudo, SSH solo con clave, ufw, fail2ban y actualizaciones automáticas, paso a paso.
Desplegar una app Rails en DigitalOcean
Una guía completa: desplegar una app Rails en Docker con Postgres y HTTPS en un servidor DigitalOcean de $12/mes, con backups y actualizaciones.
Auto-hospedar Chatwoot con Postgres, Redis y Sidekiq
Despliega tu propia bandeja de soporte Chatwoot en un servidor que controlas, con Postgres, Redis, un worker Sidekiq y HTTPS, paso a paso.
Tracing con OpenTelemetry sin tocar tu infraestructura
Apunta tu app a cualquier collector OTLP y obtén traces, métricas y logs fluyendo — la plataforma define las variables de entorno, el SDK de tu app hace el resto.
Salir de Heroku Postgres sin perder datos
Captura un respaldo de Heroku Postgres, restáuralo en una base nueva, verifica cada fila y haz el cambio sin downtime ni pérdida de datos.
Desplegar una aplicación Rails en Hetzner
Despliega una app Rails en un servidor Hetzner con Postgres, HTTPS vía Caddy y copias de seguridad, con un proceso de lanzamiento repetible.
Autoalojar n8n en un servidor de 6 dólares
Ejecuta n8n en tu propio servidor de 6 USD al mes con Postgres y HTTPS: Docker Compose completo, copias de seguridad y el atajo de un clic.
Qué hace que un despliegue sea realmente cero downtime
No es texto de marketing — los pasos mecánicos específicos que hacen que nunca haya un momento en que tu app no tenga un contenedor funcional respondiendo un request.
Desplegar Rails sin escribir un Dockerfile
La mayoría de las apps de Rails no necesitan ninguna config de contenedores para desplegar. Qué decide el método de build en realidad, y cuándo sí tienes que intervenir.
Despliega tu primera app en un servidor que tú posees.
Conecta una máquina con un host, un usuario y una clave SSH, o deja que Railyard cree una en tu cuenta de nube. Instala el resto y vigila que quede en línea.
Plan gratis, sin tarjeta, y 14 días de Pro para cada equipo nuevo. Un precio fijo por equipo.