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.
|
|
Cuando la versión principal de Node no sea 22, use nvm para cambiar:
|
|
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:
|
|
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:
|
|
Preparará buf, el complemento sebuf, las dependencias npm y el navegador Playwright. Para ver solo la ayuda ejecute:
|
|
Servidor de desarrollo para la variante completa:
|
|
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:
|
|
La compilación de producción también tiene un comando correspondiente:
|
|
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:
|
|
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:
|
|
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:
|
|
Verifique el puerto expuesto de Dockerfile y la configuración de nginx antes de ejecutar. No adivines el puerto:
|
|
Suponiendo una exposición de imagen de 80, prueba de mapeo de solo bucle invertido disponible:
|
|
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:
|
|
Extraiga un modelo de comando adecuado para recursos nativos:
|
|
Vuelva a probar el punto final compatible con OpenAI:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
Verificación:
|
|
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
|
|
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.
|
|
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”.