Ruby: Desplegar con GitHub Actions

Cómo desplegar tu código Ruby usando GitHub Actions

👋 ¡Bienvenido a la documentación de Stackhero!

Stackhero ofrece una solución Ruby cloud lista para usar que proporciona una serie de beneficios, incluyendo:

  • Despliegue su aplicación en segundos con un simple git push.
  • Use su propio nombre de dominio y benefíciese de la configuración automática de certificados HTTPS para una mayor seguridad.
  • Disfrute de la tranquilidad con copias de seguridad automáticas, actualizaciones con un clic, y precios sencillos, transparentes y predecibles.
  • Obtenga un rendimiento óptimo y una seguridad robusta gracias a una VM privada y dedicada.

Ahorre tiempo y simplifique su vida: solo toma 5 minutos probar la solución de Ruby cloud hosting de Stackhero!

GitHub Actions te permite automatizar tareas como el despliegue de tu código Ruby en servidores de producción.

En esta guía, aprenderás a usar GitHub Actions de manera segura y confiable para desplegar tu código Ruby en entornos de staging y producción.

Para lograr esto, mantendrás dos ramas: staging y production, donde el código enviado a estas ramas se desplegará automáticamente en la instancia correspondiente de Stackhero.

Tener una instancia de staging no es obligatorio. Puedes seguir esta guía y tener solo una instancia de producción. Sin embargo, para asegurar despliegues fluidos y tener plena confianza al desplegar en producción, se recomienda encarecidamente mantener tanto una instancia de staging como una de producción. Esta práctica es un estándar de la industria y una buena práctica, ayudándote a evitar numerosos problemas.

Para seguir esta guía, necesitas una cuenta de GitHub con un repositorio que aloje tu código.

Ve a tu panel de control de Stackhero y crea dos servicios de Stackhero, uno para staging y otro para producción. Para evitar confusiones, recomendamos renombrar estos servicios a "Production" y "Staging".

¿Aún no tienes una cuenta de Stackhero? Puedes crear una en solo dos minutos, de forma gratuita, y luego crear tus servicios en la nube Ruby con solo unos clics.

Ejemplo de servicios de producción y stagingEjemplo de servicios de producción y staging

Las claves SSH darán a GitHub Actions el derecho de conectarse a tu servicio Ruby para desplegar tu código. Esto es una parte esencial para asegurar tus servicios de Stackhero.

En tu ordenador, crea nuevas claves SSH:

ssh-keygen -C "" -f /tmp/ssh_key -N ""

Recupera la clave pública que acabas de generar:

cat /tmp/ssh_key.pub

En el panel de control de Stackhero, selecciona tu servicio Ruby "production" y haz clic en el botón "Configure". Obtener configuraciones del servicioObtener configuraciones del servicio

Luego:

  1. En SSH public keys, haz clic en Add a public key.
  2. En Description, pon GitHub Action.
  3. En Key, pega el contenido de la clave pública que tienes en tu ordenador.

Obtener configuraciones del servicioObtener configuraciones del servicio

Ve al sitio web de GitHub y selecciona tu proyecto.

Haz clic en Settings/Environments y luego en New environment. Configurando entornos de GitHubConfigurando entornos de GitHub

En Name, pon "production" y confirma. Estableciendo el entornoEstableciendo el entorno

Haz clic en el botón No restriction y selecciona Selected branches and tags. Estableciendo restricciones del entornoEstableciendo restricciones del entorno

Haz clic en Add deployment branch or tag rule, introduce "production" en Name pattern, y haz clic en Add rule. Estableciendo la rama del entornoEstableciendo la rama del entorno Estableciendo la rama del entornoEstableciendo la rama del entorno

En Environment secrets, haz clic en Add secret. Añadir secretoAñadir secreto

Recupera la clave privada que generaste previamente en tu ordenador:

cat /tmp/ssh_key

En Name, pon STACKHERO_SSH_PRIVATE_KEY. En Value, pega tu clave privada. Estableciendo el secreto de la clave privada SSHEstableciendo el secreto de la clave privada SSH

En Environment variables, haz clic en Add variable. Estableciendo variablesEstableciendo variables

En Name, pon STACKHERO_ENDPOINT. En Value, pega el endpoint de tu servicio Ruby. Lo encontrarás en tu panel de control de Stackhero. Estableciendo la variable de endpointEstableciendo la variable de endpoint

Si has personalizado el nombre de dominio de tu servicio, usa la versión personalizada en lugar de xxxxxx.stackhero-network.com.

Dado que ya no necesitarás las claves SSH generadas previamente, puedes eliminarlas de tu ordenador por razones de seguridad:

rm /tmp/ssh_key /tmp/ssh_key.pub

En tu repositorio Git, en tu ordenador, crea un directorio llamado .github/workflows. En este directorio, crea un archivo llamado deploy-to-stackhero.yml.

# Archivo: .github/workflows/deploy-to-stackhero.yml

name: Deploy to Stackhero
run-name: Deploy branch "${{ github.ref_name }}" to Stackhero

on:
  push:
    # Lista de ramas que activarán la acción de despliegue tras un git push.
    # No olvides crear un entorno correspondiente al nombre de la rama en GitHub (en "Settings"/"Environments").
    # Luego añade el secreto correspondiente "STACKHERO_SSH_PRIVATE_KEY" y la variable "STACKHERO_ENDPOINT" en este entorno.
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-to-stackhero@v1
      with:
        # El secreto "STACKHERO_SSH_PRIVATE_KEY" y la variable "STACKHERO_ENDPOINT" deben estar definidos en el entorno de rama correspondiente en GitHub bajo "Settings"/"Environments".
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Confirma tus cambios:

git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"

Luego crea una rama de producción:

git checkout -b production

Finalmente, envía tus cambios a GitHub:

git push --set-upstream origin production

Este comando final git push enviará el código de tu ordenador a la rama production de GitHub. GitHub Actions se ejecutará automáticamente y desplegará este código en tu instancia de Stackhero.

Para verificar esta acción, ve al sitio web de GitHub, selecciona tu proyecto y haz clic en Actions. GitHub Actions que desplegó en producciónGitHub Actions que desplegó en producción

¡Felicidades, ahora puedes desplegar automáticamente tu código en producción a través de GitHub Actions!

La creación del entorno de staging es similar a la configuración del entorno de producción. Para crearlo, repite los pasos de las secciones anteriores de esta guía, simplemente reemplazando production por staging.

Luego crea una rama de staging:

git checkout -b staging

Finalmente, envía tus cambios a GitHub:

git push --set-upstream origin staging

GitHub Actions desplegará automáticamente tu rama de staging en la instancia Ruby designada para staging.

Una buena práctica es proteger las ramas production y staging para evitar envíos directos a ellas. En este caso, se debe crear una pull request para la rama staging y luego ser fusionada por personas con derechos para enviar código a staging. Una vez validada en la plataforma de staging, la pull request puede ser fusionada en la rama production por las mismas personas que tienen los derechos.

Este enfoque garantiza seguridad (solo personas autorizadas pueden enviar a staging y production) y fiabilidad (las nuevas características se prueban en una plataforma de staging antes de ser enviadas a la rama production).