このプロジェクトについて

## プロジェクト概要 `bsz`(Busuanzi)は、不蒜子(Busuanzi)統計インターフェースと互換性のあるセルフホスト型訪問者統計システムです。バックエンドはRustで実装され、コンパイル後は単一のバイナリファイルを生成し、外部ライブラリに依存しないため、運用コストを大幅に削減します。フロントエンドはbun workspacesを採用し、独立したランディングページとオプションの管理画面を提供し、ニーズに応じて個別にデプロイできます。 ## 主な機能 - **単一バイナリ・ゼロ依存**: バックエンドは実行ファイル1つで、VPS・Dockerまたはシステムサービスにデプロイ可能。 - **不蒜子API互換**: 既存の不蒜子スクリプトを使用しているサイトは、統計インターフェースのアドレスを変更するだけで移行可能。 - **完全な前後端分離**: バックエンドはJSON APIを提供し、Landingは純粋な静的ページ、AdminはSPAで、三者は独立してデプロイまたは組み合わせ可能。 - **オプションの管理画面**: `ADMIN_TOKEN`を設定することでAdmin APIを有効化。未設定時はバックエンドルートが存在せず、セキュリティ性が高い。 - **軽量フロントエンド**: Landingは純粋な静的リソースで、GitHub PagesやCloudflare Pagesなどの静的サイトホストに展開可能。AdminはVite + React(または類似)で構築されたSPA。 - **手軽なローカルデバッグ**: `cargo run`および`bun run dev:*`によるクイック起動スクリプトを提供し、開発・演示に適す。 ## アーキテクチャ説明 ``` . ├── backend/ # Rust バックエンド、/api/* 統計インタフェースおよびオプションの/api/admin/* 管理インタフェースを提供 └── frontend/ # bun workspaces └── packages/ ├── shared/ # UI コンポーネント、テーマ、Tailwind 設定 ├── landing/ # ランディングページ(apex)、純粋な静的 └── admin/ # 管理画面 SPA(dash)、オプション展開 ``` - **backend**: `actix-web`(または類似)ベースで実装され、デフォルトは統計ルートのみのマウント。環境変数 `ADMIN_TOKEN` が非空の場合は追加で管理ルートをマウント。 - **landing**: 静的HTML・CSS・JSのみを含み、訪問者カウント、ドキュメントリンク、管理画面へのエントリを表示。 - **admin**: ログイン後にリアルタイム訪問者データ・履歴統計・IP黑名单などの機能を確認可能。すべてのリクエストはバックエンドAdmin APIによる認証を経て実行される。 ## クイックスタート(5分で動作確認) ```bash # 1. バックエンドを起動(Terminal 1) cd backend && ADMIN_TOKEN=test-token cargo run # 2. Landing を起動(Terminal 2) cd frontend && bun install bun run dev:landing # http://localhost:12702 にアクセス # 3. Admin を起動(Terminal 3) bun run dev:admin # http://localhost:12705 にアクセス ``` ## デプロイガイド ### バックエンドデプロイ - **バイナリ**: `cargo build --release` で `target/release/bsz` を生成し、サーバーにコピーして `ADMIN_TOKEN`(任意)や `PORT` などの環境変数を設定。 - **systemd**: サンプルunitファイルを提供し、起動時自動開始・ログ管理を実現。 - **nginx リバースプロキシ**: `/api/` パスをバックエンドに転送し、静的リソースはCDNでホスト可能。 ### Landing デプロイ ```bash bun run build:landing # 出力先は frontend/packages/landing/dist/ # dist/ ディレクトリを GitHub Pages、Cloudflare Pages または任意の静的ホストサービスにアップロード ``` ### Admin デプロイ ```bash VITE_API_BASE_URL=https://api.example.com \ bun run build:admin # 出力先は frontend/packages/admin/dist/ # 同様に静的ホストプラットフォームにデプロイでき、アクセス時にバックエンドURLとADMIN_TOKENを入力して連携 ``` ## 設定説明 - `ADMIN_TOKEN`: 非空の場合、バックエンドが `/api/admin/*` をマウントし、フロントエンドAdminのログイン時に同じトークンで認証を行う。 - `VITE_API_BASE_URL`: Admin フロントエンドのビルド時にバックエンドAPIのベースURLを注入。 - その他の環境変数(`PORT`、`RATE_LIMIT` など)は `backend/.env` で既定値を確認。 ## ライセンス 本プロジェクトはMITライセンスの下で提供され、自由な利用・修正・配布が可能。 --- より詳細なドキュメントについては、リポジトリ内の `backend/README.md`、`frontend/packages/landing/README.md`、`frontend/packages/admin/README.md` をご参照ください。