PHP: Despliegue con GitHub Actions

Cómo desplegar su código PHP utilizando GitHub Actions

👋 ¡Bienvenido a la documentación de Stackhero!

Stackhero ofrece una solución PHP 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 una tarificación sencilla, transparente y predecible.
  • 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 PHP cloud hosting de Stackhero.

GitHub Actions es una herramienta potente que le permite automatizar flujos de trabajo, incluido el despliegue de su código PHP directamente en sus servidores de producción. En esta guía, le mostraremos cómo puede desplegar de forma segura su aplicación PHP en entornos de staging y producción utilizando GitHub Actions.

El enfoque recomendado es mantener dos ramas en su repositorio: staging y production. Cada vez que haga push de código a estas ramas, se desplegará automáticamente en la instancia de Stackhero correspondiente.

Disponer de una instancia de staging no es obligatorio. Sin embargo, utilizar tanto instancias de staging como de producción es muy recomendable para garantizar despliegues fluidos y aumentar la confianza al desplegar en producción. Esta práctica está alineada con los estándares del sector y ayuda a prevenir posibles problemas.

Para empezar, necesitará una cuenta de GitHub con su código PHP alojado en un repositorio.

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

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

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

Las claves SSH son el método recomendado para permitir que GitHub Actions se conecte de forma segura a su servicio PHP durante el despliegue. En esta guía, creará un par de claves SSH exclusivo para este propósito.

Para generar nuevas claves SSH, ejecute este comando en su ordenador:

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

A continuación, obtenga la clave pública ejecutando:

cat /tmp/ssh_key.pub

Acceda a su panel de Stackhero y seleccione su servicio PHP "Production". Haga clic en "Configure" y siga estos pasos:

  1. En SSH public keys, haga clic en "Add a public key".
  2. En el campo Description, escriba "GitHub Action".
  3. Pegue la clave pública que acaba de obtener en el campo Key.

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

Ahora, añada la clave privada a su proyecto de GitHub para que pueda utilizarse durante el despliegue:

  • Vaya a Settings, seleccione Environments y haga clic en New environment.

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

  • En el campo Name, introduzca "production" 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

  • 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 la sección Environment secrets, haga clic en Add secret.

    Añadir secretoAñadir secreto

Recupere la clave privada que generó anteriormente ejecutando:

cat /tmp/ssh_key

En la configuración del entorno de GitHub:

  • En Name, introduzca STACKHERO_SSH_PRIVATE_KEY y pegue su clave privada en el campo Value.

    Configurar el secreto de la clave privada SSHConfigurar el secreto de la clave privada SSH

  • En la sección Environment variables, haga clic en Add variable.

    Configurar variablesConfigurar variables

  • En Name, introduzca STACKHERO_ENDPOINT y pegue el endpoint de su servicio PHP en el campo Value. Puede encontrar este endpoint en su panel de Stackhero.

    Configurar la variable endpointConfigurar la variable endpoint

Si ha personalizado el nombre de dominio de su servicio, utilice la versión personalizada en lugar de <XXXXXX>.stackhero-network.com.

Por motivos de seguridad, es recomendable eliminar las claves SSH generadas de su ordenador una vez finalizada la configuración:

rm /tmp/ssh_key /tmp/ssh_key.pub

Ahora va a crear un archivo de workflow de GitHub Actions para automatizar sus despliegues. Dentro de su repositorio Git, cree un directorio llamado .github/workflows y añada un archivo llamado deploy-to-stackhero.yml con el siguiente contenido:

# File: .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 olvide crear un entorno correspondiente en GitHub (en "Settings" -> "Environments") para cada rama
    # Después añada el secreto "STACKHERO_SSH_PRIVATE_KEY" y la variable "STACKHERO_ENDPOINT" 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:
        # El secreto "STACKHERO_SSH_PRIVATE_KEY" y la variable "STACKHERO_ENDPOINT" deben estar definidos en el entorno de GitHub correspondiente (en "Settings" -> "Environments")
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Una vez añadido este archivo, puede confirmar los cambios ejecutando estos comandos en su terminal:

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

Para crear la rama de producción, puede ejecutar:

git checkout -b production

Después, haga push de sus cambios a GitHub:

git push --set-upstream origin production

Esto enviará su código a la rama production en GitHub. GitHub Actions se ejecutará automáticamente y desplegará su código en la instancia de Stackhero asociada. Para comprobar el estado del despliegue, puede visitar su proyecto en GitHub y hacer clic en Actions.

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

¡Enhorabuena! Su proyecto ya está configurado para el despliegue automático en producción utilizando GitHub Actions.

Puede configurar su entorno de staging de la misma forma que el entorno de producción. Simplemente repita los pasos anteriores, sustituyendo production por staging donde corresponda.

Una vez configurado, puede crear su rama de staging así:

git checkout -b staging

Y después hacer push a GitHub:

git push --set-upstream origin staging

GitHub Actions desplegará automáticamente el código de su rama staging en el servicio PHP que haya configurado para staging.

Para ayudar a garantizar que su aplicación siga siendo fiable y segura, es recomendable proteger sus ramas production y staging contra pushes directos. Puede configurar el repositorio para que los cambios se realicen mediante pull requests, permitiendo que la rama staging sea revisada y fusionada solo por quienes tengan derechos de despliegue. Una vez validados los cambios en staging, los usuarios autorizados podrán fusionarlos en la rama production.

Este enfoque garantiza que solo el código revisado llegue a producción y le permite probar nuevas funcionalidades en staging antes de que estén en vivo, lo que aporta una mayor tranquilidad tanto para usted como para su equipo.