Guía de Railway: despliegue automático de repositorios GitHub con base de datos integrada

·

·

Guía de Railway: Despliegue Automático de Repositorios GitHub con Base de Datos Integrada

Railway es una plataforma de DevOps y hosting moderna que simplifica el despliegue y la gestión de aplicaciones conectadas a bases de datos. A lo largo de esta guía aprenderás paso a paso cómo conectar tu repositorio de GitHub, automatizar despliegues y configurar un servicio de base de datos integrado, todo sin abandonar la interfaz de Railway ni escribir complejas líneas de configuración manual.

1. Introducción a Railway

Railway se presenta como una solución serverless ligera: abstrae servidores, balanceadores y redes, proporcionando en su lugar proyectos, servicios y entornos. Cada vez que haces git push, Railway detecta cambios, despliega tu aplicación y actualiza el entorno en cuestión de segundos.

2. Ventajas Principales

  • Despliegue continuo: Integración nativa con GitHub y GitLab.
  • Servicios administrados: Bases de datos (PostgreSQL, MySQL, Redis), colas, almacenamiento de archivos.
  • Variables de entorno gestionadas desde la interfaz.
  • Escalabilidad automática: Ajuste de recursos según la carga.
  • CLI y panel de control robustos e intuitivos.

3. Primeros Pasos

  1. Registro en Railway: Accede a https://railway.app y crea una cuenta.
  2. Instalación de Railway CLI:

    npm install -g railway
  3. Login en la CLI:

    railway login

4. Creación de un Proyecto y Conexión a GitHub

Tras el login, crea un proyecto y conéctalo a tu repositorio de GitHub:

railway init
 Would you like to connect your GitHub repository › Yes
 Which repository would you like to link › user/mi-proyecto

Al confirmar, Railway instalará un GitHub Action en tu repo para ejecutar despliegues cada vez que se haga push a la rama principal (main/master).

5. Configuración de la Base de Datos Integrada

Railway facilita la provisión de servicios con un solo comando:

railway add plugin postgresql
  • Railway crea una instancia de Postgres gestionada.
  • Se genera automáticamente una variable de entorno llamada DATABASE_URL.
  • Puedes verla tanto en el panel web como en la CLI con railway variables list.

5.1 Variables de Entorno

Variable Descripción
DATABASE_URL Cadena de conexión Postgres (ej. postgres://user:pass@host:port/db).
RAILWAY_ENVIRONMENT Indica el entorno activo (production, development, preview).

6. Automatización de Migraciones

Para garantizar la coherencia del esquema de la base de datos, integra tu sistema de migraciones en el flujo de despliegue:

  • Prisma: npx prisma migrate deploy
  • Rails: bundle exec rails db:migrate
  • Flask-Alembic: alembic upgrade head

Agrega estos comandos al script de despliegue en tu .github/workflows/deploy.yml:

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Setup Node
        uses: actions/setup-node@v2
      - name: Install deps
        run: npm install
      - name: Run migrations
        run: npx prisma migrate deploy
      - name: Railway deploy
        run: railway up --yes
        env:
          RAILWAY_TOKEN: {{ secrets.RAILWAY_TOKEN }}

7. Entornos y Revisiones (Previews)

Railway crea automáticamente un preview environment por cada Pull Request. Esto te permite validar cambios en una instancia real antes de fusionar:

  • Entorno de Preview: URL única por PR.
  • Variables dedicadas: Aseguran aislamiento frente a producción.
  • Despliegue automático: Cada push al branch de la PR actualiza el preview.

8. Planes y Costes

Plan Características Precio
Free 1 proyecto, 5 servicios, 5GB transfer. Gratis
Hobby 5 proyectos, 2GB RAM por servicio. 5/mes
Pro Proyectos ilimitados, escalado automático. Desde 20/mes

9. Buenas Prácticas

  • GitIgnore: Excluye .railway si almacenas configuraciones locales.
  • Manejo de secretos: Usa Railway Variables y GitHub Secrets para tokens.
  • Revisiones frecuentes: Implementa revisiones de esquema con PRs.
  • Monitorización: Habilita logs y métricas desde el panel de Railway.

10. Solución de Problemas

Error 502 Bad Gateway: Comprueba que el puerto de escucha coincide con PORT de Railway.

Conexión a la base de datos fallida: Asegúrate de que DATABASE_URL no tenga caracteres especiales sin escapar.

Rate Limits en GitHub Actions: Usa acciones oficiales y cache de dependencias para reducir solicitudes.

11. Conclusión

Railway ofrece una experiencia unificada para desplegar aplicaciones y gestionar servicios, eliminando gran parte de la complejidad tradicional. Con unos pocos comandos y configuraciones mínimas, podrás tener un pipeline de CI/CD completo con base de datos integrada, entornos de preview y escalado automático.

12. Recursos y Enlaces



Leave a Reply

Your email address will not be published. Required fields are marked *