Об этом проекте

## Project Introduction `bsz` (Busuanzi) — это самостоятельно размещаемая система подсчёта посетителей, совместимая с интерфейсом статистики Busuanzi (不蒜子). Бэкенд написан на Rust, после компиляции выдаёт один бинарный файл без внешних зависимостей, что значительно снижает эксплуатационные расходы. Фронтенд реализован с использованием bun workspaces и включает независимую landing‑страницу и опциональную админ‑панель, которые можно развёртывать отдельно по требованию. ## Main Features - **Один бинарник, нулевые зависимости**: бэкенд требует только один исполняемый файл, который можно разместить на VPS, в Docker или как системную службу. - **Совместимость с API Busuanzi**: существующие сайты, использующие скрипт Busuanzi, могут перейти на новый сервис, просто изменив URL статистического интерфейса. - **Полное разделение фронтенда и бэкенда**: бэкенд предоставляет JSON API, landing — чистая статическая страница, админ‑панель — SPA; их можно развёртывать независимо или совместно. - **Опциональная админ‑панель**: при установке переменной окружения `ADMIN_TOKEN` активируются эндпоинты `/api/admin/*`; без неё маршруты админ‑панели отсутствуют, что повышает безопасность. - **Лёгкий фронтенд**: landing использует только статические ресурсы и может размещаться на GitHub Pages, Cloudflare Pages и аналогичных сервисах; админ‑панель собирается через Vite + React (или аналогичный стек) в SPA. - **Простота локальной отладки**: доступны скрипты `cargo run` и `bun run dev:*` для быстрого запуска, подходящие для разработки и демонстрации. ## Architecture Explanation ``` . ├── backend/ # Rust бэкенд, предоставляющий эндпоинты /api/* для статистики и опциональные /api/admin/* для управления └── frontend/ # bun workspaces └── packages/ ├── shared/ # UI‑компоненты, темы, пресеты Tailwind ├── landing/ # landing‑страница (apex), чистая статика └── admin/ # SPA админ‑панели (dash), опциональное развёртывание ``` - **backend**: построен на `actix-web` (или аналогичном фреймворке); по умолчанию монтируются только маршруты статистики. Если переменная окружения `ADMIN_TOKEN` не пуста, дополнительно монтируются маршруты админ‑панели. - **landing**: содержит только статический HTML, CSS и JS; отображает счётчик посетителей, ссылки на документацию и вход в админ‑панель. - **admin**: после входа позволяет просматривать реальное время посещаемости, историческую статистику, чёрный список IP и т.д.; все запросы проходят через админ‑API бэкенда с проверкой авторизации. ## Quick Start (5 minutes) ```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. Запуск админ‑панели (Terminal 3) bun run dev:admin # открыть http://localhost:12705 ``` ## Deployment Guide ### Backend Deployment - **Бинарный файл**: `cargo build --release` создаёт `target/release/bsz`; скопируйте его на сервер, настройте переменные окружения `ADMIN_TOKEN` (опционально) и `PORT`. - **systemd**: пример unit‑файла обеспечивает автозапуск при старте системы и управление логами. - **nginx reverse proxy**: направьте путь `/api/` на бэкенд, статические ресурсы можно отдавать через CDN. ### Landing Deployment ```bash bun run build:landing # артефакты находятся в frontend/packages/landing/dist/ # загрузите содержимое dist/ в GitHub Pages, Cloudflare Pages или любой статический хостинг ``` ### Admin Deployment ```bash VITE_API_BASE_URL=https://api.example.com \ bun run build:admin # артефакты находятся в frontend/packages/admin/dist/ # аналогично разместите на статическом хостинге; при открытии укажите URL бэкенда и ADMIN_TOKEN для привязки ``` ## Configuration - `ADMIN_TOKEN`: если не пуста, бэкенд монтирует эндпоинты `/api/admin/*`; фронтенд админ‑панели использует тот же токен для аутентификации. - `VITE_API_BASE_URL`: переменная, внедряемая во время сборки фронтенда админ‑панели, указывающая базовый URL API бэкенда. - Другие переменные окружения (например, `PORT`, `RATE_LIMIT`) можно посмотреть со значениями по умолчанию в `backend/.env`. ## License Проект распространяется под лицензией MIT, разрешающей свободное использование, модификацию и распространение. --- Для более подробной документации см. файлы `backend/README.md`, `frontend/packages/landing/README.md` и `frontend/packages/admin/README.md` в репозитории.