Sincronizando archivos remotamente con Unison
Este sitio está alojado en un servidor dedicado, que además de servir esta web, he estado usando para tener mi propia nube y sincronizar contactos y calendarios. Para gestionar la nube estaba utilizando Seafile, con muy buenos resultados, pero un error de configuración que no pude resolver, porque no me acordaba de la clave de administrador, llevó a Seafile a agotar prácticamente todo el espacio disponible en disco, ya que almacenaba un backup de todos los cambios realizados, desde hace más de 6 años.
Puesto que tengo copia local de todos los archivos he decidido eliminar Seafile y pasarme a un método más sencillo, con algunas desventajas respecto al anterior, pero más simple de administrar.
Unison
La sincronización remota se basa en Unison. Este programa permite sincronizar archivos entre dos carpetas (locales o remotas) resolviendo los posibles conflictos que puedan surgir.
Unison puede usar rsync para hacer su trabajo, por lo que es conveniente tener configurada una clave de confianza en los equipos remotos en los que queramos sincronizar esas carpetas. Para eso hay que generar una clave en el equipo local y copiarla al servidor remoto. De esta forma, cada vez que haya cambios en los archivos y se ejecute Unison, examinará la situación y realizará las modificaciones necesarias para que ambos directorios estén sincronizados sin necesitar de intervención humana, ya que no hará falta introducir la clave de acceso al servidor.
La principal desventaja de Unison, por lo menos en el caso de la versión disponible en Debian, es que no se ejecuta como demonio ni monitoriza por sí mismo los cambios, lo que hace necesario recurrir a cron o a otro sistema similar.
Inotify
Aunque técnicamente es factible, no me tranquiliza depender de cron para algo tan delicado como la sincronización de archivos, por lo que he estado mirando entre las opciones disponibles y parece que lo más recomendable es utilizar Inotify.
En Debian, dentro del paquete inotify-tools, se encuentra inotifywait, que permite esperar a que ocurran cambios en un directorio del sistema de archivos. Los cambios que se van a monitorizar pueden especificarse, de modo que, por ejemplo, solo informe de modificación, creación o borrado de un archivo.
En mi caso, utilizo un script en bash que cuando detecta un cambio en alguno de los directorios monitorizados ejecuta unison. Así, el contenido del directorio local y el del servidor remoto se sincronizan en cada cambio.
Quizás no sea la solución perfecta, pero en mi situación es perfectamente utilizable.