Sobre el proyecto
El sistema de estadísticas de visitantes es un sistema ligero de seguimiento de visitantes basado en Cloudflare Pages más Workers más D1 más GitHub. La idea central es registrar las visitas mediante un píxel de seguimiento disfrazado de imagen; la imagen y el frontend se alojan en el borde de Cloudflare, los registros se guardan permanentemente en D1 y se pueden enviar notificaciones en tiempo real a través de Telegram.
Las funciones principales incluyen la carga e inserción del píxel de seguimiento, el registro detallado de hora, IP, ubicación, operador, dispositivo, sistema, navegador y origen, rangos de estadísticas flexibles compatibles con hoy, 7 días, 30 días, 3 meses y 1 año, con filtrado por identificador, notificaciones en tiempo real por Telegram con huella del dispositivo y botones que apuntan automáticamente al dominio actual, gestión de imágenes desde la web que se suben al repositorio de Git y activan automáticamente el despliegue de Pages, un panel de administración de monitorización del punto de seguimiento _panel integrado, anti-scraping y anti-test de velocidad mediante lista negra de UA y enfriamiento del segmento /24, y almacenamiento de datos puramente en D1 para evitar problemas de cuota de escritura.
En cuanto a la arquitectura, la solicitud del visitante GET /nezha.png es procesada por Cloudflare Worker; el frontend lee los recursos estáticos de Git y devuelve la imagen; el backend, mediante ctx.waitUntil, escribe en D1 los registros detallados y el resumen diario y envía la notificación a Telegram. El administrador sube imágenes al Worker a través del panel de administración; el Worker escribe en el repositorio de Git y activa el Deploy Hook para reconstruir Pages, y luego consulta D1 para devolver estadísticas y registros. Los componentes incluyen Cloudflare Pages que aloja index.html y _worker.js, Cloudflare D1 que almacena registros de acceso, resúmenes diarios e índice de imágenes, Cloudflare Workers que procesa API y solicitudes de imágenes, el repositorio de GitHub que almacena los binarios de imágenes en public/pic, y Telegram Bot API para enviar notificaciones.
El despliegue requiere una cuenta de Cloudflare, una cuenta de GitHub, una cuenta de Telegram y un dominio opcional. Es necesario preparar 7 variables de entorno: PASSWORD, GITHUB_TOKEN, REPO_NAME, BRANCH, CF_DEPLOY_HOOK_URL, TG_ID, TG_TOKEN, y 1 enlace D1 DB. El proceso consiste en crear el repositorio con la plantilla, crear la base de datos D1, crear el Bot de Telegram y obtener el token y el chat_id, crear un GitHub Fine-grained PAT, crear el proyecto de Pages y desactivar el despliegue automático de Git para evitar desperdicio de compilaciones, crear el Deploy Hook, vincular un dominio personalizado, configurar de forma unificada las variables de entorno y los enlaces, y hacer manualmente Retry deployment para completar el primer despliegue. El primer inicio de sesión en el panel de administración creará automáticamente las tres tablas visits, daily_summary e img_index.
Al usarlo, se añade un identificador en la gestión de imágenes y se sube la imagen; tras guardar y desplegar se obtiene el enlace de seguimiento, por ejemplo https://tu-dominio/nezha.png, que se puede insertar en HTML o correo para realizar el seguimiento. La página de resumen ofrece los totales de hoy, ayer, últimos 7 días y último año, además de gráficos de curvas; la página de registros detallados permite filtrar y paginar por fecha, identificador e IP. El propio acceso al panel de administración queda registrado por el punto de seguimiento _panel; el acceso sin iniciar sesión lo activa, mientras que refrescar con sesión iniciada no lo activa.
Las precauciones incluyen que la cuota gratuita de D1 es de 5 GB de almacenamiento, 100.000 escrituras por día y 5 millones de lecturas por día; se recomienda que el repositorio de GitHub no supere 1 GB y que cada imagen no supere 8 MB; se admiten PNG, JPG, GIF, WebP y SVG; el identificador debe estar formado por letras, números, guiones bajos y guiones, con longitud de 1 a 64; el identificador _panel está reservado. Las notificaciones de Telegram solo se envían una vez por la misma IP en 60 segundos, el mismo segmento /24 comparte enfriamiento, y no se envían para UA de rastreadores ni Referer de sitios de test de velocidad. Tras desactivar el despliegue automático de Git, las imágenes subidas deben guardarse y desplegarse desde el panel de administración para activarlo; tras modificar las variables de entorno es necesario volver a desplegar. Por seguridad se recomienda usar una contraseña fuerte, minimizar los permisos del PAT y no hacer público el URL del Deploy Hook. Los datos se pueden exportar y respaldar con wrangler d1 export. En la configuración avanzada se pueden modificar en _worker.js los días de retención STATS_DAYS y el tiempo de enfriamiento PUSH_COOLDOWN_SEC, así como personalizar las expresiones regulares de la lista negra de UA y Referer.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.