← Volver al blog

Deploy zero-downtime con GitHub Actions y Docker

2026-04-15

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.