Configuración de despliegue automático con llaves SSH y GitHub Actions

Automatizar el despliegue de tus proyectos puede ahorrarte tiempo y reducir errores. En esta guía, te explico cómo configurar un despliegue automático utilizando llaves SSH y GitHub Actions.

Generación de llaves SSH en el servidor

El primer paso es generar un par de llaves SSH específicas para GitHub Actions en tu servidor.

ssh-keygen -t rsa -b 4096 -C "github-actions-deployment"

Cuando te pregunte dónde guardar la llave, especifica un nombre diferente:

~/.ssh/id_rsa_github_actions

Agrega la nueva llave privada al agente SSH:

eval “$(ssh-agent -s)”
ssh-add ~/.ssh/id_rsa_github_actions

Autoriza la nueva llave pública en el servidor:

Para que el servidor acepte conexiones autenticadas con tu nueva llave, debes registrar la llave pública.

cat ~/.ssh/id_rsa_github_actions.pub >> ~/.ssh/authorized_keys

Configuración en GitHub Actions

Configura los siguientes datos en tu repositorio.

  1. Navega a Settings > Secrets and variables > Actions en tu repositorio de GitHub.
  2. En la pestaña Variables, agrega las siguientes variables para nuevos repositorios:
    • HOST (ej: tu-dominio.com)
    • USERNAME (ej: deploy-user)
    • PORT (ej: 22)
  3. En la pestaña Secrets, agrega el siguiente secreto crucial:
    • SSHKEY: Aquí debes pegar el contenido completo de tu llave privada. Se obtiene ejecutando cat ~/.ssh/id_rsa_github_actions en tu servidor.

Configuración del workflow de GitHub Actions

Crea el archivo .github/workflows/deploy-prod.yml con el siguiente contenido:

name: Deploy

# Trigger the workflow on push and
# pull request events on the main branch
on:
push:
branches:
- main
pull_request:
branches:
- main

# Authenticate to the the server via ssh
# and run our deployment script
jobs:
deploy:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- name: Deploy a Demo
uses: appleboy/ssh-action@master
with:
host: ${{ vars.HOST }}
username: ${{ vars.USERNAME }}
port: ${{ vars.PORT }}
key: ${{ secrets.SSHKEY }}
script: "cd ~/project_demo && docker compose up -d --build"

Con esta configuración completa, tu flujo de trabajo de GitHub Actions podrá autenticarse de forma segura en tu servidor y ejecutar comandos para desplegar tu aplicación automáticamente con cada push a la rama principal.

Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments