Despliega al servidor via SSH con Github Actions

Explico como automatizar la subida de archivos a un servidor gracias a Github Actions

hace 2 años   •   3 min de lectura

Por Andrés Tuñón
no rima del todo, pero se hizo el intento xD

Hola ngxCoders, espero hayan disfrutado de la acogedora compañía de sus seres queridos estas fiestas.

En esta ocasión voy a explicar una pequeña parte de lo que he estado haciendo estas semanas para actualizar el blog; ya que me pareció super interesante y muy útil para ahorrar y hacer despliegues automáticos.

Esto te sirve para publicar tu sitio sin necesidad de servicios externos, un Github Action y acceso al servidor, ya está..

La razón detrás...

Este blog nace de un motor que debo actualizar cada mes y va a agregando funcionalidades.

Al actualizarlo todo lo que yo modifique se pierde, exceptuando artículos y configuraciones que ya maneja el motor en una base de datos.

Por esta razón, cree un repositorio privado para guardar mis extractos de código y poder reemplazar directamente en el servidor. Este proceso fue manual hasta el año pasado, llego el momento, me harté y.. ¿Qué tal si lo hago automático?

Futurama meme
...y si lo vuelvo artículo?

Proceso Manual

  1. Conectarme por SFTP a mi servidor, un FTP pero seguro
  2. Modificar los archivos que quería en el repositorio, guardando el cambio
  3. Subirlos al SFTP en la ruta deseada

No es tan complicado, pero te reto a hacerlo con 30 archivos cada mes, igual soy bastante flojo la verdad ...

Primero ¿Qué es un Github Action?

Es un archivo que armas para definir pasos que ejecutarse, cuando subes tu código; si ya has trabajado con pipelines de integración continua, ya sabes que es.

En este caso es tan simple como:

  • Cuando suba el código al branch main
  •  En un servidor con la ultima versión de ubuntu
  •  Ejecuta estos pasos que están a continuación

Si vuelvo esto anterior en código, este es el resultado:

Cómo transfiero los archivos

El punto fuerte es el paso ssh-deploy que configuré a mi gusto para que mueva los archivos como deseo, dejo la documentación al final del artículo. Aquí algunos detalles de lo que tuve que hacer:

Las llaves SSH

Yo tengo mi llave, pero tengo que crearle una a Github para que tenga acceso.

Como alguno conocerá, cuando generas una llave SSH hay una parte pública y otra privada, hay múltiples formatos dependiendo de la documentación y este caso me funcionó el que dispone ssh-deploy:

ssh-keygen -m PEM -t rsa -b 4096

La parte pública queda en el servidor en el archivo  ~/.ssh/authorized_keys y la parte privada la agregas como secreto en Github:

secrets

Rsync Args

Cuando terminé de subir los primeros archivos, me percaté de que arriba los archivos tenían los permisos de mi máquina local.

Por esa razón verás esos argumentos chmod user:user  Le puedes pasar estos argumentos y más, siguiendo la documentación de rsync y el step.

Resultado

Referencias

ssh deploy - GitHub Marketplace
NodeJS action for FAST deployment with rsync/ssh and remote script execution before/after rsync
ssh deploy
Deploying to a server via SSH and Rsync in a Github Action | Zell Liew
The hardest part is installing the SSH key and getting it to work. I’m going to show you how so you can do this easily.
artículo que seguí un poco para guiarme
Understanding GitHub Actions - GitHub Docs
Learn the basics of GitHub Actions, including core concepts and essential terminology.
Documentación de Github Actions

Corre la voz

Sigue leyendo