UnicoreCMS

Обновление и бэкапы

Как накатить новую версию и что сохранять, чтобы не потерять проект

Что бэкапить

Обязательны все три:

ЧтоГдеПочему нельзя пропустить
База данныхваш MySQL/MariaDBВсё содержимое проекта
Папка storageкорень репозиторияСкины, плащи, иконки товаров, картинки новостей
.envкорень репозиторияБез ENCRYPTION_KEY дамп базы бесполезен

Ключ отдельно от дампа

Пароли, секреты 2FA и пароли RCON лежат в базе в зашифрованном виде. Дамп без ENCRYPTION_KEY не восстановить, войти не сможет никто. Но и хранить ключ рядом с дампом плохо, тогда шифрование ничего не защищает. Держите их в разных местах и с разными доступами.

Минимальный скрипт бэкапа:

mysqldump -u unicore -p unicore | gzip > backup-$(date +%F).sql.gz
tar czf storage-$(date +%F).tar.gz storage/

Обновление

Сделать бэкап

Да, каждый раз. Схема базы синхронизируется автоматически, и откатиться назад без дампа не выйдет.

Подтянуть код

git pull
pnpm install

Сравнить .env с примером

diff <(grep -o '^[A-Z_]*' .env | sort -u) <(grep -o '^[A-Z_]*' .env.example | sort -u)

Переменные, которых нет в вашем .env, появились в свежей версии. Обычно у них есть значения по умолчанию, но лучше посмотреть глазами.

Собрать

pnpm run build

Погасите dev-серверы

Если параллельно крутится pnpm run dev, сборка фронтов упадёт на блокировке файлов. Сначала остановить, потом собирать.

Синхронизировать схему

pnpm run sync

Команда приводит таблицы в соответствие с сущностями: добавляет новые колонки и индексы.

Перезапустить

pm2 restart ecosystem.config.js

Или, если через Docker:

docker compose --profile prod up -d --build
docker compose exec app pnpm run sync

Про pnpm run sync

Под капотом работает typeorm schema:sync. TypeORM сам приводит базу к тому, что описано в сущностях. Удобно, но с оговорками.

Он умеет удалять колонки

Когда меняется тип или длина колонки, входящей в первичный ключ, TypeORM может не сделать ALTER, а дропнуть колонку и создать заново, вместе с данными. На боевой базе всегда сначала дамп, и желательно прогон на копии.

Если синхронизация упала на полпути, база остаётся в промежуточном состоянии. Лечится это восстановлением из дампа, потому он и стоит первым шагом.

Откат

git checkout <предыдущий-тег>
pnpm install
pnpm run build
gunzip < backup-2026-08-01.sql.gz | mysql -u unicore -p unicore
tar xzf storage-2026-08-01.tar.gz
pm2 restart ecosystem.config.js

Порядок важен: сначала код, потом база. В обратном порядке новый код увидит старую схему и посыплется.

Содержание