Skip to content

Canvas Image Sync Service

Sistema automatizado de sincronizacion de imagenes en tiempo real para plataformas web

Canvas Image Sync Service es un servicio de transferencia de archivos automatizado desarrollado en Bash que monitorea una carpeta local y sincroniza nuevas imagenes a un servidor web remoto mediante SSH/SCP. El servicio opera como un daemon de sistema, proporcionando:

  • Sincronizacion en tiempo real — Deteccion inmediata de nuevos archivos mediante inotifywait
  • Transferencia segura — Comunicacao via SSH con claves de autenticacion
  • Logging detallado — Registro completo de operaciones para auditoria
  • Resiliencia — Reinicio automatico ante fallos y verificacion de integridad de archivos
Carpeta Local Servidor Remoto
/home/goviedo/ SCP ai-canvas-web
Documents/canvas ──────► asus:/home/goviedo/
servicios/
▲ ai-canvas-web/
│ assets/
┌─────────┴────────┐
│ Daemon de Sistema │
│ (systemd) │
│ - Monitoreo │
│ - Reinicio auto │
│ - Logging │
└──────────────────┘
ComponenteDescripcion
image-sync.shScript principal de monitoreo y transferencia
canvas-image-sync.serviceDefinicion del servicio systemd
sync.logArchivo de logs de operacion
RequisitoValor
Sistema operativoLinux (Debian/Ubuntu)
Dependenciasinotify-tools, openssh-client
ShellBash 4.0+
PermisosUsuario con acceso SSH al servidor remoto
.jpg | .jpeg | .png | .gif | .webp | .bmp | .svg | .ico | .tiff
VariableDescripcionValor por defecto
CARPETA_ORIGENDirectorio local a monitorear/home/goviedo/Documents/canvas
CARPETA_DESTINORuta remota de destinogoviedo@asus:/home/goviedo/servicios/ai-canvas-web/assets
SSH_KEYRuta a clave SSH privada~/.ssh/id_asus
LOG_FILEArchivo de logs/home/goviedo/Documents/canvas/sync.log
Terminal window
# Instalar dependencias (Debian/Ubuntu)
sudo apt update && sudo apt install inotify-tools openssh-client
# Verificar instalacion
which inotifywait
Terminal window
# Generar clave SSH si no existe
ssh-keygen -t ed25519 -C "canvas-sync"
# Copiar clave al servidor remoto
ssh-copy-id -i ~/.ssh/id_asus.pub goviedo@asus
Terminal window
# Copiar archivos del servicio
sudo cp /home/goviedo/Documents/canvas/canvas-image-sync.service \
/etc/systemd/system/
# Recargar daemon de systemd
sudo systemctl daemon-reload
# Habilitar inicio automatico
sudo systemctl enable canvas-image-sync
# Iniciar el servicio
sudo systemctl start canvas-image-sync
Terminal window
# Verificar estado del servicio
sudo systemctl status canvas-image-sync
# Revisar logs en tiempo real
journalctl -u canvas-image-sync -f
# O revisar el log directamente
tail -f /home/goviedo/Documents/canvas/sync.log

Si prefieres ejecutar sin servicio systemd:

Terminal window
# Ejecutar en primer plano
/home/goviedo/Documents/canvas/image-sync.sh &
# O verificar manualmente copiando un archivo
scp -i ~/.ssh/id_asus /ruta/archivo.jpg \
goviedo@asus:/home/goviedo/servicios/ai-canvas-web/assets/
Terminal window
# Ver ultimos registros
cat /home/goviedo/Documents/canvas/sync.log
# Filtrar por tipo de evento
grep "ERROR" /home/goviedo/Documents/canvas/sync.log
grep "Exito" /home/goviedo/Documents/canvas/sync.log
Terminal window
# Reiniciar servicio
sudo systemctl restart canvas-image-sync
# Detener servicio
sudo systemctl stop canvas-image-sync
# Verificar estado
sudo systemctl status canvas-image-sync
  1. Autenticacion por clave SSH — Sin contrasenas en texto plano
  2. Principio de menor privilegio — Servicio ejecuta con usuario dedicado
  3. Rutas restringidas — Solo acceso a carpetas especificas
  4. NoNewPrivileges — Previene escalacion de privilegios
  5. PrivateTmp — Aislamiento de archivos temporales
Terminal window
# Restringir permisos de claves SSH
chmod 600 ~/.ssh/id_asus
# Limitar comandos SSH permitidos en servidor
# (configurar en /etc/ssh/sshd_config)
Match User goviedo
AllowAgentForwarding no
AllowTcpForwarding no
Terminal window
# Verificar sintaxis del script
bash -n /home/goviedo/Documents/canvas/image-sync.sh
# Revisar errores de systemd
journalctl -u canvas-image-sync --no-pager -l
Terminal window
# Verificar conectividad
ssh -i ~/.ssh/id_asus goviedo@asus echo "Conexion OK"
# Verificar fingerprints
ssh-keyscan -H asus >> ~/.ssh/known_hosts
  1. Verificar que el archivo tiene extension valida
  2. Confirmar que el archivo no esta vacio
  3. Revisar permisos de escritura en carpeta destino
  4. Consultar logs para mensaje de error especifico
VersionFechaDescripcion
1.0.02026-04-22Version inicial del servicio