Миграции БД и резервное копирование
Процедуры изменений схемы и безопасного хранения данных.
Где хранить миграции
- Базовая схема:
database/schema.sql. - Создайте папку
database/migrations/и добавляйте файлы видаYYYYMMDD_HHMM_description.sql. - Каждая миграция должна быть идемпотентной (проверки существования таблиц/полей).
Запуск миграций
- В небольшой установке миграции можно запускать вручную через SQL-клиент.
- При расширении проекта добавьте CLI или веб-страницу «Миграции» для применения файлов последовательно.
Пример миграции
-- database/migrations/20250101_1200_add_logs_table.sql
CREATE TABLE IF NOT EXISTS delivery_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at DATETIME NOT NULL,
order_id INT NOT NULL,
player_steam_id VARCHAR(20) NOT NULL,
status ENUM('ok','failed') NOT NULL,
message TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE INDEX IF NOT EXISTS idx_delivery_logs_order ON delivery_logs(order_id);
Резервное копирование
База данных
- MySQL: ежедневно
mysqldumpвсех таблиц в архив с датой. - Хранить бэкапы вне сервера (объектное хранилище, защищённый артефакт-сторедж).
- Проверять восстановление на тестовом окружении раз в 2–4 недели.
Перенос товаров при переустановке (Экспорт/Импорт)
Если требуется переустановить сайт с нуля, но сохранить каталог товаров:
- Экспорт базы: Используйте скрипт
export_products_web.php(доступен администратору) для скачивания SQL-дампа категорий, товаров и промокодов. - Сохранение картинок: Скопируйте папку
assets/img/products/себе на компьютер. - Восстановление:
- Установите новую версию CMS.
- Верните папку
assets/img/products/на сервер. - Импортируйте SQL-файл через phpMyAdmin в базу данных новой установки.
Файлы проекта (Важно!)
При переносе сайта или создании резервной копии обязательно сохраните следующие файлы, так как они не восстанавливаются из репозитория:
config/local.php— Содержит пароли от базы данных, API ключи Steam, настройки RCON и платежных систем. Без этого файла сайт не сможет подключиться к БД.assets/data/content.json— Содержит все текстовые настройки (заголовки, копирайты, ссылки), измененные через Редактор.assets/data/widgets.json— Настройки виджетов (например, VK).config/installed.lock— Файл-маркер успешной установки.
Пример команд
# Бэкап (Linux)
mysqldump -u USER -pPASSWORD DB_NAME | gzip > backups/db_$(date +%F).sql.gz
# Восстановление
gunzip -c backups/db_2025-01-10.sql.gz | mysql -u USER -pPASSWORD DB_NAME
Checklist
- Есть план миграций и журнал применённых SQL.
- Ежедневные бэкапы, проверка восстановления, контроль места.
- Доступ к бэкапам ограничен, секреты не хранятся вместе с дампами.