Python: Despliegue con GitHub Actions
Cómo desplegar su código Python utilizando 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 facilita la automatización de tareas, incluido el despliegue de su código Python directamente en los servidores de producción.
En esta guía, verá cómo configurar GitHub Actions de forma segura y fiable para desplegar su código Python tanto en entornos de staging como de producción.
Para mantener todo organizado, utilizará dos ramas: 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. Puede seguir esta guía y tener solo una instancia de producción. Sin embargo, para garantizar 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 en la industria y una estrategia sólida que puede ayudarle a evitar numerosos problemas.
Antes de empezar, asegúrese de tener una cuenta de GitHub y un repositorio donde esté alojado su código.
Crear los servicios Python
Acceda a su panel de Stackhero y cree dos servicios Stackhero, uno para staging y otro para producción. Para mayor claridad, puede nombrarlos "Production" y "Staging".
¿Aún no tiene una cuenta de Stackhero? Puede registrarse gratis en solo dos minutos y crear sus servicios cloud Python con solo unos clics.
Ejemplo de servicios de producción y staging
Configurar las claves SSH
Las claves SSH permiten que GitHub Actions se conecte de forma segura a su servicio Python para desplegar el código. Este paso es fundamental para proteger sus servicios Stackhero.
En su ordenador, puede generar nuevas claves SSH ejecutando:
ssh-keygen -C "" -f /tmp/ssh_key -N ""
Añadir la clave pública
Primero, muestre la clave pública que acaba de generar:
cat /tmp/ssh_key.pub
A continuación, en su panel de Stackhero, seleccione su servicio Python "production" y haga clic en el botón "Configure".
Obtener la configuración del servicio
Siga estos pasos:
- En
SSH public keys, haga clic enAdd a public key. - En
Description, introduzcaGitHub Action. - En
Key, pegue la clave pública que acaba de copiar.
Añadir clave pública
Añadir la clave privada
Vaya a la página de su proyecto en GitHub, haga clic en Settings y luego en Environments. Elija New environment.
Configuración de entornos en GitHub
En el campo Name, escriba "production" y confirme.
Definir el entorno
Haga clic en el botón No restriction y seleccione Selected branches and tags.
Definir restricciones del entorno
Después, haga clic en Add deployment branch or tag rule, introduzca "production" en el campo Name pattern y haga clic en Add rule.
Definir rama del entorno
Definir rama del entorno
En la sección Environment secrets, haga clic en Add secret.
Añadir secreto
Ahora, muestre la clave privada que generó anteriormente:
cat /tmp/ssh_key
En la configuración del secreto, utilice STACKHERO_SSH_PRIVATE_KEY como Nombre y pegue la clave privada como Valor.
Configurar el secreto de la clave privada SSH
A continuación, en la sección Environment variables, haga clic en Add variable.
Configurar variables
Introduzca STACKHERO_ENDPOINT como Nombre y pegue el endpoint de su servicio Python como Valor. Encontrará este endpoint en su panel de Stackhero.
Configurar 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.
Eliminar las claves generadas
Por motivos de seguridad, es recomendable eliminar ahora las claves SSH de su ordenador, ya que no las necesitará más:
rm /tmp/ssh_key /tmp/ssh_key.pub
Configurar el workflow de GitHub Actions
En su repositorio Git, cree un directorio llamado .github/workflows si aún no existe. Después, añada un archivo llamado deploy-to-stackhero.yml dentro de él.
# 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 olvide crear un entorno correspondiente al nombre de la rama en GitHub (en "Settings"/"Environments").
# Después, añada el secreto correspondiente "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 rama correspondiente en GitHub bajo "Settings"/"Environments".
ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
endpoint: ${{ vars.STACKHERO_ENDPOINT }}
Una vez añadido el archivo de workflow, puede confirmar los cambios:
git add -A .
git commit -m "Añadir GitHub Actions para desplegar en Stackhero"
Puede crear una rama de producción con:
git checkout -b production
Y hacer push de sus cambios a GitHub:
git push --set-upstream origin production
Esto enviará su código a la rama production en GitHub y activará GitHub Actions, desplegando su código en su instancia de Stackhero.
Para comprobar el estado del despliegue, solo tiene que ir a la página de su proyecto en GitHub y hacer clic en Actions.
GitHub Actions que ha desplegado en producción
Eso es todo. Ahora dispone de despliegues automáticos en producción utilizando GitHub Actions.
Crear el entorno de staging
Configurar un entorno de staging es prácticamente idéntico a la configuración de producción. Simplemente repita los pasos anteriores, sustituyendo production por staging donde corresponda.
Después de configurar el entorno, puede crear una rama de staging así:
git checkout -b staging
Luego haga push de su rama de staging a GitHub:
git push --set-upstream origin staging
Su rama de staging se desplegará automáticamente en la instancia de Python que haya designado para staging.
Más allá
Es recomendable proteger las ramas production y staging para evitar pushes directos. Con esta configuración, los miembros del equipo deberán crear pull requests hacia la rama staging, que deberán ser revisadas y fusionadas por usuarios con los permisos adecuados. Una vez validados los cambios en la plataforma de staging, la pull request podrá fusionarse en la rama production por una persona autorizada.
Este flujo de trabajo ayuda a garantizar que solo los cambios aprobados lleguen a producción, además de mejorar la fiabilidad al probar nuevas funcionalidades en staging antes de ponerlas en marcha en producción.