Deploy zero-downtime con GitHub Actions y Docker
Deploy Zero-Downtime con GitHub Actions y Docker
En el mundo de la programación, la disponibilidad y la escalabilidad de las aplicaciones son fundamentales para mantener a los usuarios satisfechos. Sin embargo, el deploy de una aplicación puede generar periodos de inactividad, lo que puede afectar negativamente la experiencia del usuario. En este artículo, exploraremos cómo utilizar GitHub Actions y Docker para realizar un deploy zero-downtime, asegurando que la aplicación esté disponible en todo momento.
Introducción a GitHub Actions
GitHub Actions es un servicio de automatización de flujos de trabajo que permite a los desarrolladores crear y ejecutar flujos de trabajo en sus proyectos de GitHub. Con GitHub Actions, puedes automatizar tareas como la compilación, la prueba y el deploy de tu aplicación.
Introducción a Docker
Docker es una plataforma de contenedores que permite a los desarrolladores crear y ejecutar aplicaciones en entornos aislados. Con Docker, puedes crear una imagen de tu aplicación y ejecutarla en cualquier entorno que tenga Docker instalado.
Configuración de GitHub Actions
Para configurar GitHub Actions, debes crear un archivo de configuración llamado .github/workflows/deploy.yml. Este archivo define el flujo de trabajo que se ejecutará en GitHub Actions.
name: Deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Login to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push image
run: |
docker build -t my-app .
docker tag my-app:latest ${{ secrets.DOCKER_USERNAME }}/my-app:latest
docker push ${{ secrets.DOCKER_USERNAME }}/my-app:latest
- name: Deploy to production
uses: appleboy/ssh-action@v0
with:
host: ${{ secrets.PRODUCTION_HOST }}
username: ${{ secrets.PRODUCTION_USERNAME }}
password: ${{ secrets.PRODUCTION_PASSWORD }}
script: |
docker pull ${{ secrets.DOCKER_USERNAME }}/my-app:latest
docker stop my-app
docker rm my-app
docker run -d -p 80:80 ${{ secrets.DOCKER_USERNAME }}/my-app:latest
En este ejemplo, el flujo de trabajo se ejecuta en el branch main y realiza las siguientes tareas:
Crea un contenedor para la aplicación.
Crea una imagen de la aplicación y la sube a Docker Hub.
Se conecta a la máquina de producción mediante SSH.
Detiene y elimina la aplicación existente.
Ejecuta la aplicación nueva.
Configuración de Docker
Para configurar Docker, debes crear un archivo de configuración llamado Dockerfile. Este archivo define la imagen de la aplicación.
FROM node:14
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 80
CMD ["node", "server.js"]
En este ejemplo, la imagen de la aplicación se basa en la imagen oficial de Node.js y realiza las siguientes tareas:
Configura el directorio de trabajo.
Copia el archivo package.json y lo instala.
Copia el código de la aplicación.
Compila la aplicación.
Expones el puerto 80.
Configura el comando de ejecución.
Conclusión
En este artículo, exploramos cómo utilizar GitHub Actions y Docker para realizar un deploy zero-downtime. Con GitHub Actions, puedes automatizar tareas como la compilación, la prueba y el deploy de tu aplicación. Con Docker, puedes crear y ejecutar aplicaciones en entornos aislados. Al combinar ambos, puedes asegurarte de que tu aplicación esté disponible en todo momento.