# 13 · Бэкап и восстановление [← Home](Home.md) ## Что резервируется | Данные | Где | Как бэкапится | |---|---|---| | База (жители, оплаты, журнал, аудит) | MySQL/PostgreSQL/SQLite | дамп `mysqldump` / `pg_dump` / копия файла SQLite | | Конфигурация и секреты | `.bas-ip.config.local.php`, `storage/app/secrets` | тип `full` (по умолчанию бэкап — только БД) | | Файлы приложения | код | снимок версии при автообновлении ([14](14-Updating.md)) | | Журналы, очередь, кэш | `storage/` | обычно не нужны; `backup.include_storage` при желании | ## Создание * **UI**: Админка → Данные → «Создать копию» (+ расписание автобэкапов в Настройках: keep N, шифрование, расписание cron). * **CLI**: `bin/bas-ip backup:create [--type=db|full] [--note="перед обновлением"]` * **cron**: `30 3 * * * cd /var/www/bas-ip && php bin/bas-ip backup:create --quiet` Копии — zip в `storage/app/backups/` (имя содержит драйвер и дату), запись в таблице `backups` (тип, размер, статус, примечание). Ротация: хранится последние `backup.keep` (14) копий. Опционально: шифрование ключом приложения (`backup.encrypt`) и offsite (sftp). ## Восстановление **UI**: Админка → Данные → Бэкапы → «Восстановить» (двойное подтверждение). **CLI**: `bin/bas-ip backup:restore ID [--yes]` (ID из `backup:list`). Что происходит: проверка архива → (для БД) гашение активных соединений → заливка дампа (MySQL/PG) или замена файла (SQLite) → проверка целостности → запись в аудит. Приложение на время восстановления лучше перевести в режим обслуживания (`bin/bas-ip maintenance --on`); **шлагбаум продолжит открываться** (maintenance не блокирует gate-маршруты). ## Перенос на другой сервер / другую СУБД 1. Старый сервер: `backup:create --type=full`, скачайте архив; либо экспортируйте данные: Админка → Данные → Экспорт (жители/оплаты JSON). 2. Новый сервер: установите приложение ([01](01-Installation.md)), создайте базу **той же или другой СУБД** (схема переносима). 3. Вариант А (та же СУБД): `backup:restore` из скачанного архива (положите файл в `storage/app/backups/` и `backup:list` его увидит). 4. Вариант Б (другая СУБД): `bin/bas-ip migrate` на новой БД → Админка → Данные → Импорт (JSON-экспорт жителей с контактами/машинами), импорт оплат отдельным файлом; журнал ворот переносится SQL-дампом таблиц `gate_events`/`guest_passes` при необходимости. 5. Перенесите секреты: `secret:list` (имена) → `secret:set` на новом месте; скопируйте `.bas-ip.config.local.php` (поправьте БД/URL) и `app.key` — **без него секреты и подписанные ссылки не расшифруются**. ## Экспорт/импорт как «лёгкий бэкап» Регулярный экспорт JSON (жители + оплаты + журнал) в облако — хорошая дополнительная страховка от логических ошибок (в отличие от дампа, виден глазами). CLI: `residents:export --format=json --status=all --include=contacts,cars,payments,invoices`. ## Проверка бэкапов Раз в месяц восстанавливайте копию в тестовое окружение: ```bash php bin/bas-ip backup:list php bin/bas-ip backup:restore --yes # на тестовом стенде! php bin/bas-ip doctor ``` Бэкап, который ни разу не восстанавливали, — это не бэкап. --- Дальше: [14 · Обновления](14-Updating.md)