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.
- Navega a Settings > Secrets and variables > Actions en tu repositorio de GitHub.
- En la pestaña Variables, agrega las siguientes variables para nuevos repositorios:
HOST(ej: tu-dominio.com)USERNAME(ej: deploy-user)PORT(ej: 22)
- En la pestaña Secrets, agrega el siguiente secreto crucial:
SSHKEY: Aquí debes pegar el contenido completo de tu llave privada. Se obtiene ejecutandocat ~/.ssh/github_actions_deploy_keyen 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.