← Blog

Autoalojar changedetection.io para vigilar páginas web

Railyard

28 de julio de 2026 · 9 min de lectura

Sigue esto en tu propio servidor. Empieza gratis, sin tarjeta

La mayoría de las páginas web que valdría la pena vigilar no tienen feed, ni API, ni ninguna forma de saber si cambiaron salvo cargarlas uno mismo y comparar. changedetection.io vigila cualquier página, o un elemento específico de ella que eliges visualmente, y te avisa cuando cambia: una bajada de precio, algo que vuelve a estar en stock, una página de aviso gubernamental que se actualiza, la página de precios de un competidor que se mueve. La alternativa es pagar por una herramienta SaaS de monitoreo de cambios, o escribir tu propio script de scraping con cron que se rompe en cuanto el marcado de la página cambia un poco. Al final de esta guía tendrás tu propia instancia de changedetection.io corriendo en un servidor de $6/mes, accesible por HTTPS en tu propio dominio, con su historial respaldado y una ruta de actualización que no te hace perder tus vigilancias.

Lo que necesitas

  • Un servidor. El Basic Droplet de DigitalOcean a $6.00/mes da 1 vCPU, 1 GB de RAM y 25 GB de SSD, más que suficiente para esta aplicación de un solo contenedor más un proxy inverso. Cualquier VPS con Ubuntu 24.04 de otro proveedor funciona igual.
  • Un nombre de dominio (o un subdominio de uno que ya tengas), con acceso a su configuración DNS.
  • Docker y el plugin de Docker Compose instalados en el servidor (cubierto en el paso 2).
  • Una terminal y acceso SSH al servidor.

Paso 1: crear el servidor y apuntar un dominio hacia él

Levanta un droplet Ubuntu 24.04 en el plan Basic de DigitalOcean a $6/mes (1 vCPU, 1 GB de RAM, 25 GB de SSD). Anota su dirección IP pública.

En la configuración DNS de tu dominio, agrega un registro A que apunte un subdominio, por ejemplo watch.tudominio.com, a esa IP:

Type: A
Name: watch
Value: <la IP de tu servidor>
TTL: 300

La propagación de DNS puede tardar de unos minutos a unas horas. Deberías ver que dig watch.tudominio.com +short devuelve la IP de tu servidor antes de continuar, ya que los siguientes pasos dependen de eso.

Paso 2: instalar Docker

Conéctate por SSH al servidor e instala Docker Engine junto con el plugin de Compose:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

Cierra sesión y vuelve a entrar para que el cambio de grupo surta efecto, luego verifica que ambas piezas estén presentes:

docker --version
docker compose version

Deberías ver una versión de Docker y una versión de Compose impresas, sin errores de tipo “command not found”.

Paso 3: preparar el directorio del proyecto

Crea un directorio para la pila de servicios:

mkdir -p ~/changedetection && cd ~/changedetection

Eso es, en realidad, todo lo que se necesita en cuanto a secretos en esta etapa. changedetection.io no requiere cuenta, clave de API ni contraseña de base de datos para empezar a vigilar páginas. Si quieres agregar una contraseña de acceso para que la instancia no quede abierta a quien encuentre la URL, eso es un ajuste dentro de la propia aplicación, en su página de Settings, una vez que esté corriendo, no algo que se configure de antemano. Vale la pena hacerlo si el servidor es accesible para más que tú; se puede omitir si no lo es.

Paso 4: escribir el archivo Docker Compose

changedetection.io guarda todo, su configuración de vigilancias, el historial de páginas y las capturas, en disco en un solo volumen, así que no hay un servicio de base de datos separado que correr. Crea docker-compose.yml:

services:
  changedetection:
    image: dgtlmoon/changedetection.io:0.60.9
    container_name: changedetection
    hostname: changedetection
    restart: unless-stopped
    volumes:
      - changedetection-data:/datastore

  caddy:
    image: caddy:2
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config
    depends_on:
      - changedetection

volumes:
  changedetection-data:
  caddy_data:
  caddy_config:

Un par de decisiones que vale la pena explicar:

  • La imagen está fijada a 0.60.9 en lugar de dejarse en latest. Tú decides cuándo pasar a una versión más nueva, cubierto en el paso 8.
  • Solo Caddy publica puertos hacia el host. changedetection.io en sí no queda expuesto directamente a internet, solo es accesible en la red interna de Docker, en su puerto predeterminado 5000.

Antes de arrancar nada, valida que el archivo se analice correctamente:

docker compose -f docker-compose.yml config

Una ejecución limpia imprime de vuelta la configuración ya resuelta, sin errores.

Paso 5: escribir el Caddyfile y arrancar todo

Caddy gestiona el certificado TLS de Let’s Encrypt automáticamente, siempre que el DNS ya apunte al servidor y los puertos 80 y 443 sean accesibles desde internet. Crea Caddyfile en el mismo directorio:

watch.tudominio.com {
	reverse_proxy changedetection:5000
}

Valídalo antes de arrancar:

docker run --rm -v $(pwd)/Caddyfile:/etc/caddy/Caddyfile caddy:2 caddy validate --config /etc/caddy/Caddyfile

Una ejecución limpia reporta la configuración como válida. Luego arranca la pila:

docker compose up -d

Observa cómo arranca y verifica que Caddy realmente haya obtenido un certificado:

docker compose logs -f caddy

Deberías ver una línea que mencione un certificado obtenido para tu dominio.

Paso 6: agregar tu primera vigilancia

Visita https://watch.tudominio.com. No hay un paso de creación de cuenta, ni un formulario de registro: la primera pantalla te deja pegar una URL y agregarla directamente como vigilancia. Agrega una página que realmente quieras seguir, reduciéndola si hace falta a un solo elemento con el selector visual si la página tiene mucho ruido alrededor de la parte que te interesa, y guárdala.

Si esta instancia es accesible para alguien más además de ti, ve a Settings dentro de la aplicación y define una contraseña de acceso. Es opcional, no obligatorio para empezar, pero vale la pena en cuanto la URL deja de ser solo tuya.

Un par de ajustes que conviene conocer desde el inicio, sin necesidad de tocarlos todavía: LOGGER_LEVEL controla qué tan detallados son los registros del propio contenedor (TRACE, DEBUG, INFO, SUCCESS, WARNING, ERROR, CRITICAL, por defecto DEBUG), y vigilar páginas que solo renderizan su contenido real mediante JavaScript requiere un componente adicional de navegador sin interfaz que el proyecto llama sockpuppetbrowser, un contenedor separado, lo cual queda fuera del alcance de esta configuración básica. La propia documentación del proyecto cubre cómo agregarlo si lo necesitas más adelante.

Paso 7: respaldar tus vigilancias y su historial

El único volumen con nombre, changedetection-data, contiene todo: cada vigilancia que hayas configurado, su historial completo y cada captura guardada. Respáldalo de la misma forma que cualquier otro volumen de Docker, con un archivo comprimido guardado fuera del servidor:

docker run --rm -v changedetection_changedetection-data:/data -v $(pwd):/backup alpine \
  tar czf /backup/changedetection-backup-$(date +%F).tar.gz -C /data .

Pon eso en una tarea de cron y copia el resultado a algún lugar que no sea este servidor, un bucket de almacenamiento de objetos, otra máquina, cualquier lugar que no sea este droplet. Un respaldo que vive solo en el servidor que respalda no sobrevive al tipo de falla que precisamente destruye un servidor.

Paso 8: actualizar sin perder tus vigilancias

Revisa la versión que estás corriendo actualmente, luego cambia la etiqueta fijada en docker-compose.yml:

image: dgtlmoon/changedetection.io:<new-version>

Descarga y reinicia solo ese servicio:

docker compose pull changedetection
docker compose up -d changedetection

Revisa los registros para confirmar un arranque limpio:

docker compose logs changedetection

Luego confirma que tus vigilancias existentes y su historial sigan ahí al abrir la aplicación. Si algo se ve mal, tu respaldo del paso 7 es el camino de vuelta.

El atajo: hacerlo con Railyard

Todo lo anterior, un volumen /datastore persistente y HTTPS ya configurado, también existe como plantilla de un clic:

https://app.railyard.run/deploy?template=changedetection

Railyard construye esta plantilla a partir del propio Dockerfile del proyecto en su repositorio de GitHub, el mismo enfoque que la configuración manual de arriba, simplemente automatizado, en lugar de traer una imagen preconstruida. Sin addons: sin base de datos, sin servicio adicional, ya que changedetection.io tampoco la necesita para esta configuración básica.

Si prefieres empezar por Railyard en general antes de decidirte por changedetection.io en particular, la guía de inicio rápido cubre lo básico, y bases de datos y respaldos explica cómo funcionan los respaldos en todas las plantillas, no solo en esta. El botón de despliegue cubre el formato del enlace ?template= en sí, por si quieres incrustar uno en otro sitio. El plan gratuito de Railyard incluye un servidor más un servidor de base de datos y 3 aplicaciones, sin tarjeta requerida; el plan Pro cuesta $19/mes por equipo, y el plan Team $49/mes por equipo para configuraciones más grandes.

Solución de problemas

Caddy nunca obtiene un certificado, o el navegador muestra una advertencia de certificado. Esto casi siempre es cuestión de DNS, no de Caddy. Ejecuta dig watch.tudominio.com +short desde tu propia máquina y confirma que devuelve la IP del servidor, no una IP vieja, y no nada. Let’s Encrypt también necesita que el puerto 80 sea accesible desde internet para la validación inicial, así que verifica que el firewall o el security group de tu proveedor de nube permita el tráfico entrante en 80 y 443, no solo en 443.

docker compose up falla con “port is already allocated”. Algo más en la máquina ya está usando el puerto 80 o 443, comúnmente una instalación predeterminada de Nginx o Apache. Encuéntralo con sudo ss -tlnp | grep -E ':80|:443' y detén ese servicio, o cambia los puertos que publica Caddy si de verdad necesitas tener ambos corriendo.

Una vigilancia muestra contenido desactualizado o vacío en una página que sabes que cambió. Si la página solo renderiza su contenido real mediante JavaScript, una solicitud básica ve el cascarón vacío que el navegador normalmente llenaría. Esta configuración no incluye el componente de navegador sin interfaz que changedetection.io usa para páginas que dependen mucho de JavaScript; revisa la propia documentación del proyecto para agregarlo como contenedor separado si una vigilancia específica lo necesita.

Una vigilancia reporta un cambio una y otra vez en una página que, a tus ojos, se ve idéntica. Algo en la página cambia en cada carga aunque el contenido que te importa no se haya movido, una marca de tiempo, un anuncio rotativo, un token de sesión incrustado en el marcado. Reduce la vigilancia a un elemento específico con el selector visual, o agrega un filtro que elimine la parte ruidosa, en lugar de comparar la página completa.

Preguntas frecuentes

¿Esto necesita una base de datos? No. El único volumen /datastore contiene junto la configuración de las vigilancias, el historial y las capturas; no hay un servicio de base de datos separado en esta configuración.

¿Puede vigilar páginas que requieren iniciar sesión? changedetection.io permite pasar cookies o datos de sesión de navegador para vigilancias detrás de un muro de inicio de sesión; revisa su propia documentación para la forma actual de configurar eso, ya que depende del sitio específico y de cómo funcione su sesión.

¿Cómo avisa cuando algo cambia? changedetection.io ofrece una variedad de integraciones de notificación, correo electrónico, Slack, Discord, webhooks genéricos y más, configurables por vigilancia o de forma global. Revisa su propia documentación para la lista actual y la configuración de cada una.

¿Cuánto cuesta realmente operar esto? El servidor cuesta $6/mes. changedetection.io en sí es software libre y de código abierto, sin costo por vigilancia ni por verificación.

¿La plantilla de Railyard tiene la misma arquitectura que esta configuración manual? Sí. Un solo contenedor, el mismo volumen /datastore persistente, HTTPS por delante, sin addons. Railyard lo construye a partir del propio Dockerfile del proyecto en lugar de una imagen preconstruida, pero lo que realmente corre es lo mismo que obtendrías siguiendo los pasos de arriba.

Ambos caminos llevan al mismo resultado: una página que antes había que acordarse de revisar ahora se vigila sola, y te avisa en cuanto tiene algo que valga la pena mirar.

Por qué eligen Railyard para esto

  • Tu propia cuenta en la nube. Despliega en DigitalOcean, Hetzner, Vultr, AWS, OVHcloud, o cualquier servidor Linux por SSH, facturado directamente por tu proveedor, sin márgenes adicionales.
  • Un precio fijo por equipo. El plan Free es gratis para siempre: un servidor más un servidor de base de datos, tres apps, sin tarjeta. Pro cuesta $19 al mes por hasta cinco servidores y apps ilimitadas. Team cuesta $49 al mes con servidores ilimitados. Sin cargos por app, por despliegue, por asiento ni por gigabyte.
  • Plantillas de un clic. Despliega apps de código abierto, como bases de datos, analítica y herramientas de desarrollo, en tu propio servidor con un clic.
  • Bases de datos administradas. Postgres, MySQL y Redis, con copias de seguridad programadas y verificadas por restauración, y recuperación a un punto en el tiempo.
  • Despliegue con git push. Despliega desde GitHub, GitLab o la CLI, con HTTPS automático y lanzamientos sin tiempo de inactividad.

Sáltate la configuración del servidor

Despliega la plantilla verificada de changedetection.io en Railyard con un clic y obtén una instancia funcionando con HTTPS ya configurado.

Plan gratis, sin tarjeta, y 14 días de Pro para cada equipo nuevo. Un precio fijo por equipo.