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 carpetasn
este es el más importante en este caso porque ejecuta el dry runv
agregar verbosidad porque si no no me dirá cuáles archivos sonz
comprimir, aunque ahora que lo pienso no sé si es necesario este parámetro en una ejecución en secoi
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:
