Ya te conté previamente que migré mi instalación de WordPress a Hugo y en este post voy a complementarlo para enseñarte mi forma de trabajo para mantenerlo sincronizado.

Requisitos previos

Utilizo rsync con claves ssh. Esto lo ejecuto en Windows a través de MSYS2 MSYS.

Ejecución en seco

Primero ejecuto un dry run. Para ello navego a la carpeta donde tengo mi proyecto de Hugo (donde existe content, assets, archetypes, etcétera) que se ve así:

parzibyte@DESKTOP-PLGLS8D MSYS /c/Users/parzibyte/Documents/desarrollo/paginas_hugo/parzibyte_hugo
$ ls -lah
total 22K
drwxr-xr-x 1 parzibyte Ninguno    0 jul. 30 20:18 .
drwxr-xr-x 1 parzibyte Ninguno    0 jul. 30 19:31 ..
drwxr-xr-x 1 parzibyte Ninguno    0 jul. 22 17:38 .git
-rw-r--r-- 1 parzibyte Ninguno   19 jul. 22 17:32 .gitignore
-rw-r--r-- 1 parzibyte Ninguno  115 jul. 22 17:32 .gitmodules
-rw-r--r-- 1 parzibyte Ninguno    0 jul. 22 17:32 .hugo_build.lock
drwxr-xr-x 1 parzibyte Ninguno    0 jul. 22 17:32 archetypes
drwxr-xr-x 1 parzibyte Ninguno    0 jul. 22 17:32 assets
drwxr-xr-x 1 parzibyte Ninguno    0 jul. 22 17:32 content
-rw-r--r-- 1 parzibyte Ninguno 2.3K jul. 22 17:33 hugo.toml
drwxr-xr-x 1 parzibyte Ninguno    0 jul. 22 17:33 layouts
drwxr-xr-x 1 parzibyte Ninguno    0 jul. 30 19:24 public
drwxr-xr-x 1 parzibyte Ninguno    0 jul. 23 11:06 resources
drwxr-xr-x 1 parzibyte Ninguno    0 jul. 22 17:33 themes

Recuerda que lo que debemos subir es todo el contenido de la carpeta public

Y una vez ahí, ejecuto:

rsync -rnvzi --size-only public/ usuario@servidor:/var/www/misitio/blog/

Eso hará un “dry run” que no va a modificar nada, simplemente me va a decir cuáles archivos va a sincronizar, cuáles son nuevos y cuáles eliminaría si yo le pasara la opción delete. En este caso solo había modificado un archivo porque actualicé un enlace, así que la salida fue:

parzibyte@DESKTOP-PLGLS8D MSYS /c/Users/parzibyte/Documents/desarrollo/paginas_hugo/parzibyte_hugo
$ rsync -rnvzi --size-only public/ usuario@servidor:/var/www/misitio/blog/
sending incremental file list
<f.sT...... posts/migrando-wordpress-hugo-ubuntu-rocky/index.html

sent 2,895,347 bytes  received 29,283 bytes  95,889.51 bytes/sec
total size is 1,412,101,740  speedup is 482.83 (DRY RUN)

Esto es más que nada por seguridad. Aquí te explico las opciones de rsync que estoy usando:

  • r para que sea recursivo por si encuentra carpetas
  • n este es el más importante en este caso porque ejecuta el dry run
  • v agregar verbosidad porque si no no me dirá cuáles archivos son
  • z comprimir, aunque ahora que lo pienso no sé si es necesario este parámetro en una ejecución en seco
  • i para que me diga qué hará con cada archivo (es lo que hace que diga <f.ST.. al inicio del archivo)
  • --size-only porque no quiero que actualice los archivos cuando lo único que ha cambiado es la fecha de modificación. Quiero que actualice solamente los que han cambiado en contenido

Sincronizando blog de GoHugo con Rsync

Una vez que la salida del dry run me parece correcta, ejecuto:

rsync -rvzi --size-only public/ usuario@servidor:/var/www/misitio/blog/

Básicamente solo he removido la opción n que también puede ser indicada con –dry-run. Y con eso se van a subir mis nuevas entradas.

Lo del dry run es opcional, pero sirve para que veas cuáles archivos se van a cambiar. También estoy planeando usar --delete por si algún día elimino algo y quiero que se vea reflejado en mi servidor.

Poniendo todo junto

Una vez que haya terminado de escribir mi nuevo contenido y haya revisado previamente con hugo server, ejecuto:

hugo
rsync -rnvzi --size-only public/ usuario@servidor:/var/www/misitio/blog/

Y finalmente:

rsync -rvzi --size-only public/ usuario@servidor:/var/www/misitio/blog/

También he creado un script de bash:

#!/bin/bash
echo "Compilando sitio con Hugo"
if ! hugo; then
exit 1
fi
echo "Ejecutando dry run. Fíjate en la salida pues todos esos archivos han cambiado y se van a subir si lo aceptas en el siguiente paso"
rsync -rnvzi --size-only --delete public/ usuario@servidor:/var/www/misitio/blog/
echo "¿Quieres subir el sitio? [s/n]"
read opcion
if [[ "$opcion" == "s" ]]; then
	echo "Subiendo..."
	rsync -rvzi --size-only --delete public/ usuario@servidor:/var/www/misitio/blog/
fi

Así se ve en ejecución:

Terminal mostrando compilación de GoHugo, prueba dry-run con Rsync y subida después de confirmación de usuario
Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto