Si estás pagando por Dropbox, Google Drive o iCloud solo para mantener archivos sincronizados entre tus equipos, Syncthing es la alternativa autoalojada que deberías conocer. Sincroniza archivos de forma continua entre dispositivos usando un protocolo peer-to-peer: no se necesita servidor central, nada sale de tu red a menos que tú lo quieras, y eres dueño de cada byte. Aquí te explico cómo lo desplegaría en un contenedor LXC de Proxmox para un setup limpio y confiable que no consume el almacenamiento principal.
¿Qué es Syncthing y por qué ejecutarlo en Proxmox?
Syncthing es un programa de sincronización de archivos continua y de código abierto. A diferencia de rsync, que se dispara manualmente, Syncthing vigila carpetas y propaga los cambios en tiempo casi real entre todos los dispositivos que conectes. Usa el Block Exchange Protocol (BEP) sobre TLS, por lo que todas las transferencias entre dispositivos van cifradas en tránsito, incluso cuando se sincronizan a través de internet.
Lo que lo hace ideal para un homelab con Proxmox es que no necesitas que Syncthing corra en todos los equipos al mismo tiempo: solo necesitas que esté en algún lugar de tu red que esté siempre encendido, actuando como nodo relay persistente para tu laptop o teléfono. La carpeta de documentos en tu laptop del trabajo se sincroniza con el LXC de Proxmox en el momento en que guardas un archivo, y tu escritorio en casa recoge esos cambios en cuanto se conecta. El contenedor LXC siempre disponible es lo que hace que toda la malla funcione de forma confiable.
El caso para LXC específicamente (en vez de una VM o Docker): Syncthing es un único binario en Go con dependencias mínimas. No necesita una máquina virtual completa ni se beneficia de la sobrecarga de red de Docker, y un contenedor LXC está listo en un par de cientos de milisegundos. Según la guía completa de self-hosting en Proxmox LXC, LXC es la herramienta indicada para cargas de trabajo de un único servicio con poco estado, como esta — obtienes aislamiento de recursos sólido, separación de namespace de procesos y sobrecarga prácticamente nula.
Un aviso importante antes de empezar: Syncthing no es una solución de respaldo. Sincroniza cambios, incluidas las eliminaciones y sobreescrituras. Si borras un archivo en tu laptop, Syncthing lo borrará en todos los dispositivos conectados. Para copias de seguridad en el tiempo, combina Syncthing con Proxmox Backup Server u otra estrategia de backup. Para el caso de uso de sincronización — mantener archivos consistentes y actualizados entre dispositivos — es excelente.
Requisitos previos
Necesitarás un host con Proxmox VE 8.x en funcionamiento, acceso root a la shell y una interfaz de red configurada en tu nodo Proxmox (el bridge vmbr0 por defecto funciona bien). El contenedor LXC en sí es muy liviano: está en reposo con menos de 300 MB de RAM y apenas registra uso de CPU. El espacio en disco que necesites depende completamente de lo que planees sincronizar, no de Syncthing en sí.
Recomiendo poner los datos sincronizados en un directorio montado como bind mount desde el almacenamiento del host de Proxmox, en lugar de dentro del disco raíz del contenedor. Con este diseño, puedes eliminar, reconstruir o actualizar el contenedor LXC de Syncthing sin tocar tus datos. El contenedor queda sin estado salvo por su configuración, que puedes respaldar por separado. Es el mismo patrón que uso para todos los servicios con datos persistentes en mi homelab.
Si aún no tienes un proxy inverso en funcionamiento, la sección de Traefik más adelante en esta guía es opcional: puedes acceder a la interfaz web de Syncthing directamente por IP. Pero si quieres acceso HTTPS desde fuera de tu LAN, la guía de proxy inverso Traefik en Proxmox LXC tiene todo lo que necesitas para configurarlo primero.
Paso 1 — Crear el contenedor LXC
Entra a la interfaz web de Proxmox y navega a Datacenter → tu nodo → Local storage → CT Templates. Descarga la plantilla más reciente de Ubuntu 22.04 LTS o Debian 12 si aún no la tienes. Luego abre una shell root en tu host de Proxmox y ejecuta:
pct create 110 local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst --hostname syncthing --cores 1 --memory 512 --swap 512 --net0 name=eth0,bridge=vmbr0,ip=dhcp --storage local-lvm --rootfs local-lvm:8 --unprivileged 1 --features nesting=1 --start 1
Esto crea un contenedor sin privilegios (CT ID 110 — cámbialo según tu esquema de numeración) con 512 MB de RAM, 1 núcleo y un sistema de archivos raíz de 8 GB. Está bien por encima de lo que necesita Syncthing. El flag --unprivileged 1 es una buena práctica de seguridad para cualquier contenedor que maneje datos de usuario.
Ahora crea el directorio de datos en el host de Proxmox y agrégalo como bind mount al contenedor. Aquí es donde vivirán realmente tus archivos sincronizados, separados del disco raíz del contenedor:
# Crear el directorio en el host de Proxmox (ajusta la ruta a tu layout de almacenamiento)
mkdir -p /mnt/syncthing-data
# Agregar el bind mount a la config del contenedor (reemplaza 110 con tu CT ID)
pct set 110 -mp0 /mnt/syncthing-data,mp=/data
# Reiniciar para aplicar el montaje
pct restart 110
Obtén la IP del contenedor para conectarte a la interfaz web más adelante:
pct exec 110 -- ip addr show eth0 | grep "inet "
Paso 2 — Instalar Syncthing desde el repositorio oficial
Entra al contenedor e instala Syncthing desde el repositorio oficial de APT. Usar el repositorio oficial (en lugar del paquete predeterminado de Ubuntu/Debian) garantiza que obtienes la versión estable actual. El paquete predeterminado de Ubuntu puede ir varios minor releases por detrás, lo que importa tanto para mejoras de rendimiento como para parches de seguridad:
pct enter 110
# Actualizar e instalar prerequisites
apt-get update && apt-get install -y curl apt-transport-https gnupg2
# Agregar la clave GPG de Syncthing
curl -s https://syncthing.net/release-key.gpg | gpg --dearmor | tee /usr/share/keyrings/syncthing-archive-keyring.gpg > /dev/null
# Agregar el repositorio stable oficial
echo "deb [signed-by=/usr/share/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable" | tee /etc/apt/sources.list.d/syncthing.list
# Instalar
apt-get update && apt-get install -y syncthing
# Verificar
syncthing --version
El paquete incluye una plantilla de servicio para systemd, que es exactamente lo que quieres para un servicio de homelab que debe reiniciarse automáticamente. No necesitarás arrancar Syncthing manualmente.
Paso 3 — Configurar Syncthing como servicio del sistema
Syncthing corre como proceso de usuario. La configuración más limpia es ejecutarlo bajo un usuario del sistema dedicado, de modo que esté aislado de otros servicios y tenga permisos predecibles sobre el directorio de datos:
# Crear un usuario del sistema dedicado
useradd --system --home /var/lib/syncthing --create-home syncthing
# Darle permisos sobre el directorio de datos montado
chown syncthing:syncthing /data
# Habilitar e iniciar el servicio systemd
systemctl enable syncthing@syncthing.service
systemctl start syncthing@syncthing.service
# Confirmar que está corriendo
systemctl status syncthing@syncthing.service
Por defecto, la interfaz web de Syncthing escucha en 127.0.0.1:8384, lo que significa que solo es accesible desde dentro del contenedor. Para acceder desde tu navegador en la LAN, necesitas que escuche en todas las interfaces. El archivo de config se genera en la primera ejecución, así que detén el servicio y haz un pass de generación inicial:
systemctl stop syncthing@syncthing.service
# Generar la config predeterminada
su - syncthing -s /bin/bash -c "syncthing generate --config=/var/lib/syncthing/.config/syncthing"
# Abrir el archivo de config
nano /var/lib/syncthing/.config/syncthing/config.xml
Busca el elemento <gui> y actualiza la dirección:
<gui enabled="true" tls="false">
<address>0.0.0.0:8384</address>
<!-- resto de la configuración de gui -->
</gui>
Reinicia el servicio y sal del contenedor:
systemctl start syncthing@syncthing.service
exit
Paso 4 — Configuración inicial desde la interfaz web
Abre http://<ip-del-contenedor>:8384 en tu navegador. Syncthing mostrará un aviso pidiéndote que configures una contraseña de administrador — hazlo de inmediato. Esta interfaz web tiene acceso al sistema de archivos; cualquier persona que pueda alcanzarla en el puerto 8384 puede leer y escribir en tus carpetas sincronizadas, así que trátala como cualquier otro servicio privilegiado.
La primera tarea de configuración es mover la carpeta de sincronización predeterminada fuera del disco raíz del contenedor. Syncthing crea una carpeta en ~/Sync (el home del usuario syncthing, que es /var/lib/syncthing/Sync). Haz clic en el ícono de lápiz en "Default Folder", cambia el Folder Path a /data/sync y guarda. Syncthing reescaneará y creará el directorio. Esta es la carpeta que compartirás con otros dispositivos.
A continuación, revisa Actions → Settings → Connections. El puerto predeterminado para el tráfico de sincronización entre dispositivos es 22000/TCP+UDP. Si quieres sincronizar desde fuera de tu LAN (por ejemplo, desde una laptop en el Wi-Fi de una cafetería), deberás redirigir el puerto 22000 en tu router hacia la IP del contenedor LXC. Para uso exclusivo en LAN, esto no es necesario: Syncthing descubre dispositivos en tu red local automáticamente mediante broadcast.
Paso 5 — Agregar un dispositivo y sincronizar tu primera carpeta
Instala el cliente de Syncthing en el dispositivo que quieras sincronizar. Hay clientes disponibles para Windows, macOS, Linux, Android e iOS. Una vez instalado, cada instancia de Syncthing tiene un Device ID único, una larga cadena alfanumérica que se muestra en Actions → Show ID en la interfaz web (o en la configuración de la app móvil).
En la interfaz de Syncthing del LXC de Proxmox, haz clic en Add Remote Device, pega el Device ID de tu laptop o teléfono y dale un nombre descriptivo. El dispositivo remoto mostrará una solicitud de conexión pendiente — acéptala. Una vez que los dos nodos estén emparejados, ve a tu carpeta /data/sync en la interfaz del LXC, haz clic en Edit → Sharing y agrega el dispositivo remoto a la lista de compartición. Acepta el compartido de carpeta en el dispositivo remoto.
Syncthing indexará ambos lados y comenzará a sincronizar. La interfaz muestra tasas de transferencia en tiempo real y el estado de las carpetas: verás que pasa de "Syncing" a "Up to Date" una vez que se complete el índice inicial. Para una carpeta con muchos archivos pequeños, este escaneo inicial puede tardar unos minutos; las sincronizaciones posteriores de archivos modificados son prácticamente instantáneas en una LAN. Si tienes un dataset inicial grande (decenas de GB), vale la pena dejarlo correr de noche con una conexión cableada en lugar de Wi-Fi.
Paso 6 — Exponer Syncthing con HTTPS usando Traefik
Si ya tienes Traefik corriendo en un LXC de Proxmox, puedes servir la interfaz web de Syncthing con HTTPS y un certificado de Let's Encrypt en menos de cinco minutos. Agrega una configuración de file provider al directorio de config dinámica de Traefik:
# /etc/traefik/dynamic/syncthing.yml (en el LXC de Traefik)
http:
routers:
syncthing:
rule: "Host(`syncthing.tudominio.com`)"
entryPoints:
- websecure
tls:
certResolver: letsencrypt
service: syncthing
services:
syncthing:
loadBalancer:
servers:
- url: "http://IP_LXC_SYNCTHING:8384"
Traefik recoge el nuevo archivo sin necesidad de reinicio, emite el certificado de Let's Encrypt (normalmente en menos de 60 segundos) y comienza a enrutar el tráfico HTTPS hacia tu interfaz de Syncthing. Como ya configuraste la contraseña de la GUI, es seguro exponerlo a través de tu dominio.
Un punto importante: el tráfico de sincronización entre dispositivos en el puerto 22000 no pasa por Traefik. Es tráfico BEP directo entre nodos Syncthing, ya cifrado de extremo a extremo por la propia capa TLS de Syncthing. Traefik solo hace proxy de la interfaz web en el puerto 8384. Son dos canales de comunicación completamente independientes, y puedes usar solo el puerto 22000 sin ningún proxy inverso si no necesitas acceso a la interfaz web desde fuera de tu LAN.
Endurecimiento y consejos operativos
Habilita el versionado de archivos. Syncthing soporta historial de versiones de archivos de forma nativa, y lo activaría en cualquier carpeta que contenga documentos importantes. En la configuración de la carpeta, elige File Versioning → Staggered File Versioning. Según la documentación de Syncthing, esto conserva múltiples versiones de los archivos modificados con un esquema de decaimiento exponencial: muchas versiones para cambios recientes, menos a medida que los archivos envejecen. Establece una antigüedad máxima y un límite de tamaño para que las versiones antiguas no llenen silenciosamente tu disco con el tiempo. Esto te da una opción de recuperación suave ante sobreescrituras accidentales, aunque no sustituye una estrategia real de backups.
Agrega un archivo .stignore. Coloca un archivo .stignore en cada carpeta sincronizada para excluir lo que no quieres sincronizar: .DS_Store, node_modules, directorios .git, artefactos de build y archivos temporales grandes. Según la documentación de Syncthing, la sintaxis de patrones de ignorado sigue las convenciones de gitignore, así que si ya conoces gitignore, ya sabes .stignore. Excluir node_modules de una carpeta de desarrollo puede reducir el tamaño del índice de sincronización en un 90% y acelerar drásticamente los escaneos iniciales.
Monitorea el uso del disco. El directorio /data montado crece a medida que agregas carpetas de sincronización y se acumula historial de versiones. Vigila el uso de disco desde el lado del host con df -h /mnt/syncthing-data en la shell de Proxmox. Si estás ejecutando Grafana + Prometheus en Proxmox (en inglés), el node exporter expone métricas de disco por punto de montaje automáticamente; puedes configurar una alerta de umbral antes de quedarte sin espacio.
Mantén desactivada la aceptación automática de dispositivos. Syncthing tiene una opción "Auto Accept" que empareja automáticamente con cualquier nuevo dispositivo que presente tu URL de GUI. Déjala desactivada. Requerir aprobación manual para nuevas conexiones de dispositivos significa que ningún equipo no autorizado puede unirse silenciosamente a tu malla de sincronización — una salvaguarda significativa si compartes tu URL de Tailscale o Traefik con otras personas.
Hardware para un homelab listo para Syncthing
Syncthing es uno de los servicios más livianos que ejecutarás en Proxmox. El contenedor LXC está en reposo con alrededor de 50-100 MB de RAM y apenas se registra en la CPU excepto durante los escaneos iniciales de carpetas o transferencias grandes. El cuello de botella casi siempre es la red y el I/O de almacenamiento, no el cómputo. Un LXC de un núcleo en incluso un mini PC modesto maneja cientos de carpetas sincronizadas y gigabytes de transferencias sin problema.
Si estás construyendo un nodo de homelab para ejecutar servicios como este, el Beelink SER5 Mini PC (~$299) es un buen punto de partida: el Ryzen 5 5500U maneja Proxmox con Syncthing, Jellyfin, Vaultwarden y varios LXCs más simultáneamente. Si el presupuesto es más ajustado, el GMKtec G3 PRO Mini PC (~$199) es suficientemente capaz para un stack liviano de self-hosting.
Para el almacenamiento, los metadatos del índice de Syncthing son pequeños, pero tus datos sincronizados necesitan I/O rápido. El WD_BLACK SN850X 1TB NVMe es lo que pondría en el slot de almacenamiento principal de un nodo de homelab: lo suficientemente rápido para que los eventos del sistema de archivos de Syncthing no se acumulen. Si ejecutas múltiples contenedores y VMs junto a Syncthing, maximizar la RAM importa más que la velocidad de reloj, y el Crucial 32GB DDR4 SODIMM (~$59) es la actualización que hace la diferencia más visible en un nodo de homelab basado en mini PC.
¿Quieres este tipo de setup para tu negocio?
Instalo infraestructura privada y autoalojada en Proxmox: IA, automatización y herramientas internas en hardware que es tuyo, documentado y entregado. Ver el stack de IA privada →
¿No sabes qué necesitas? Agenda una llamada gratis.