Обновление и бэкапы
Как накатить новую версию и что сохранять, чтобы не потерять проект
Что бэкапить
Обязательны все три:
| Что | Где | Почему нельзя пропустить |
|---|---|---|
| База данных | ваш 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Порядок важен: сначала код, потом база. В обратном порядке новый код увидит старую схему и посыплется.