Node.js: Despliegue con GitHub Actions

Aprenda cómo desplegar su código Node.js utilizando GitHub Actions

👋 ¡Bienvenido a la documentación de Stackhero!

Stackhero le ofrece un entorno Node.js en la nube listo para usar, diseñado para ayudarle a avanzar más rápido:

  • Despliegue en producción en segundos con un simple git push. No necesita herramientas adicionales ni configuraciones manuales.
  • Utilice su propio dominio y benefíciese de certificados HTTPS automáticos, manteniendo su aplicación segura sin configuraciones extra.
  • Copias de seguridad automáticas, actualizaciones con un solo clic y precios predecibles le permiten centrarse en desarrollar funcionalidades, mientras Stackhero gestiona la infraestructura por usted.
  • Basado en infraestructura privada y dedicada para un rendimiento constante y una seguridad robusta.

Ahorre tiempo y reduzca la carga operativa: puede tener su aplicación funcionando en el hosting Node.js en la nube de Stackhero en solo unos minutos.

GitHub Actions facilita la automatización de tareas como el despliegue de su código Node.js en servidores de producción. En esta guía, le mostraremos cómo puede desplegar su aplicación Node.js de forma segura y fiable tanto en entornos de staging como de producción utilizando GitHub Actions.

Le recomendamos mantener dos ramas: staging y production. Cuando haga push de código a cualquiera de estas ramas, sus cambios se desplegarán automáticamente en el servicio Stackhero correspondiente.

Disponer de una instancia de staging es opcional. Puede seguir esta guía utilizando únicamente una instancia de producción. Para facilitar los despliegues y validar los cambios antes de pasar a producción, es muy recomendable mantener entornos de staging y producción. Este enfoque está ampliamente adoptado en el sector y ayuda a evitar problemas comunes de despliegue.

Antes de empezar, asegúrese de tener una cuenta de GitHub y un repositorio que aloje su código Node.js.

Primero, inicie sesión en su panel de Stackhero y cree dos servicios Stackhero: uno para staging y otro para producción. Para mayor claridad, puede nombrar estos servicios "Staging" y "Production".

Si aún no tiene una cuenta de Stackhero, puede crear una en solo dos minutos de forma gratuita y configurar sus servicios en la nube de Node.js en unos pocos clics.

Ejemplo de servicios Node.jsEjemplo de servicios Node.js

Las claves SSH permiten que GitHub Actions se conecte de forma segura a su servicio Node.js al desplegar el código. Este paso es fundamental para proteger sus servicios Stackhero.

En su ordenador, puede generar nuevas claves SSH con:

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

Para ver la clave pública que acaba de crear, ejecute:

cat /tmp/ssh_key.pub

A continuación, en su panel de Stackhero, seleccione su servicio Node.js de producción y haga clic en el botón Configure.

Obtener la configuración del servicioObtener la configuración del servicio

Continúe con estos pasos:

  1. En SSH public keys, haga clic en Add a public key.
  2. En Description, introduzca GitHub Action.
  3. En Key, pegue la clave pública que copió anteriormente.

Obtener la configuración del servicioObtener la configuración del servicio

Ahora, cambie a GitHub y abra el repositorio de su proyecto. Haga clic en Settings y seleccione Environments. Elija New environment.

Configuración de entornos en GitHubConfiguración de entornos en GitHub

Introduzca "production" como Name y confirme.

Definir el entornoDefinir el entorno

Haga clic en el botón No restriction y seleccione Selected branches and tags.

Definir restricciones del entornoDefinir restricciones del entorno

Ahora haga clic en Add deployment branch or tag rule, introduzca "production" en el campo Name pattern y haga clic en Add rule.

Definir la rama del entornoDefinir la rama del entorno

Definir la rama del entornoDefinir la rama del entorno

En Environment secrets, haga clic en Add secret.

Añadir secretoAñadir secreto

Para recuperar la clave privada que generó, ejecute:

cat /tmp/ssh_key

En GitHub, utilice STACKHERO_SSH_PRIVATE_KEY como Name y pegue su clave privada en el campo Value.

Definir el secreto de la clave privada SSHDefinir el secreto de la clave privada SSH

Después, en Environment variables, haga clic en Add variable.

Definir variablesDefinir variables

Introduzca STACKHERO_ENDPOINT como Name y pegue el endpoint de su servicio Node.js en el campo Value. Puede encontrar este endpoint en su panel de Stackhero.

Definir la variable endpointDefinir la variable endpoint

Si ha configurado un dominio personalizado para su servicio, utilice su dominio personalizado en lugar de <XXXXXX>.stackhero-network.com.

Por seguridad, es recomendable eliminar las claves SSH de su ordenador una vez que las haya configurado en Stackhero y GitHub:

rm /tmp/ssh_key /tmp/ssh_key.pub

Dentro de su repositorio Git, cree un directorio .github/workflows si aún no existe. Después, añada un archivo llamado deploy-to-stackhero.yml:

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

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

on:
  push:
    # Liste las ramas que activan la acción de despliegue. Asegúrese de que existe un entorno en GitHub (en "Settings" > "Environments") para cada rama.
    # Después, añada el secreto STACKHERO_SSH_PRIVATE_KEY y la variable STACKHERO_ENDPOINT correspondientes en ese 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:
        # STACKHERO_SSH_PRIVATE_KEY y STACKHERO_ENDPOINT deben estar configurados en el entorno de GitHub correspondiente.
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Una vez creado el archivo de workflow, puede confirmar sus cambios así:

git add -A .
git commit -m "Añadir GitHub Actions para desplegar en Stackhero"

Para crear una rama de producción, ejecute:

git checkout -b production

Luego suba sus cambios a GitHub:

git push --set-upstream origin production

Este push envía su código a la rama production y activa GitHub Actions para desplegar su código en el servicio Stackhero. Para comprobar el despliegue, abra su proyecto en GitHub y haga clic en Actions.

GitHub Actions que ha desplegado en producciónGitHub Actions que ha desplegado en producción

Eso es todo. Su código ya está preparado para el despliegue automático en producción mediante GitHub Actions.

La configuración del entorno de staging es prácticamente igual que la de producción. Simplemente repita los pasos anteriores, sustituyendo production por staging cuando corresponda.

Comience creando una rama de staging:

git checkout -b staging

Luego suba su rama de staging a GitHub:

git push --set-upstream origin staging

GitHub Actions desplegará automáticamente su rama staging en el servicio Node.js correspondiente.

Es recomendable proteger las ramas production y staging para evitar pushes directos. En su lugar, puede crear una pull request hacia la rama de staging y fusionar los cambios desde su rama de desarrollo. Una vez validados los cambios en la plataforma de staging, fusione la pull request en la rama production.

Este flujo de trabajo ayuda a garantizar que solo los colaboradores autorizados puedan hacer push en las ramas de staging y producción, y añade una capa extra de validación antes de que las nuevas funcionalidades lleguen a producción.