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?
Proceso Manual
- Conectarme por SFTP a mi servidor, un FTP pero seguro
- Modificar los archivos que quería en el repositorio, guardando el cambio
- 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:
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.