World Monitor autohospedado: Docker, Ollama, PMTiles e inteligencia sin conexión

Despliega World Monitor desde el código fuente o Docker, conecta Ollama, sirve PMTiles sin conexión y revisa dependencias externas, caché y fallos de despliegue.

World Monitor es un panel en tiempo real que agrega noticias, mercados, aviación, riesgo geográfico, infraestructura y datos de inteligencia pública. Agregó alrededor de 13,231 estrellas en GitHub Trending en una semana, pero “puede abrir la interfaz” y “ejecutarse completamente sin conexión” son dos objetivos de implementación diferentes. Este artículo primero separa los componentes y las dependencias de la red, y luego proporciona tres rutas verificables para el desarrollo del código fuente, el front-end del contenedor y el resumen de la IA local.

Primero decida qué nivel de implementación fuera de línea desea implementar

La documentación del proyecto describe tres categorías de modelos de privacidad. Lo más sencillo es abrir la aplicación localmente, pero continuar solicitando la API pública y el LLM en la nube. El segundo tipo es cooperar con Ollama, LM Studio, llama.cpp o vLLM en el escritorio, de modo que el resumen de noticias permanezca en la máquina local y otras fuentes de datos permanezcan en línea. La tercera categoría son las redes aisladas: modelos locales, PMTiles locales, instantáneas de datos preparadas previamente y desactivación de fuentes externas en vivo. La tercera categoría no se puede hacer automáticamente con un contenedor Docker porque los vuelos, los mercados, los RSS y las fuentes de riesgos deben actualizarse. Antes de comenzar, escriba un resumen de los nombres de dominio a los que se permite acceder, los requisitos de tiempo de actualización de datos y si se permite la nube.

Los componentes en ejecución de World Monitor no son solo páginas web

La interfaz es una aplicación Vanilla TypeScript y el mapa se representa mediante componentes como MapLibre GL, deck.gl y Globe.gl. La parte del servidor incluye el controlador Edge, la puerta de enlace RPC, la caché y las tareas de inicialización de datos. AIS Relay es responsable de algunos datos periódicos y de transmisión en tiempo real. Redis se utiliza para almacenar en caché, limitar y evitar que múltiples solicitudes actualicen los mismos datos al mismo tiempo. El escritorio usa Tauri con el sidecar Node.js. PMTiles puede colocar mapas base en almacenamiento de objetos o servicios LAN HTTP. Por lo tanto, el autohospedaje debe aclarar qué componentes se ejecutan por sí mismos y cuáles continúan tomando prestados servicios ascendentes.

Licencia antes del modo de implementación

El repositorio es AGPL-3.0 con instrucciones adicionales para uso comercial. El uso personal, de investigación y educativo puede ser autohospedado sujeto a condiciones de atribución y licencia. SaaS comercial, cambio de marca o reempaquetado requiere verificar los requisitos de licencia comercial del proyecto. No entienda que “el código se puede descargar públicamente” significa que se puede vender incondicionalmente como fuente cerrada. Cuando planee proporcionar servicios externos, primero lea los formularios de permiso LICENSE y README en el repositorio.

Prepare el Nodo 22 y las herramientas básicas

El registro de cambios del proyecto ha fijado el Nodo 22 como línea base de desarrollo. Se recomienda utilizar WSL2 Ubuntu en Windows, Linux y macOS pueden operar directamente.

1
2
3
4
node --version
npm --version
git --version
make --version

Cuando la versión principal de Node no sea 22, use nvm para cambiar:

1
2
3
nvm install 22
nvm use 22
node --version

No mezcle paquetes globales entre nodos del sistema y nodos nvm.

Inicie el panel de desarrollo completo desde el código fuente

Primera bifurcación o clonación directa del repositorio oficial:

1
2
3
git clone https://github.com/koala73/worldmonitor.git
cd worldmonitor
git rev-parse HEAD

Guarde el SHA de confirmación y los cambios posteriores en el documento y la configuración se remontarán a la versión específica. El documento de contribución oficial proporciona un objetivo de instalación unificado:

1
make install

Preparará buf, el complemento sebuf, las dependencias npm y el navegador Playwright. Para ver solo la ayuda ejecute:

1
make help

Servidor de desarrollo para la variante completa:

1
npm run dev

La dirección predeterminada es http://localhost:3000.

Variantes diferentes no son repositorios diferentes

Paneles de control de World Monitor, capas de mapas, ciclos de actualización y fuentes de datos predeterminadas mediante variante. Los paneles Tecnología, Finanzas y Completo se pueden iniciar por separado:

1
2
npm run dev:tech
npm run dev:finance

La compilación de producción también tiene un comando correspondiente:

1
2
3
npm run build
npm run build:tech
npm run build:finance

Al cambiar de variante se restablecerán algunas configuraciones. No trate el almacenamiento local de diferentes variantes del navegador como la misma configuración.

Las variables de entorno se activan una por una según la fuente de datos

Copie el archivo de muestra:

1
cp .env.example .env.local

No complete todas las claves API a la vez. Comience con el panel que no requiere credenciales y confirme que la interfaz, el mapa y el RPC básico estén funcionando. Agregue noticias, mercados, vuelos o proveedores de LLM uno por uno. Cada vez que se agrega una variable, el servicio se reinicia y se verifican las solicitudes de red. .env.local no ingresa a Git:

1
2
git status --short
git check-ignore .env.local

Si el segundo elemento no aparece, verifique primero .gitignore y no continúe completando la clave real.

Ruta Docker para la interfaz alojada

docker/Dockerfile en el repositorio crea una imagen de arquitectura múltiple, nginx proporciona SPA y envía solicitudes de API al nivel ascendente. Construya localmente primero:

1
2
docker build -f docker/Dockerfile -t worldmonitor:local .
docker image inspect worldmonitor:local

Verifique el puerto expuesto de Dockerfile y la configuración de nginx antes de ejecutar. No adivines el puerto:

1
2
docker image inspect worldmonitor:local \
  --format '{{json .Config.ExposedPorts}}'

Suponiendo una exposición de imagen de 80, prueba de mapeo de solo bucle invertido disponible:

1
2
3
docker run --rm --name worldmonitor-test \
  -p 127.0.0.1:8080:80 \
  worldmonitor:local

Si los puertos reales son diferentes, prevalecerá el resultado de la verificación de duplicación.

El front-end del contenedor no significa que todas las API estén localizadas

Abra el panel Red de las herramientas de desarrollo de su navegador. Actualiza la página y agrupa las solicitudes por nombre de dominio. Cualquier solicitud para acceder a Vercel, Railway, Upstash, noticias de terceros o interfaces de mercado indica que todavía existe una dependencia actual de la nube. No utilice “la página web proviene de su propio servidor” para deducir “los datos no salen de la LAN”. Cuando se requiera aislamiento, reemplace los puntos finales de API elemento por elemento o deshabilite los paneles que no funcionan localmente.

Proporcionando un resumen local

con Ollama La ruta LLM nativa de World Monitor admite servicios compatibles con OpenAI y puede descubrir modelos Ollama, LM Studio, llama.cpp y vLLM. Confirmar el servicio luego de instalar Ollama:

1
2
3
ollama --version
ollama list
curl http://127.0.0.1:11434/api/tags

Extraiga un modelo de comando adecuado para recursos nativos:

1
ollama pull qwen3:8b

Vuelva a probar el punto final compatible con OpenAI:

1
curl http://127.0.0.1:11434/v1/models

En la aplicación, apunte la URL base a la dirección de bucle invertido y seleccione la ID del modelo real.

La cadena alternativa de LLM local requiere verificación activa

La documentación del proyecto describe una secuencia resumida de respaldo que incluye LLM nativo, Groq, OpenRouter y el navegador T5. Si el objetivo es evitar que los datos salgan de la red, simplemente configurar Ollama no es suficiente. También elimine la clave de la nube, bloquee los nombres de dominio relacionados y confirme que el navegador no retroceda silenciosamente después de un tiempo de espera local. Detener el servicio de Ollama:

1
sudo systemctl stop ollama

Activar resumen nuevamente. Una configuración estrictamente fuera de línea debería indicar claramente que el servicio local no está disponible en lugar de generar un resumen en la nube.

PMTiles resuelve la dependencia del mapa base

Los mapas tradicionales solicitarán continuamente mosaicos en línea por ventana gráfica. PMTiles organiza mosaicos en archivos individuales que se pueden colocar en un disco local, NAS, almacenamiento de objetos o un servicio HTTP normal. Después de preparar el archivo, realice primero el servicio HTTP mínimo:

1
python3 -m http.server 9000 --directory /srv/pmtiles

Acceda al archivo PMTiles desde su navegador y confirme que las solicitudes de rango sean compatibles. Sin compatibilidad con Range, es posible que el mapa intente descargar el archivo grande completo o no pueda ubicar el mosaico. El proxy inverso debe conservar los encabezados relacionados con Range y Accept-Ranges.

Cómo elegir entre Cloudflare R2 y almacenamiento LAN

R2 es adecuado para servicios de red pública, puede reducir el ancho de banda del sitio de origen y proporcionar acceso a nivel de objeto. LAN MinIO, NAS o nginx son más adecuados para entornos aislados. Los archivos de mapas base pueden ser grandes, tener un tamaño de registro y hash antes de publicarlos:

1
2
sha256sum world.pmtiles
du -h world.pmtiles

Después de que el cliente configure la URL, use el navegador para confirmar la solicitud y devolver 206 Partial Content.

Redis no es un umbral estricto para la prueba local

El desarrollo por parte de una sola persona no requiere la implementación de un sistema de caché completo. Los servicios de red pública o para varias personas requieren que Redis controle las tormentas de actualización, almacene en caché los resultados iniciales y limite el tráfico. Iniciar Redis local:

1
2
docker run --rm --name worldmonitor-redis \
  -p 127.0.0.1:6379:6379 redis:7-alpine

Verificación:

1
docker exec worldmonitor-redis redis-cli ping

Debe devolverse PONG. Redis no debe exponerse directamente a la red pública y no depender de la configuración sin contraseña predeterminada para el acceso entre hosts.

Cómo determinar el puesto de responsabilidad cuando falla una fuente de datos externa

Comience verificando la URL, el código de estado y el tiempo de respuesta de la solicitud del navegador. 401 o 403 suele ser una clave, una cuota o un rango de autorización. 429 indica limitación de velocidad. Agregar reintentos puede agravar el problema. 5xx necesita distinguir su propio proxy, servicio ascendente y capa de caché. Un array vacío no necesariamente es un fallo, puede ser que no haya datos para la región y rango de tiempo. Guarde el ID de la solicitud y el encabezado de la respuesta, no se limite a tomar una captura de pantalla del panel en blanco.

El AIS y la transmisión en tiempo real no pueden ser reemplazados por una construcción estática

Las capas de interferencia AIS, de vuelo y de GPS de envío dependen de flujos de datos continuos o semillas periódicas. Pure nginx SPA solo puede mostrar datos existentes y llamar a interfaces ascendentes. Cuando necesite autohospedar flujos relacionados, lea scripts/ais-relay.cjs y Configuración de implementación para confirmar los permisos del proveedor de datos. No refleje ni vuelva a publicar incondicionalmente fuentes de datos vistas en páginas web públicas.

Activar la verificación de estado y la supervisión de la actualización de los datos

La aplicación puede devolver 200, lo que no significa que se estén actualizando los datos. El monitoreo se divide en al menos tres niveles: páginas estáticas, puntos finales API y frescura de las semillas. Registre el último momento de éxito y el número de fallos consecutivos para cada fuente de datos. No se debe marcar todo el sitio como completamente saludable cuando las noticias aún se están actualizando y el mercado está a la baja.

Ejecute las comprobaciones propias del proyecto antes de construir

1
2
3
4
npm run typecheck
npm run test:data
npm run test:e2e
npm run build:full

La existencia del comando se basa en el repositorio actual package.json y make help. Cuando la prueba de datos falla, no elimine la fuente del error para que el CI se vuelva verde. Primero confirme si el formato ha cambiado. E2E requiere dependencias del navegador y datos de prueba estables, y la CI del contenedor requiere memoria compartida reservada.

El proxy inverso solo abre la entrada requerida

La implementación de la red pública utiliza HTTPS y deja el extremo de administración, Redis, Ollama y los puntos finales internos en la red privada. Ollama no debería estar expuesto directamente a Internet de forma predeterminada. Si el front-end y la API están en dominios separados, establezca explícitamente la lista de permitidos de CORS. No utilice una combinación que permita que cualquier origen también lleve credenciales.

Haz un simulacro de desconexión real

Desconectarse de Internet después de cargar un panel es propenso a generar falsos positivos porque el trabajador del servicio, la caché del navegador y IndexedDB aún contienen datos antiguos. Primero borre el perfil de prueba, bloquee los nombres de dominio externos y luego vuelva a abrir la aplicación. Registre qué paneles son normales, cuáles muestran caché antiguo y cuáles informan errores. Compruebe que la marca de tiempo identifique claramente que los datos han caducado. El modo sin conexión debería degradarse con elegancia en lugar de disfrazar la información antigua como información en tiempo real.

Preservar la variante y la configuración del mapa al actualizar

Guarde la confirmación, el nombre de la variable .env.local, la URL de PMTiles, el esquema de Redis y la configuración del proxy inverso antes de realizar la actualización.

1
2
3
git fetch --tags
git log --oneline --decorate -10
git diff -- .env.example docker/ deploy/

Primero cree el nuevo árbol de trabajo, no sobrescriba directamente el directorio en ejecución. El formato de configuración del almacenamiento local del front-end puede cambiar. Verifique la variante, capa y ciclo de actualización después de la actualización.

Lista de determinación completada por el autohospedaje

  • Se puede crear la página con la variante requerida.
  • Los puertos de imágenes de Docker surgen de una inspección, no de conjeturas.
  • Todas las claves API están fuera de Git.
  • No va silenciosamente a la nube cuando falla el LLM local.
  • PMTiles devuelve una solicitud de rango.
  • Redis, Ollama y los servicios internos no están expuestos a la red pública.
  • Cada fuente de datos en tiempo real tiene una última hora de actualización.
  • La prueba fuera de línea puede distinguir entre caché y disponibilidad real.
  • Licencia comprobada para uso comercial.

Los límites del autohospedaje de World Monitor dependen de cuántas fuentes de datos en vivo conserve. Primero, dibujar claramente las dependencias de la red y luego decidir si usar una interfaz local, un resumen de privacidad o un aislamiento completo es más confiable que seguir directamente “un comando de Docker”.

Primero distinga entre páginas web, CLI, API REST y MCP

Esta sección resuelve el problema de “primero distinguir entre páginas web, CLI, API REST y MCP”. Primero registre el estado actual, luego realice la acción mínima y finalmente confirme el resultado con evidencia independiente.

Para World Monitor, esto se basa en lo siguiente: los MCP públicos permiten que se enumeren las herramientas, pero las llamadas que requieren autorización aún requieren una clave API u OAuth; La información agregada devuelta debe rastrearse hasta la fuente original. No abra accidentalmente más permisos en esta etapa.

1
npx worldmonitor tools

Conservar la salida del comando y la marca de tiempo después de la ejecución. Si la salida depende de variables temporales en la terminal actual, abra una nueva terminal y verifique nuevamente.

¿Qué se puede verificar al exponer herramientas/lista?

Procese en el siguiente orden:

  1. Lea la versión real y la configuración actual.
  2. Cambie solo una configuración relevante para esta sección.
  3. Ejecute una solicitud de solo lectura o revocable.
  4. Verifique los registros, los códigos de salida y los archivos finales.
  5. Revierta la modificación anterior si falla.
1
2
npm install -g worldmonitor
worldmonitor tools

El estándar de finalización aquí no es la apariencia de la interfaz, sino “lo que se puede verificar mediante herramientas/listas públicas” con resultados repetibles.

Obtener y guardar la clave API de World Monitor

Qué comprobar Rendimiento aceptable Señales de que debes parar
Obtener y guardar la clave API de World Monitor Claro alcance de entrada y salida Expandir automáticamente a otros proyectos o cuentas
Permisos Obtenga solo los permisos que necesita para completar la tarea Requerir derechos de administrador o clave completa
Iniciar sesión No se pudo localizar y ha sido insensibilizado Aparece Token, Cookie o texto privado
Revertir Puede restaurar el estado anterior Las modificaciones son irreversibles y no hay respaldo
1
worldmonitor risk IR --api-key wm_xxx

Una vez que aparezca la señal de parada en la tabla, deshaga primero los cambios en esta sección y no continúe con la automatización posterior.

Registrar MCP HTTP transmitible en Codex

Prepare una muestra de éxito y una muestra de error sobre “Registro de MCP HTTP transmitible en Codex”. Las muestras exitosas verifican la ruta normal y las muestras fallidas verifican si las restricciones realmente surten efecto.

1
2
# MCP URL
https://worldmonitor.app/mcp

Se recomienda registrar los siguientes cuatro elementos:

  • Versión previa a la ejecución o confirmación de Git.
  • Entrada real, no se registra ningún valor secreto.
  • Salida observable, código de estado o diferencia.
  • Acciones de recuperación y revisión de resultados tras la recuperación.

Si la causa del error aún no está clara, modifique sólo una variable a la vez; no cambie el puerto, el tiempo de ejecución, el proveedor y el proxy al mismo tiempo.

Utilice CLI para ejecutar primero una consulta de riesgo país

Esta sección aborda “Uso de la CLI para ejecutar primero una consulta de riesgo país”. Primero registre el estado actual, luego realice la acción mínima y finalmente confirme el resultado con evidencia independiente.

Restringir los resultados de MCP a investigación de solo lectura

1
worldmonitor tools

El criterio de finalización aquí no es la apariencia de la interfaz, sino “restringir los resultados de MCP a estudios de solo lectura” con resultados reproducibles.

Cómo devolver extractos de noticias a la fuente original

Qué comprobar Rendimiento aceptable Señales de que debes parar
Cómo devolver resúmenes de noticias a la fuente original Claro alcance de entrada y salida Expandir automáticamente a otros proyectos o cuentas
Permisos Obtenga solo los permisos que necesita para completar la tarea Requerir derechos de administrador o clave completa
Iniciar sesión No se pudo localizar y ha sido insensibilizado Aparece Token, Cookie o texto privado
Revertir Puede restaurar el estado anterior Las modificaciones son irreversibles y no hay respaldo

Los datos de mercado y geográficos no se pueden confundir

Prepare una muestra de éxito y una muestra de fracaso en torno a “No se pueden confundir los datos geográficos y de mercado”. Las muestras exitosas verifican la ruta normal y las muestras fallidas verifican si las restricciones realmente surten efecto.

Maneja 401, 403 y la lista de herramientas está vacía

Esta sección resuelve “Manejo de 401, 403 y lista de herramientas vacía”. Primero registre el estado actual, luego realice la acción mínima y finalmente confirme el resultado con evidencia independiente.

1
curl.exe -i https://worldmonitor.app/mcp

Controlar el alcance de la consulta y el costo de la llamada

El estándar de finalización aquí no es la apariencia de la interfaz, sino “controlar el alcance de la consulta y el costo de la llamada” para obtener resultados repetibles.

Revocar claves y eliminar la configuración de MCP

Qué comprobar Rendimiento aceptable Señales de que debes parar
Revocar claves y eliminar configuraciones de MCP Claro alcance de entrada y salida Expandir automáticamente a otros proyectos o cuentas
Permisos Obtenga solo los permisos que necesita para completar la tarea Requerir derechos de administrador o clave completa
Iniciar sesión No se pudo localizar y ha sido insensibilizado Aparece Token, Cookie o texto privado
Revertir Puede restaurar el estado anterior Las modificaciones son irreversibles y no hay respaldo
1
npm uninstall -g worldmonitor

Una lista de verificación de verificación de inteligencia replicable

Prepare una muestra de éxito y una muestra de fracaso en torno a “una lista de verificación de verificación de inteligencia replicable”. Las muestras exitosas verifican la ruta normal y las muestras fallidas verifican si las restricciones realmente surten efecto.

Cómo elegir entre OAuth y clave API

Esta sección resuelve “Cómo elegir OAuth y clave API”. Primero registre el estado actual, luego realice la acción mínima y finalmente confirme el resultado con evidencia independiente.

Limitar los países e indicadores que se pueden consultar

El criterio de finalización aquí no es que aparezca la interfaz, sino que “limitar los países y los indicadores que se pueden consultar” tenga resultados repetibles.

Validación cruzada de dos fuentes para el mismo evento

Qué comprobar Rendimiento aceptable Señales de que debes parar
Validación cruzada de dos fuentes para el mismo evento Claro alcance de entrada y salida Expandir automáticamente a otros proyectos o cuentas
Permisos Obtenga solo los permisos que necesita para completar la tarea Requerir derechos de administrador o clave completa
Iniciar sesión No se pudo localizar y ha sido insensibilizado Aparece Token, Cookie o texto privado
Revertir Puede restaurar el estado anterior Las modificaciones son irreversibles y no hay respaldo

Eliminar conexiones muertas de World Monitor

Prepare una muestra de éxito y una muestra de error sobre “Eliminar conexión inactiva de World Monitor”. Las muestras exitosas verifican la ruta normal y las muestras fallidas verifican si las restricciones realmente surten efecto.

Preguntas frecuentes sobre Monitor Mundial

¿Es posible omitir el entorno de prueba y usar World Monitor directamente en el proyecto oficial?

No recomendado. Primero complete al menos una solicitud de éxito mínimo, una falla intencional y un simulacro de recuperación.

El comando World Monitor se puede ejecutar pero el resultado es incorrecto, ¿dónde debo verificar primero?

Primero verifique el rango de entrada, la configuración efectiva real y la respuesta ascendente, y luego verifique el resumen del modelo. Un proceso normal no significa que los resultados del negocio sean correctos.

¿Cómo evitar que las claves o tokens de World Monitor ingresen a Git?

Utilice variables de entorno del sistema, administración de secretos o archivos de configuración fuera del proyecto y busque diferencias antes de confirmar. Las claves deben rotarse después de que se descubre una infracción.

¿Qué es lo que más comúnmente se pasa por alto al actualizar World Monitor?

Es más fácil pasar por alto el formato de configuración, la dirección de escucha predeterminada, el alcance de los permisos y la compatibilidad de la caché. Guarde la versión y los ejemplos de verificación antes de actualizar.

Información del proyecto

Notas de autoalojamiento de World Monitor con Docker Compose

koala73/worldmonitor es un panel global de inteligencia en tiempo real para agregar noticias, eventos geopolíticos, estado de infraestructura y distintos canales temáticos. Se parece más a una página de conciencia situacional y funciona bien como punto de entrada autohospedado para monitoreo de noticias.

Repositorio del proyecto:

https://github.com/koala73/worldmonitor

Sitio oficial:

https://worldmonitor.app

Inicio local

Los comandos de inicio rápido del README son:

1
2
3
4
git clone https://github.com/koala73/worldmonitor.git
cd worldmonitor
npm install
npm run dev

Después de iniciar, comprueba primero que la página predeterminada funcione antes de pensar en desplegar.

Cómo ejecutar distintos canales

El proyecto incluye varios comandos de desarrollo por canal:

1
2
3
4
5
npm run dev:tech       # tech.worldmonitor.app
npm run dev:finance    # finance.worldmonitor.app
npm run dev:commodity  # commodity.worldmonitor.app
npm run dev:happy      # happy.worldmonitor.app
npm run dev:energy     # energy.worldmonitor.app

Si solo te interesan las noticias tecnológicas, empieza con dev:tech. Si te interesan finanzas o materias primas, prueba dev:finance y dev:commodity.

Build y comprobaciones

Antes de hacer commit o desplegar, conviene ejecutar:

1
2
npm run typecheck
npm run build:full

Estos comandos pueden detectar antes problemas de tipos en TypeScript y fallos de build de producción.

Usos adecuados

World Monitor encaja para:

  1. Crear una entrada propia de noticias en tiempo real.
  2. Montar paneles temáticos para un equipo, como tecnología, energía, finanzas o materias primas.
  3. Observar flujos de noticias de múltiples fuentes, en vez de depender solo de las recomendaciones de una plataforma.
  4. Extenderlo como dashboard interno de inteligencia.

Sugerencias de despliegue

El README menciona una self-hosting guide, y las opciones de despliegue incluyen Vercel, Docker y despliegue estático. Conviene hacerlo funcionar primero en local y luego desplegarlo en Vercel o en tu propio servidor.

Al usarlo, recuerda que un panel de agregación de noticias solo te ayuda a ver señales más rápido. No significa que toda la información esté verificada. Para contenidos financieros, geopolíticos o de seguridad, es mejor abrir las fuentes originales y cruzar la información.