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" -f ~/.ssh/github_actions_deploy_key

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/github_actions_deploy_key.pub >> ~/.ssh/authorized_keys

Configura los permisos correctos

chmod 600 ~/.ssh/github_actions_deploy_key
chmod 644 ~/.ssh/github_actions_deploy_key.pub
chmod 600 ~/.ssh/authorized_keys

Obtén la llave privada para GitHub Actions:

cat ~/.ssh/github_actions_deploy_key

Copia todo el contenido (incluyendo las líneas `—–BEGIN` y `—–END`).

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/github_actions_deploy_key en tu servidor.

Importante:

– Si necesitas revocar el acceso, simplemente elimina la llave pública correspondiente de `~/.ssh/authorized_keys` en el 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 production 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 to server
uses: appleboy/ssh-action@master
with:
host: ${{ vars.HOST }}
username: ${{ vars.USERNAME }}
port: ${{ vars.PORT }}
key: ${{ secrets.SSHKEY }}
script: "cd /var/www/html && ./deploy.sh"

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