# 17 · Миграция с v1 [← Home](Home.md) v1 — это один файл `bas-ip.php` (+ `config.php`, `css/`, `.api_token`), который открывал шлагбаум BAS-IP по кнопке и показывал снимок камеры. Код v1 навсегда сохранён в ветке [`main`](https://github.com/paulmann/BAS-IP/tree/main); ветка `BAS-IP_2` содержит v2. ## Что изменилось | Аспект | v1 | v2 | |---|---|---| | Состав | 3 PHP-файла + css | полноценное приложение (~180 файлов кода) | | Аутентификация | `.api_token` файлом рядом со скриптом (публичный репозиторий!) | логины/пароли, роли, 2FA, сессии, API-токены со scopes | | Данные | нет (всё в браузере) | БД MySQL/PostgreSQL/SQLite: жители, оплаты, журнал, аудит | | Открытие | кнопка «открыть» | панель оператора, кабинет жителя, гостевые ссылки/коды, API, CLI, расписания | | Журнал | только ошибки в лог | каждое открытие: кто/когда/тип доступа/результат/снимок | | Деньги | нет | начисления, счета, оплаты, перерасчёт, должники, напоминания | | Рассылки | нет | e-mail/Telegram/SMS/WhatsApp/webhook, очередь, шаблоны | | Обновление | git pull руками | автообновление с бэкапом и откатом | | UI | одна страница | светлая/тёмная тема, mobile-first, админка, кабинет, справка | ## Совместимость * **Старые автоматизации продолжают работать**: `bas_ip.php?cmd=lock_open| status|get_time|get_cameras|reboot|sip_enable|sip_disable` форвардится на новый API. Отличие: теперь требуется аутентификация (API-токен/сессия/ IP-allowlist) и каждый вызов пишется в аудит. * `bas-ip.php` (панель v1) → 301 на `/panel`. * `get_last_image.php` → снимок камеры нового API (с авторизацией). ## План перехода 1. **⚠️ Отзовите токен v1.** Файл `.api_token` лежал в публичном репозитории — считайте ключ скомпрометированным: смените пароль/ключ API панели BAS-IP. 2. Установите v2 рядом ([01 · Установка](01-Installation.md)) — другое расположение или поддомен; v1 не трогает. 3. Создайте API-токен для существующих автоматизаций: `bin/bas-ip api:token --name="legacy" --scopes=gate.open,gate.status,gate.log` и передавайте его в старых скриптах (`Authorization: Bearer …`). 4. Заполните базу жителей: вручную или импортом из вашей таблицы/Excel (Админка → Данные → Импорт, есть образец CSV). 5. Настройте устройство (панель та же — `basip`-драйвер, адрес/логин те же), проверьте `gate:test`. 6. Прогоните месяц параллельно: v2 пишет журнал, v1 остаётся как запасной путь; убедитесь, что всё открывается. 7. Переведите DNS/nginx на v2, выключите v1 (или оставьте `bas-ip.php` форвардером — он уже часть v2). 8. Первый платёжный цикл проведите через мастер начисления ([08 · Биллинг](08-Billing.md)). ## Перенос «истории» из v1 v1 не вёл структурированных данных — переносить нечего, кроме: * списка жителей (если вели в Excel/таблице) — через импорт CSV/JSON; * журнала ошибок (`error_log`) — остаётся в архиве v1; * токена устройства — **отозвать** (см. шаг 1). ## Обратная совместимость конфигов Конфиг v1 (`config.php` с `$api_url`, `$login`, `$password`) не читается v2 намеренно: локальный конфиг v2 создаётся установщиком, а секрет устройства переезжает в шифрованное хранилище (`secret:set DEVICE_PASSWORD`). --- Дальше: [18 · FAQ](18-FAQ.md)