DaydreamMods

DaydreamMods

Резервные копии

Что копировать, как восстановить и чего одной базы недостаточно.

Нужны три куска. База без файлов оставит версии без архивов. Файлы без базы оставит ZIP, которые никто не найдёт по ключу. Картинки сайта лежат отдельно от ZIP.

Снятие

Команды на сервере, из-под пользователя, который видит базу. Пароль в строку истории лучше не подставлять: DATABASE_URL уже в .env.

set -a; . /opt/daydreammods/.env; set +a
mkdir -p /var/backups
pg_dump "$DATABASE_URL" -Fc -f /var/backups/daydreammods-$(date +%F).dump
tar -czf /var/backups/daydreammods-packs-$(date +%F).tar.gz -C /opt/daydreammods storage/packs
tar -czf /var/backups/daydreammods-uploads-$(date +%F).tar.gz -C /opt/daydreammods/apps/web/public uploads

Копии увозят с VPS. Диск того же сервера — не резерв, если пропадёт машина.

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

Восстановление

Остановить запись, чтобы новые платежи не попали в полуживую базу:

systemctl stop daydreammods-web daydreammods-api
pg_restore -d daydreammods --clean --if-exists /var/backups/daydreammods-ДАТА.dump
tar -xzf /var/backups/daydreammods-packs-ДАТА.tar.gz -C /opt/daydreammods
tar -xzf /var/backups/daydreammods-uploads-ДАТА.tar.gz -C /opt/daydreammods/apps/web/public
systemctl start daydreammods-web daydreammods-api

--clean удаляет объекты перед созданием. Это разрушит текущие таблицы в целевой базе. Восстанавливают в ту базу, которую готовы заменить, или в пустую новую и затем меняют DATABASE_URL.

После восстановления проверяют: вход администратора, одну активную подписку, скачивание версии с ключом local:. Если файл на диске есть, а ключ в базе от другого дампа, скачивание честно скажет, что файла нет.

.env в дамп базы не входит. Его копируют отдельно и не кладут в открытый архив рядом с сайтом.