Об этом проекте
Статистика посетителей — это легковесная система отслеживания посетителей на базе Cloudflare Pages, Workers, D1 и GitHub. Основная идея — запись посещений через трекинговый пиксель, замаскированный под изображение; изображение и фронтенд размещаются на периферии Cloudflare, журналы навсегда сохраняются в D1, а уведомления могут отправляться в Telegram в реальном времени.
Основные функции включают загрузку и встраивание трекингового пикселя, подробное журналирование времени, IP, местоположения, оператора, устройства, системы, браузера и источника, гибкие диапазоны статистики: сегодня, 7 дней, 30 дней, 3 месяца, 1 год с фильтрацией по идентификатору, отправку в Telegram в реальном времени с отпечатком устройства и кнопками, автоматически указывающими на текущий домен, управление изображениями через веб-интерфейс с загрузкой в Git-репозиторий и автоматическим запуском развёртывания Pages, встроенную точку отслеживания _panel для мониторинга доступа к панели управления, защиту от парсеров и тестов скорости через чёрный список UA и охлаждение по сегменту /24, хранение данных исключительно в D1 во избежание проблем с квотами на запись.
В архитектуре запрос посетителя GET /nezha.png обрабатывается Cloudflare Worker: фронтенд читает статические ресурсы Git и возвращает изображение, бэкенд через ctx.waitUntil записывает подробные журналы и ежедневные сводки в D1 и отправляет уведомление в Telegram. Администратор через панель управления загружает изображения в Worker, Worker записывает их в Git-репозиторий и запускает Deploy Hook для пересборки Pages, затем запрашивает D1 и возвращает статистику и журналы. Компоненты включают Cloudflare Pages для размещения index.html и _worker.js, Cloudflare D1 для хранения журналов доступа, ежедневных сводок и индекса изображений, Cloudflare Workers для обработки API и запросов изображений, репозиторий GitHub для хранения бинарных изображений в public/pic, Telegram Bot API для отправки уведомлений.
Для развёртывания требуются аккаунт Cloudflare, аккаунт GitHub, аккаунт Telegram и опционально домен. Необходимо подготовить 7 переменных окружения: PASSWORD, GITHUB_TOKEN, REPO_NAME, BRANCH, CF_DEPLOY_HOOK_URL, TG_ID, TG_TOKEN, а также 1 привязку D1 DB. Процесс: создать репозиторий по шаблону, создать базу данных D1, создать Telegram-бота и получить token и chat_id, создать GitHub Fine-grained PAT, создать проект Pages и отключить автоматическое развёртывание Git во избежание лишних сборок, создать Deploy Hook, привязать пользовательский домен, единообразно настроить переменные окружения и привязки, вручную выполнить Retry deployment для завершения первого развёртывания. При первом входе в панель управления автоматически создаются три таблицы: visits, daily_summary, img_index.
При использовании добавьте идентификатор в управлении изображениями и загрузите изображение; после сохранения и развёртывания вы получите ссылку отслеживания, например https://ваш-домен/nezha.png, которую можно встроить в HTML или письмо для сбора статистики. Страница обзора предоставляет сводки за сегодня, вчера, последние 7 дней, последний год и графики, страница подробных журналов поддерживает постраничный просмотр с фильтрацией по дате, идентификатору, IP. Сам доступ к панели управления записывается точкой отслеживания _panel: доступ без входа вызывает запись, обновление после входа — нет.
Примечания: бесплатная квота D1 — 5 ГБ хранилища, 100 тысяч записей в день, 5 миллионов чтений в день; репозиторий GitHub рекомендуется не более 1 ГБ, одно изображение не более 8 МБ, поддерживаются PNG JPG GIF WebP SVG, идентификатор — буквы, цифры, подчёркивание, дефис, длина от 1 до 64, зарезервированный идентификатор — _panel. Уведомление в Telegram для одного IP отправляется только раз в 60 секунд, общее охлаждение для одного сегмента /24, UA парсеров и Referer сайтов тестирования скорости не отправляются. После отключения автоматического развёртывания Git загрузка изображений требует сохранения и развёртывания через панель управления, после изменения переменных окружения требуется повторное развёртывание. Рекомендации по безопасности: использовать надёжный пароль, минимизировать права PAT, не публиковать URL Deploy Hook. Данные можно экспортировать для резервного копирования через wrangler d1 export. В расширенной конфигурации можно изменить в _worker.js количество дней хранения STATS_DAYS и время охлаждения PUSH_COOLDOWN_SEC, а также настроить собственные регулярные выражения чёрного списка UA и Referer.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.