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.
Creación de los servicios Python
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 staging
Configurar claves SSH
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 ""
Establecer la clave pública
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 servicio
Sigue estos pasos:
- En
Claves públicas SSH, haz clic enAñadir una clave pública. - En
Descripción, introduceGitHub Action. - En
Clave, pega la clave pública que copiaste desde tu ordenador.
Añadir clave pública
Establecer la clave privada
Navega a la página de tu proyecto de GitHub y haz clic en Settings, luego en Environments. Selecciona New environment.
Configurando entornos de GitHub
En el campo Name, escribe "production" y confirma.
Estableciendo el entorno
Haz clic en el botón No restriction y elige Selected branches and tags.
Estableciendo 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 entorno
Estableciendo la rama de entorno
En la sección Environment secrets, haz clic en Add secret.
Añ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 SSH
Luego, en la sección Environment variables, haz clic en Add variable.
Estableciendo 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 endpoint
Si has personalizado el nombre de dominio de tu servicio, usa la versión personalizada en lugar de xxxxxx.stackhero-network.com.
Eliminar las claves generadas
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
Configurar el flujo de trabajo de GitHub Actions
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ón
¡Felicidades, ahora puedes desplegar automáticamente tu código en producción usando GitHub Actions!
Creación del entorno de staging
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.
Ir más allá
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.