Despliegue Automático a un VPS usando GitHub Actions

Guía para configurar GitHub Actions para desplegar código automáticamente a un VPS.
github actions vps ci/cd
19-10-2024

Introducción

¿Qué es GitHub Actions?

GitHub Actions es un servicio de CI/CD (Integración Continua/Despliegue Continuo) que te permite automatizar tareas en tu repositorio de GitHub. Puedes crear flujos de trabajo personalizados para compilar, probar y desplegar tu código de forma automática.

En esta guía, aprenderás cómo configurar GitHub Actions para desplegar automáticamente tu código a un VPS. Esto es útil para automatizar el proceso de despliegue y asegurar que tu aplicación esté siempre actualizada.

Requisitos previos

  • Una cuenta de GitHub.
  • Un repositorio de GitHub con el código que deseas desplegar.
  • Un VPS con acceso SSH.
  • Claves SSH configuradas para acceso sin contraseña al VPS.

Configuración de GitHub Actions

Primero, crea un archivo de flujo de trabajo en .github/workflows/deploy.yml en tu repositorio de GitHub:

name: Deploy to VPS

on:
    push:
        branches:
            - main

jobs:
    deploy:
        runs-on: ubuntu-latest

        steps:
            - name: Checkout code
              uses: actions/checkout@v4

            - name: Set up Node.js
              uses: actions/setup-node@v4
              with:
                  node-version: "20" # O la versión que uses

            - name: Install dependencies
              run: npm install

            - name: Build the project
              run: npm run build

            - name: Copy files to VPS
              uses: appleboy/scp-action@master
              with:
                  host: ${{ secrets.VPS_HOST }}
                  key: ${{ secrets.VPS_SSH_KEY }}
                  username: ${{ secrets.VPS_USER }}
                  source: "dist/"
                  target: ${{ secrets.VPS_TARGET_DIR }}
                  strip_components: 1
            - name: Restart Nginx
              uses: appleboy/ssh-action@master
              with:
                  host: ${{ secrets.VPS_HOST }}
                  key: ${{ secrets.VPS_SSH_KEY }}
                  username: ${{ secrets.VPS_USER }}
                  script: "sudo systemctl restart nginx"

Este flujo de trabajo se activará en cada push a la rama main. Realiza las siguientes acciones:

  1. Checkout code: Clona el repositorio en el runner de GitHub Actions.
  2. Set up Node.js: Configura la versión de Node.js.
  3. Install dependencies: Instala las dependencias del proyecto.
  4. Build the project: Compila el proyecto (si es necesario).
  5. Copy files to VPS: Copia los archivos al VPS usando SCP.
  6. Restart Nginx: Reinicia Nginx para aplicar los cambios.
  7. Nota: Asegúrate de configurar las variables de entorno en la configuración de tu repositorio de GitHub para VPS_HOST, VPS_SSH_KEY, VPS_USER y VPS_TARGET_DIR.
  8. Nota: Asegúrate de que el directorio de destino en el VPS exista y tenga los permisos adecuados.
  9. Nota: Asegúrate de que el usuario especificado en VPS_USER tenga permisos para reiniciar Nginx.
  10. Nota: Puedes personalizar este flujo de trabajo según tus necesidades.
  11. Nota: Asegúrate de que las claves SSH estén configuradas correctamente en tu VPS.