À propos du projet

## Présentation du projet `bsz`(Busuanzi) est un système de statistiques de visiteurs auto-hébergé, compatible avec l'interface de statistiques Busuanzi. Le backend est écrit en Rust et produit un seul fichier binaire après compilation, sans aucune dépendance externe, ce qui réduit considérablement les coûts d'exploitation. Le frontend utilise bun workspaces et propose une page de présentation(Landing) indépendante ainsi qu'un tableau de bord administrateur(Admin) optionnel, qui peuvent être déployés séparément selon les besoins. ## Principales fonctionnalités - **Binaire unique, zéro dépendance** : le backend ne nécessite qu'un seul exécutable, déployable sur un VPS, Docker ou un service système. - **Compatibilité API Busuanzi** : les sites utilisant déjà le script Busuanzi n'ont qu'à changer l'URL de l'interface de statistiques pour migrer. - **Découplage complet frontend/backend** : le backend fournit une API JSON, Landing est une page purement statique, Admin est une SPA, les trois peuvent être déployés indépendamment ou combinés. - **Tableau de bord administrateur optionnel** : activer l'API Admin via `ADMIN_TOKEN`. Sans configuration, les routes du backend n'existent pas, offrant une meilleure sécurité. - **Frontend léger** : Landing utilise des ressources statiques pures, hébergeables sur GitHub Pages, Cloudflare Pages ou autres plateformes statiques ; Admin est une application mono-page construite avec Vite + React. - **Débogage local aisé** : scripts de démarrage rapide `cargo run` et `bun run dev:*`, adaptés au développement et à la démonstration. ## Architecture ``` . ├── backend/ # Backend Rust, fournit les interfaces /api/* et optionnellement /api/admin/* └── frontend/ # bun workspaces └── packages/ ├── shared/ # Composants UI, thèmes, presets Tailwind ├── landing/ # Page de présentation(apex), purement statique └── admin/ # Tableau de bord administrateur SPA(dash), déploiement optionnel ``` - **backend** : basé sur `actix-web`(ou similaire), monte par défaut uniquement les routes de statistiques. Si la variable d'environnement `ADMIN_TOKEN` n'est pas vide, les routes administratives sont également montées. - **landing** : contient uniquement du HTML, CSS et JS statiques, affichant le compteur de visiteurs, les liens de documentation et l'accès au tableau de bord administrateur. - **admin** : après connexion, il est possible de consulter les données de visiteurs en temps réel, les statistiques historiques, les listes noires d'IP, etc. Toutes les requêtes sont authentifiées via l'API Admin du backend. ## Démarrage rapide(en 5 minutes) ```bash # 1. Démarrer le backend(Terminal 1) cd backend && ADMIN_TOKEN=test-token cargo run # 2. Démarrer Landing(Terminal 2) cd frontend && bun install bun run dev:landing # accéder à http://localhost:12702 # 3. Démarrer Admin(Terminal 3) bun run dev:admin # accéder à http://localhost:12705 ``` ## Guide de déploiement ### Déploiement du backend - **Binaire** : `cargo build --release` génère `target/release/bsz`, à copier sur le serveur avec configuration des variables d'environnement `ADMIN_TOKEN`(optionnel) et `PORT`. - **systemd** : fichier unit exemple fourni pour le démarrage automatique au boot et la gestion des logs. - **Proxy inverse nginx** : rediriger le chemin `/api/` vers le backend, les ressources statiques pouvant être gérées par un CDN. ### Déploiement de Landing ```bash bun run build:landing # les artefacts se trouvent dans frontend/packages/landing/dist/ # uploader le répertoire dist/ sur GitHub Pages, Cloudflare Pages ou tout autre service d'hébergement statique ``` ### Déploiement d'Admin ```bash VITE_API_BASE_URL=https://api.example.com \ bun run build:admin # les artefacts se trouvent dans frontend/packages/admin/dist/ # peut également être déployé sur une plateforme d'hébergement statique, entrer l'URL du backend et ADMIN_TOKEN lors de l'utilisation ``` ## Configuration - `ADMIN_TOKEN` : lorsqu'il n'est pas vide, le backend monte `/api/admin/*`, et l'Admin frontend utilise le même token pour l'authentification. - `VITE_API_BASE_URL` : adresse de base de l'API backend injectée lors de la construction du frontend Admin. - Les autres variables d'environnement(如 `PORT`, `RATE_LIMIT`)peuvent être consultées dans `backend/.env` pour les valeurs par défaut. ## Licence Ce projet est sous licence MIT, permettant un usage, une modification et une distribution libres. --- Pour une documentation plus détaillée, veuillez consulter `backend/README.md`, `frontend/packages/landing/README.md` et `frontend/packages/admin/README.md` dans le dépôt.