Python: Desplegar con GitHub Actions

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

👋 ¡Bienvenido a la documentación de Stackhero!

Stackhero ofrece una solución nube de Python 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 alojamiento en la nube de Python de Stackhero.

GitHub Actions te permite automatizar tareas, como el despliegue de tu código Python 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 Python en entornos de staging y producción.

Para lograr esto, mantendrás dos ramas: staging y production. 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 un enfoque sensato que puede ayudarte a evitar numerosos problemas.

Antes de comenzar, asegúrate de tener una cuenta de GitHub con un repositorio que aloje tu código.

Visita tu panel de control de Stackhero y crea dos servicios de Stackhero, uno para staging y otro para producción. Para mayor claridad, podrías considerar renombrar estos servicios a "Production" y "Staging".

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

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

Las claves SSH permiten que GitHub Actions se conecte de manera segura a tu servicio Python para el despliegue de código. Este paso es esencial para proteger tus servicios de Stackhero.

En tu ordenador, genera nuevas claves SSH ejecutando:

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

Primero, recupera la clave pública que acabas de generar:

cat /tmp/ssh_key.pub

Luego, en el panel de control de Stackhero, selecciona tu servicio Python "production" y haz clic en el botón "Configure".

Obtener configuraciones del servicioObtener configuraciones del servicio

Sigue estos pasos:

  1. En Claves públicas SSH, haz clic en Añadir una clave pública.
  2. En Descripción, introduce GitHub Action.
  3. En Clave, pega la clave pública que copiaste desde tu ordenador.

Añadir clave públicaAñadir clave pública

Navega a la página de tu proyecto de GitHub y haz clic en Settings, luego en Environments. Selecciona New environment.

Configurando entornos de GitHubConfigurando entornos de GitHub

En el campo Name, escribe "production" y confirma.

Estableciendo el entornoEstableciendo el entorno

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

Estableciendo restricciones de entornoEstableciendo restricciones de entorno

A continuación, 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

En la sección Environment secrets, haz clic en Add secret.

Añadir secretoAñadir secreto

Ahora, recupera la clave privada que generaste anteriormente:

cat /tmp/ssh_key

En la configuración del secreto, usa STACKHERO_SSH_PRIVATE_KEY como Nombre y pega la clave privada como Valor.

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

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

Estableciendo variablesEstableciendo variables

Introduce STACKHERO_ENDPOINT como Nombre y pega tu endpoint del servicio Python como Valor. 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, elimina las claves SSH de tu ordenador ya que no las necesitarás más:

rm /tmp/ssh_key /tmp/ssh_key.pub

En tu repositorio Git, crea un directorio llamado .github/workflows si no existe ya. Luego crea un archivo llamado deploy-to-stackhero.yml en ese directorio.

# 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 desencadenarán la acción de despliegue tras un push de git.
    # 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 estos cambios ejecutando:

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

Luego crea una rama de producción:

git checkout -b production

Por último, 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 y activa GitHub Actions para desplegar el código en tu instancia de Stackhero.

Para verificar el despliegue, visita la página del proyecto de GitHub 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 usando GitHub Actions!

Configurar el entorno de staging es muy similar a configurar el entorno de producción. Simplemente repite los pasos anteriores, reemplazando production por staging.

Después de configurar el entorno, crea una rama de staging:

git checkout -b staging

Luego envía tu rama de staging a GitHub:

git push --set-upstream origin staging

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

Es una buena práctica proteger las ramas production y staging para evitar envíos directos. Con esta configuración, se deben crear pull requests para la rama staging y ser fusionadas por miembros del equipo con los derechos apropiados. Una vez validadas en la plataforma de staging, las pull requests pueden ser fusionadas en la rama production por las mismas personas autorizadas.

Este enfoque mejora la seguridad al garantizar que solo los cambios aprobados se desplieguen y mejora la fiabilidad al probar nuevas características en la plataforma de staging antes de que lleguen a producción.