PHP: Desplegar con GitHub Actions

Cómo desplegar tu código PHP usando 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 facilita la automatización de tareas como el despliegue de tu código PHP en servidores de producción. En esta guía, se te guiará sobre cómo desplegar de manera segura tu aplicación PHP en entornos de staging y producción usando GitHub Actions.

El enfoque implica mantener dos ramas, staging y production. El código enviado a estas ramas se despliega automáticamente en la instancia correspondiente de Stackhero.

Tener una instancia de staging no es obligatorio. Sin embargo, se recomienda encarecidamente usar tanto instancias de staging como de producción para asegurar despliegues fluidos y aumentar la confianza al desplegar en producción. Esta práctica está alineada con los estándares de la industria y ayuda a prevenir problemas potenciales.

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

Comienza iniciando sesión en tu panel de control de Stackhero y creando dos servicios PHP: uno para staging y otro para producción. Para mantener el orden, renombra estos servicios como "Production" y "Staging".

Si no tienes una cuenta de Stackhero, puedes crear una de forma gratuita en solo dos minutos y configurar tus servicios en la nube PHP con unos pocos clics.

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

Las claves SSH son esenciales para permitir que GitHub Actions se conecte de manera segura a tu servicio PHP para el despliegue. En esta guía, crearás un par de claves SSH único dedicado a este propósito.

Puedes generar nuevas claves SSH ejecutando el siguiente comando en tu ordenador:

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

Recupera la clave pública ejecutando:

cat /tmp/ssh_key.pub

A continuación, navega a tu panel de control de Stackhero. Selecciona tu servicio PHP "Production" y haz clic en "Configure". Luego sigue estos pasos:

  1. Bajo SSH public keys, haz clic en "Add a public key".
  2. Establece la Description en "GitHub Action".
  3. Pega la clave pública recuperada en el campo Key.

Obtener configuraciones del servicioObtener configuraciones del servicio

Ahora, abre tu proyecto de GitHub y sigue estos pasos para configurar la clave privada para el despliegue:

  • Haz clic en Settings, luego Environments y selecciona New environment.

    Configurando entornos de GitHubConfigurando entornos de GitHub

  • En el campo Name, introduce "production" y confirma.

    Estableciendo el entornoEstableciendo el entorno

  • Haz clic en el botón No restriction y selecciona Selected branches and tags.

    Estableciendo restricciones de entornoEstableciendo restricciones de entorno

  • Haz clic en Add deployment branch or tag rule, introduce "production" en el campo Name pattern, y haz clic en Add rule.

    Estableciendo la rama de entornoEstableciendo la rama de entorno Estableciendo la rama de entornoEstableciendo la rama de entorno

  • Bajo Environment secrets, haz clic en Add secret.

    Agregar secretoAgregar secreto

Recupera la clave privada que generaste anteriormente ejecutando:

cat /tmp/ssh_key

En la configuración del entorno de GitHub:

  • En Name, introduce STACKHERO_SSH_PRIVATE_KEY y pega tu clave privada en el campo Value.

    Estableciendo el secreto de la clave privada SSHEstableciendo el secreto de la clave privada SSH

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

    Estableciendo variablesEstableciendo variables

  • En Name, introduce STACKHERO_ENDPOINT y pega el endpoint del servicio PHP en el campo Value. Puedes encontrar este endpoint 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.

Por razones de seguridad, ahora debes eliminar las claves SSH generadas de tu ordenador:

rm /tmp/ssh_key /tmp/ssh_key.pub

A continuación, configurarás un flujo de trabajo de GitHub Actions para automatizar tus despliegues. En tu repositorio Git, crea un directorio llamado .github/workflows y añade un archivo llamado deploy-to-stackhero.yml con el siguiente contenido:

# 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 push de git
    # No olvides crear un entorno correspondiente en GitHub (bajo "Settings" -> "Environments") para cada rama
    # Luego añade 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 correspondiente de GitHub (bajo "Settings" -> "Environments")
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Después de añadir el archivo, confirma tus cambios ejecutando los siguientes comandos en tu terminal:

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

Luego, crea una rama de producción ejecutando:

git checkout -b production

Finalmente, envía tus cambios a GitHub:

git push --set-upstream origin production

Este comando envía tu código a la rama production de GitHub. GitHub Actions se ejecuta automáticamente y despliega tu código en la instancia asociada de Stackhero. Para verificar el despliegue, visita tu proyecto de GitHub y haz clic en Actions.

GitHub Actions que desplegó en producciónGitHub Actions que desplegó en producción

¡Felicidades, ahora estás listo para desplegar automáticamente tu código en producción usando GitHub Actions!

Puedes configurar el entorno de staging usando un proceso similar al del entorno de producción. Simplemente repite los pasos anteriores, reemplazando production por staging donde sea aplicable.

Una vez configurados los ajustes, crea una rama de staging ejecutando:

git checkout -b staging

Luego, envía tus cambios a GitHub:

git push --set-upstream origin staging

GitHub Actions despliega automáticamente el código de la rama staging en el servicio PHP designado para staging.

Es buena práctica proteger las ramas production y staging para evitar envíos directos. Podrías considerar crear una pull request para la rama staging que sea revisada y fusionada solo por personas con derechos de despliegue. Una vez que los cambios se validan en el entorno de staging, los usuarios autorizados pueden fusionar la pull request en la rama production.

Seguir este enfoque aumenta la seguridad al garantizar que solo se desplieguen cambios aprobados y mejora la fiabilidad al probar nuevas características en un entorno de staging antes de que lleguen a producción.