← Files

BAS-IP Gate Manager#

Система управления шлагбаумом BAS-IP для жилого комплекса — жители, оплаты, гостевой доступ, журнал открываний, рассылки и REST API в одном application, которое поднимается за пять минут и работает на PHP 8.2+ без единого внешнего CDN.

v2 «Kronos» — полный рефакторинг v1 (один файл bas-ip.php с токеном в репозитории)
в product-grade приложение: роли и права, биллинг с перерасчётами, гостевые пропуски
с QR-кодом, журнал каждого открывания, рассылки, бэкапы, автообновление, Tailwind CSS

  • shadcn/ui с тёмной темой и полностью автономный набор ассетов.
    Исходный код v1 навсегда сохранён в ветке main.


Зачем это нужно#

В жилом комплексе со шлагбаумом BAS-IP постоянно крутится одна и та же рутина:
кто-то платит за обслуживание, кто-то забывает; курьерам и гостям нужно открывать
ворота; председатель хочет знать, кто и когда заезжал. BAS-IP Gate Manager закрывает
весь цикл:

Возможности#

Блок Детали
Аутентификация логин / e-mail / номер телефона в любом написании (bcrypt/argon2id), 2FA TOTP, «запомнить меня», сброс пароля по e-mail, блокировка после серии неудач, управление сессиями; учётки жителей создаются одной кнопкой: логин = телефон, пароль генерируется
Роли admin (всё), operator (жители, касса, шлагбаум, рассылки), resident (свой кабинет) + 40+ точечных прав
Жители карточка с историей: счета, оплаты, машины, контакты, гостевые пропуска, открывания, комментарии; мягкое удаление и восстановление
Биллинг начисления (charges) → счета (invoices) → оплаты (payments) с FIFO-распределением, переплата на балансе, перерасчёт, должники, напоминания, пени-статусы «просрочен»
Шлагбаум драйверы: панель BAS-IP Camdroid (/api/v0), произвольное HTTP-реле, эмулятор (dry-run); несколько устройств; камера привязана к шлагбауму: кадры через сервер, MJPEG-поток через прокси или прямой поток; SIP вкл/выкл; перезагрузка
Пульт жителя полноэкранный /remote: гигантская кнопка «ОТКРЫТЬ» (~95% экрана) с полноэкранным откликом и вибрацией, живая камера выбранного шлагбаума, переключатель камер, Wake Lock — управление одной рукой из машины
Гостевой доступ подписанные ссылки, QR, код из 6 символов без неоднозначных глифов, PIN для панели, лимиты на жителя и на дом, авто-истечение
Уведомления каналы: log, SMTP/e-mail, Telegram (бот + рассылки), SMS, WhatsApp, webhook; очередь с ретраями; шаблоны с подстановками {name}, {amount}, {pay_link}…
Данные импорт жителей из CSV/JSON/Excel с инспекцией и маппингом колонок, экспорт всего, бэкапы БД (mysqldump/pg_dump/sqlite) с восстановлением
Безопасность CSP с nonce, CSRF, rate-limit на всё, security-заголовки, шифрование секретов (AES-256-GCM), аудит-лог, IP-allowlist, hardened-сессии
Эксплуатация веб-установщик, bin/bas-ip (71 команда), cron-планировщик, режим обслуживания, /health + /metrics, автообновление из GitHub с бэкапом и откатом
UI Tailwind CSS + shadcn/ui-токены, светлая/тёмная тема (переключатель, авт по системе, сохранение), mobile-first, PWA-манифест, командная палитра, всё локально — без CDN

Быстрый старт (5 минут)#

Требования: PHP 8.2+ (рекомендуется 8.5) с расширениями pdo, mbstring, curl,
json, openssl, zip; любая из MySQL 8 / MariaDB 10.6+ / PostgreSQL 13+ / SQLite 3.

git clone https://github.com/paulmann/BAS-IP.git
cd BAS-IP
php bin/bas-ip serve            # встроенный сервер → http://localhost:8080

Откройте http://localhost:8080 — мастер установки проверит окружение,
протестирует соединение с БД и панелью, создаст .bas-ip.config.local.php
(он в .gitignore: секреты не попадут в репозиторий и не потеряются при
обновлении), применит миграции, создаст администратора (пароль генерируется
автоматически — можно заменить) и сразу войдёт в админку; по желанию
заполнит демо-данные.

Для production: веб-сервер должен смотреть в public/
(nginx, Apache — готовые конфиги в wiki),
storage/ — доступна на запись, плюс cron:

* * * * * cd /var/www/bas-ip && php bin/bas-ip schedule:run --quiet

Конфигурация#

Все настройки — в config/config.php (значения по умолчанию, под git) и
.bas-ip.config.local.php в корне (ваши значения и секреты, вне git).
Порядок загрузки: локальный файл → .env → config по умолчанию. Секреты
(пароль устройства, токены ботов) можно хранить шифрованными:
php bin/bas-ip secret:set DEVICE_PASSWORD и ссылка ${secret:DEVICE_PASSWORD}
в конфиге. Полная справка по каждому ключу — wiki/03-Configuration.md.

Тесты#

php tests/run.php                      # SQLite (по умолчанию)
BASIP_TEST_DB=mysql php tests/run.php  # MySQL / MariaDB
BASIP_TEST_DB=pgsql php tests/run.php  # PostgreSQL
php tools/smoke.php                    # end-to-end: 68 проверок всех маршрутов

200 тестов / 850+ проверок: деньги (расщепление до копейки, FIFO оплат, перерасчёт),
аутентификация и права, гостевые пропуска, HTTP-слой (CSRF, заголовки, редиректы),
импорт/экспорт, 2FA/TOTP, обновления.

Документация#

Структура проекта#

bin/bas-ip            консоль (71 команда: migrate, billing:*, gate:*, backup:*, update:*)
config/               config.php (дефолты) + routes.php (таблица маршрутов)
database/migrations/  схема БД (переносима между MySQL/PostgreSQL/SQLite)
public/               документ-рут: index.php, ассеты (css/js/шрифты/иконки — всё локальное)
resources/            css-исходники Tailwind, views (PHP-шаблоны), встроенная справка
src/BasIp/            ядро: Core (контейнер/роутер/сессии), Db, Auth, Http, Domain,
                      Services, Notify, Device, Update, Console, Support
storage/              логи, бэкапы, экспорт, очередь, кэш, сессии (вне git)
tests/                200 тестов + smoke; tools/ — сборка ассетов и smoke-тесты
wiki/                 полная документация (GitHub Wiki)

Безопасность#

⚠️ Наследие v1: в истории ветки main лежит .api_token устройства.
Если вы использовали v1 с реальной панелью — отзовите/смените этот ключ
в настройках BAS-IP. v2 хранит токены устройств только в шифрованном виде.

Обновление версии#

Приложение умеет обновлять себя само: Админка → Система → Обновления или
php bin/bas-ip update:run. Перед установкой создаётся снимок файлов и бэкап БД,
локальный конфиг и storage/ никогда не перезаписываются, доступен откат
(update:rollback). Подробности — wiki/14-Updating.md.

Лицензия#

PolyForm Noncommercial 1.0.0 © Mikhail Deynekin — см. LICENSE.
Иконки — Lucide (ISC), шрифты — Inter и JetBrains Mono (OFL 1.1),
QR — qrcode-generator (MIT). Все зависимости вендорятся локально.