このプロジェクトについて
訪問者統計は、Cloudflare Pages、Workers、D1、GitHubをベースにした軽量な訪問者追跡システムです。核となるアイデアは、画像に偽装した追跡ピクセルでアクセスを記録することです。画像とフロントエンドはCloudflareエッジでホストされ、ログはD1に永続保存され、Telegram経由でリアルタイム通知を送信できます。
主な機能は、追跡ピクセルのアップロードと埋め込み、時間、IP、所在地、通信事業者、デバイス、OS、ブラウザ、参照元を含む詳細ログ記録、今日、7日間、30日間、3ヶ月、1年の柔軟な統計範囲と識別子によるフィルタリング、デバイスフィンガープリントを含みボタンが自動的に現在のドメインを指すTelegramリアルタイム通知、Webページ上の画像管理(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 Botを作成してトークンとchat_idを取得、GitHub Fine-grained PATを作成、Pagesプロジェクトを作成してGit自動デプロイを無効化(ビルドの無駄を避けるため)、Deploy Hookを作成、カスタムドメインをバインド、環境変数とバインディングを一括設定、手動でRetry deploymentを実行して初回デプロイを完了します。初回ログイン時に管理パネルが自動的にvisits、daily_summary、img_indexの3つのテーブルを作成します。
使用時には、画像管理で識別子を追加して画像をアップロードし、保存してデプロイすると追跡リンク(例:https://あなたのドメイン/nezha.png)が取得できます。これをHTMLやメールに埋め込むと統計が取れます。概要ページでは、今日、昨日、過去7日間、過去1年間のサマリーと折れ線グラフが表示され、詳細ログページでは日付、識別子、IPでフィルタリングしてページネーションで閲覧できます。管理パネルへのアクセス自体は_panel追跡ポイントで記録され、未ログイン時のアクセスでトリガーされ、ログイン後のリフレッシュではトリガーされません。
注意点として、D1の無料枠は5GBストレージ、1日10万書き込み、1日500万読み取り、GitHubリポジトリは1GB以下推奨、1枚の画像は8MB以下、対応形式はPNG、JPG、GIF、WebP、SVG、識別子は英数字、アンダースコア、ハイフンで長さ1~64、予約識別子_panelがあります。Telegram通知は同一IPで60秒以内に1回のみプッシュ、同一/24セグメントでクールダウンを共有、クローラーUAとスピードテストサイトのRefererはプッシュしません。Git自動デプロイを無効にした場合、画像のアップロードは管理パネルから保存してデプロイをトリガーする必要があり、環境変数を変更した後は再デプロイが必要です。セキュリティ面では、強力なパスワード、最小限のPAT権限、Deploy Hook URLの非公開が推奨されます。データは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.