Для восстановления WordPress на VPS нужны две вещи: файлы сайта и данные базы данных. Если пропустить хотя бы одно, восстановление превратится в «частичную имитацию» рабочего сайта: фронт может загрузиться, но контент, пользователи и настройки будут неконсистентны.

Минимальный набор для надёжного бэкапа WordPress на VPS обычно включает:

  • каталог с файлами WordPress (например, /var/www/example.com или где у тебя размещён сайт);
  • базу данных MySQL/MariaDB, в которой лежат статьи, страницы, настройки, пользователи;
  • конфигурацию приложения (wp-config.php), включая параметры подключения к БД;
  • дополнительные каталоги, если они используются: загрузки вне стандартного wp-content/uploads, плагины по типу must-use, конфиги кэш-слоя.

Отдельно подумай о внешних зависимостях. Если у тебя есть S3-совместимое хранилище для медиа, в бэкап нужно включать только то, что локально. Если медиа лежат на VPS в файловой системе — их нужно бэкапить вместе с остальными файлами.

Если у провайдера VPS есть снапшоты уровня диска или возможность ZFS/LVM-снапшотов, это может закрыть часть задачи быстро. Но всё равно обычно остаётся риск неконсистентного состояния БД на момент снимка. Поэтому даже при снапшотах часто делают логический бэкап базы и/или используют корректную последовательность операций (заморозка/останов сервисов).

Файлы, база данных, конфигурации и ключи

К файловой части относится не только ядро WordPress. В неё входят:

  • wp-content: плагины, темы, uploads;
  • любые кастомные каталоги, которые ты создал сам;
  • wp-config.php;
  • (при наличии) .htaccess, nginx-конфиги, дополнительные файлы, которые влияют на маршрутизацию и безопасность.

К базе данных относится всё, что отвечает за динамику. Для WordPress это таблицы, которые формируют контент и настройки. Логический бэкап проще восстановить в любой среде с подходящим MySQL/MariaDB.

Ключевая мысль: бэкап должен быть не просто «сохранён», а пригоден для восстановления. Значит, важны не только команды создания архива, но и проверка, что ты реально можешь развернуть сайт обратно.

Когда нужны снапшоты уровня диска

Снапшот диска удобен для быстрых откатов, особенно в тестовой среде. Но у него есть ограничения: снимок фиксирует состояние файловой системы и, иногда, память/состояние процессов. Для БД без корректной подготовки снимок может содержать «смешанные» данные.

Если ты всё-таки используешь снапшоты диска как основу, добавь к ним два шага:

  • бэкап базы (logical dump) по расписанию;
  • хотя бы редкий, но регулярный тест восстановления на чистой копии VPS.

Тогда даже если снапшот сработает «не идеально», у тебя будет контролируемый источник правды для БД.

Архитектура бэкапа: полный, инкрементальный и оффсайт

Автоматизация резервных копий — это не только cron по ночам. Это ещё и стратегия, как накапливать историю, как экономить место и как пережить сбой сервера или ошибку оператора.

Для WordPress на VPS чаще всего встречаются три подхода:

  1. Полные бэкапы по расписанию (например, раз в сутки) — просто и предсказуемо, но может быть дорого по месту.
  2. Инкрементальные/дедупликационные схемы (через инструменты типа restic/borg) — обычно экономят место и дают шифрование «из коробки».
  3. Смешанный вариант: снапшот диска для быстрых откатов плюс логические бэкапы для гарантии консистентности.

Если твоя цель — автоматизация и предсказуемое восстановление, дедупликационные инструменты хорошо подходят. Они делают набор «снимков» с сохранением истории, а ещё умеют ротацию по политике хранения.

Как выбрать стратегию под SLA

Если сервис важен и простои стоят денег, ориентируйся на частоту RPO и длительность восстановления RTO. Примерно:

  • RPO определяет, сколько данных можно потерять (например, насколько далеко назад должен быть бэкап);
  • RTO определяет, сколько времени потребуется на разворачивание.

Для большинства сайтов на VPS практичным компромиссом становится ежедневный бэкап с историей за несколько дней/недель. Для более критичных систем добавляют более частые бэкапы файлов или базы.

Учти ещё один фактор: время восстановления. Полный бэкап большого объёма может быть медленным. В дедупликационных схемах время зависит от объёма изменений и скорости сети/диска. Но сам принцип подготовки одинаков: сначала дамп БД, затем файлы, затем проверка.

Оффсайт: почему хранить только на том же VPS рискованно

Если бэкап лежит на том же сервере, то при отказе диска или заражении вредоносным ПО ты теряешь и сайт, и резервную копию. Поэтому оффсайт-цель нужна почти всегда.

Варианты:

  • отдельный сервер (другой VPS) и приём бэкапов по SSH;
  • объектное хранилище (S3-совместимое);
  • специализированные бэкап-сервисы.

На практике удобнее всего объектное или SSH-хранилище: ты минимизируешь ручные действия и можешь централизованно настраивать ретеншн.

Шифрование и проверка целостности

Бэкап должен быть защищён так же, как данные на проде. Данные WordPress включают пользователей и часто содержат чувствительную информацию в профилях или плагинах.

В инструментах уровня restic/borg шифрование реализовано в клиенте. Это важно: даже если хранилище «утекло», содержимое останется закрытым.

Проверка целостности делается двумя слоями:

  • инструмент проверяет контрольные суммы при чтении;
  • ты периодически делаешь тест восстановления и убеждаешься, что WordPress поднимается и открывает страницы.

Шифрование без теста восстановления — это как страховка без проверки полиса.

Подготовка VPS: разметка хранилища и учёт доступа

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

Предположим, что сайт лежит в /var/www/example.com, а база в MySQL/MariaDB. Тогда тебе понадобятся:

  • пользователь с ограниченными правами для чтения файлов сайта (или отдельные права для доступа к каталогу);
  • доступ к базе для дампа (обычно учетная запись с правом SELECT на нужные схемы);
  • доступ к удалённому хранилищу (переменные окружения или файл с секретами в безопасном месте);
  • установленный инструмент для хранения снапшотов (ниже пример через restic).

Отдельный пользователь и права

Не держи бэкап-скрипты под root без необходимости. Практичный вариант:

  • создать пользователя wpbackup;
  • дать ему права читать файлы сайта (на чтение) и писать в локальный временный каталог;
  • доступ к дампу базы выдавать через отдельную учётку БД, ограниченную минимально необходимыми правами.

Для временных файлов выдели отдельный каталог, например /var/backups/wp-tmp. Его можно очищать по завершении.

Подключение внешнего хранилища (S3/SSH)

Для restic нужно задать репозиторий и параметры доступа. Например, для S3-совместимого хранилища обычно используются переменные окружения RESTICREPOSITORY и RESTICPASSWORD, а также параметры провайдера (AWSACCESSKEYID, AWSSECRETACCESSKEY или их аналоги).

Пример структуры:

  • RESTIC_REPOSITORY указывает на путь в хранилище (формат зависит от провайдера);
  • RESTIC_PASSWORD — пароль шифрования репозитория (лучше хранить в защищённом месте, а не прямо в скрипте).

Если выбран SSH-подход (удалённый сервер с restic-риепозиторием), тогда репозиторий указывает на ssh-адрес, а доступ обеспечивается ключом. Это часто проще с точки зрения сетевой инфраструктуры.

Таймзоны и единый формат дат

Чтобы бэкапы было легче отлаживать, держи единый таймзон для всех операций. Например, используешь UTC в логах и в названии снимков.

Иначе в момент расследования инцидента ты можешь перепутать порядок бэкапов: лог «за вчера» может оказаться «сегодня» по местному времени. Лучше заранее договориться об одном варианте и придерживаться его в скриптах и в отчётах.

Автоматизация резервных копий WordPress на VPS: файловая часть

Для файловой части важно сохранить:

  • структуру каталогов;
  • права/владельца в той мере, в какой это критично;
  • все изменения wp-content и темы/плагины.

Постоянная практика: не пытаться бэкапить «частично» без понимания зависимостей. Если сегодня это uploads, завтра окажется, что плагин хранит важные данные в wp-content/something, и ты узнаешь это только при восстановлении.

Вариант с restic: снапшоты файлов с дедупликацией

Основная идея restic: ты создаёшь набор снимков (snapshots) репозитория, а restic сам:

  • шифрует данные;
  • дедуплицирует одинаковые блоки;
  • умеет делать prune (удаление старых снапшотов по политике);
  • проверяет целостность при операциях.

Условно, схема выглядит так:

  1. подготовить директорию репозитория (создание один раз);
  2. выполнять restic backup для нужных каталогов;
  3. делать prune по политике;
  4. логировать результат.

Например, для файлов WordPress можно бэкапить каталог /var/www/example.com. Но лучше исключить то, что не нужно:

  • временные кэши, которые можно пересоздать;
  • каталоги, которые растут без смысла в бэкапах (например, огромные кэши, если они воспроизводятся).

Рекомендуемый подход: сначала собери список больших каталогов в твоём wp-content, посмотри, что является источником данных, а что кэшем. Затем делай исключения осознанно.

Команды в общем виде:

  • restic init (один раз);
  • restic backup с аргументами exclude;
  • restic prune с retention policy.

Локальные временные файлы и исключения

С некоторыми плагинами и настройками появляются каталоги, которые постоянно меняются и не несут смысла в бэкапе. Типичный пример — кэши. Часто это:

  • wp-content/cache;
  • отдельные папки кэш-плагинов.

Если ты исключаешь кэш, убедись, что после восстановления WordPress продолжит работать. Обычно кэш создаётся заново. Но иногда кэш — это не только скорость, а часть логики (реже). Поэтому исключения лучше вводить после теста восстановления.

Для бэкапов конфигов nginx или apache можно сделать отдельный бэкап, но часто это не обязательно, если конфиги не меняются часто и у тебя есть IaC или шаблоны. Если конфиги правятся вручную и часто — стоит включить их в общий план.

Схема подписей и меток (tags)

restic поддерживает теги. Это удобно для поиска снимков. Например:

  • tag=files;
  • tag=db;
  • tag=full;

Тогда восстановление можно делать быстрее: не нужно «гадать», какой снимок нужен.

Автоматизация бэкапа базы данных: mysqldump и восстановление

База данных — самая чувствительная часть. С файлом проще: его можно вернуть как есть. С БД важно сделать логический дамп в корректный момент.

В большинстве случаев используется mysqldump. Он создаёт последовательность SQL-команд, по которой можно восстановить содержимое базы. При восстановлении важно, чтобы схема и данные легли корректно.

Экспорт с mysqldump: практичный рецепт

Для MySQL/MariaDB обычно делают дамп так:

  • блокировка таблиц на время дампа (опционально);
  • корректная кодировка;
  • исключение информации, которая не нужна или мешает (например, опциональные параметры).

Ниже пример общего подхода. Конкретные параметры подстрой под свою установку и версию MySQL/MariaDB:

mysqldump \
—single-transaction \
—quick \
—routines \
—events \
—triggers \
-u wpuser -p»${MYSQL_PWD}» \
—databases wpdbname \

/var/backups/wp-tmp/wpdb-$(date -u +%Y%m%dT%H%M%SZ).sql

Опция —single-transaction хорошо подходит для InnoDB: она делает консистентный дамп без жёсткой блокировки. Для MyISAM подход будет другим, но WordPress чаще всего работает с InnoDB.

Если у тебя несколько баз (редко для WordPress) — можно дампить их по списку. Но обычно достаточно одной базы WordPress.

Минимизируй риск: проверка дампа перед записью

Перед тем как отправлять дамп в удалённое хранилище:

  • проверь, что файл не нулевого размера;
  • проверь, что в дампе есть ожидаемые маркеры (например, CREATE TABLE или данные);
  • при возможности проверь, что команда завершилась успешно по коду возврата.

Простая проверка по размеру и статусу уже сильно снижает вероятность «мы залили пустой дамп, думали что всё ок».

Восстановление из дампа: как это работает

При восстановлении дампа тебе потребуется:

  • создать базу (если её нет);
  • загрузить SQL в базу через mysql.

Пример:

«`bash mysql -u wpuser -p»${MYSQL_PWD}» \ -e «CREATE DATABASE IF NOT EXISTS wpdbname CHARACTER SET utf8mb4 COLLATE utf8mb4unicodeci;»

mysql -u wpuser -p»${MYSQL_PWD}» \ wpdbname < /path/to/wpdb.sql «`

Параметры CHARACTER SET и COLLATE должны совпадать с тем, как была настроена исходная база. Если ты не знаешь точно, можно восстановить без принудительного charset, если в дампе прописаны нужные настройки. Снова: решает тест восстановления.

Альтернатива: wp-cli db export

Если у тебя есть wp-cli и он корректно настроен на сервере, db export может быть удобным способом сделать дамп в формате, который легче использовать вместе с остальными шагами. Но универсальным вариантом остаётся mysqldump, потому что он не зависит от состояния файлов WordPress.

Если WordPress частично сломан, wp-cli может не запуститься, а mysqldump всё равно сможет выгрузить данные, если учётные данные к БД верны.

Пошаговый план скриптов и расписаний: cron или systemd timers

Автоматизация резервных копий должна быть устойчивой: если один запуск упал, система должна:

  • зафиксировать проблему в логах;
  • не перетирать «всё подряд»;
  • продолжать работать при следующем запуске.

Практичный план:

  1. подготовить скрипт для файловой части;
  2. подготовить скрипт для дампа базы;
  3. собрать их в единый job, который создаёт «снимок full»;
  4. добавить prune (ротацию);
  5. встроить проверку результата;
  6. настроить расписание и алерты.

Ниже пример структуры и логики. Реальные пути и имена подставь свои.

Структура проекта

Допустим, создаём каталог:

  • /usr/local/sbin/wp-backup
  • /var/backups/wp-tmp
  • конфиг секретов — в /etc/wp-backup (права 600)

Скрипты:

  • backup-files.sh
  • backup-db.sh
  • backup-full.sh
  • restore.sh (отдельно, по необходимости)

Секреты (например, RESTICPASSWORD, MYSQLPWD) лучше хранить в файле, доступном только владельцу скриптов, и подхватывать его через source.

Пример скрипта для файловой части (restic)

«`bash

#!/usr/bin/env bash

set -euo pipefail

SITE_DIR=»/var/www/example.com»
TMP_DIR=»/var/backups/wp-tmp»
TS=»$(date -u +%Y%m%dT%H%M%SZ)»

restic env должен быть задан в окружении или через /etc/wp-backup/env

: «${RESTICREPOSITORY:?RESTICREPOSITORY not set}» : «${RESTICPASSWORD:?RESTICPASSWORD not set}»

mkdir -p «$TMP_DIR»

restic backup «$SITE_DIR» \ —tag «files» \ —tag «site-example» \ —exclude «/var/www/example.com/wp-content/cache» \ —exclude «/var/www/example.com/wp-content/*/cache» \ —verbose

restic snapshots —tag «files» —tag «site-example» —latest 1 >/dev/null «`

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

Пример скрипта для базы данных (mysqldump + restic)

«`bash #!/usr/bin/env bash set -euo pipefail

DB_NAME=»wpdbname» TMP_DIR=»/var/backups/wp-tmp» TS=»$(date -u +%Y%m%dT%H%M%SZ)» DUMPFILE=»$TMPDIR/${DB_NAME}-${TS}.sql»

: «${MYSQLPWD:?MYSQLPWD not set}» : «${RESTICREPOSITORY:?RESTICREPOSITORY not set}» : «${RESTICPASSWORD:?RESTICPASSWORD not set}»

mkdir -p «$TMP_DIR»

mysqldump \ —single-transaction \ —quick \ —routines \ —events \ —triggers \ -u wpuser -p»${MYSQL_PWD}» \ —databases «$DB_NAME» \ > «$DUMP_FILE»

if [ ! -s «$DUMP_FILE» ]; then echo «Dump file is empty: $DUMP_FILE» >&2 exit 1 fi

restic backup «$DUMP_FILE» \ —tag «db» \ —tag «site-example» \ —remove-after

rm -f «$DUMP_FILE» «`

Обрати внимание на —remove-after. Это сообщает restic удалить локальный файл после успешной отправки. Но мы и так удаляем его в конце. Оставь один механизм, чтобы не запутаться.

Полный job: связка файлов и базы + prune

«`bash #!/usr/bin/env bash set -euo pipefail

TS=»$(date -u +%Y%m%dT%H%M%SZ)»

files

/usr/local/sbin/wp-backup/backup-files.sh

db

/usr/local/sbin/wp-backup/backup-db.sh

prune (пример политики)

оставь определённый набор: за последние дни/недели/месяцы

restic prune \ —keep-daily 7 \ —keep-weekly 4 \ —keep-monthly 6 \ —tag «site-example» \ —verbose «`

Политику хранения подбирают по реальному объёму и требованиям. Лучше начать с умеренной политики и посмотреть рост репозитория за пару недель.

cron vs systemd timers

cron прост и массов. systemd timers удобнее для управления логами и зависимостей. В обоих случаях принцип одинаков: запуск по расписанию и логирование.

Для cron:

  • запускай job в ночное время, чтобы не конкурировать с нагрузкой;
  • не запускай два экземпляра одновременно (это можно решить через lockfile).

Для systemd timers:

  • можно добавить ConditionPathExists и другие проверки;
  • журналирование удобно смотреть через journalctl.

В обоих случаях полезно добавить lock, например через flock. Это предотвращает ситуацию «скрипт ещё не завершился, но cron уже запустил следующий».

Логи, уведомления и ретеншн

Логи нужны, чтобы быстро увидеть, что бэкап не прошёл. Минимально:

  • логируй stdout/stderr в файл или в systemd journal;
  • сохраняй код возврата.

Оповещения можно делать:

  • по почте (mailx, msmtp);
  • в чат (через webhook);
  • в мониторинг (Prometheus/Alertmanager).

Если не хочешь внедрять инфраструктуру, хотя бы отправляй письмо при ошибке или сохраняй «последний успешный бэкап» как маркер на диске. Тогда можно проверять разницу по времени.

Тест восстановления: часть автоматизации

Самая частая ошибка: сделать бэкап по расписанию и ни разу не восстановить на практике. Автоматизация должна включать тест в виде отдельной рутины:

  • раз в неделю или раз в две недели поднимаешь чистую копию VPS (или временную среду);
  • восстанавливаешь files и db из последнего удачного снапшота;
  • проверяешь страницу, вход в админку, загрузку медиа.

Это не «лишняя работа». Это способ гарантировать, что бэкап реально пригоден.

Восстановление WordPress из бэкапа на VPS

Восстановление нужно планировать так же аккуратно, как создание бэкапа. Иначе в момент аварии ты будешь решать проблемы «в реальном времени», где каждая ошибка стоит времени и денег.

Цель восстановления: получить рабочий WordPress и вернуть доступ к сайту.

Плейбук восстановления: файлы и база

Практичная последовательность:

  1. Подготовь новую VPS или временную среду с теми же компонентами (web server, PHP, MySQL/MariaDB).
  2. Восстанови файлы WordPress в каталог, где сайт ожидает ядро.
  3. Восстанови базу данных.
  4. Обнови wp-config.php, если менялись параметры подключения к БД.
  5. Запусти web-сервер и проверь сайт.

При использовании restic восстановление обычно выглядит так:

  • находишь нужный snapshot;
  • делаешь restore в каталог;
  • затем загружаешь дамп в базу.

Примерный сценарий (упрощённо): «`bash

1) найти снапшот

restic snapshots —tag «site-example» —tag «db» —latest 1

2) восстановить дамп базы в tmp

restic restore latest —tag «db» —tag «site-example» —target /var/backups/wp-tmp/restore-db

3) восстановить файлы

restic restore latest —tag «files» —tag «site-example» —target /var/www/example.com «`

Дальше найдёшь восстановленный .sql и импортируешь его через mysql.

Если ты делал бэкап файлов целиком каталога /var/www/example.com, важно убедиться, что при восстановлении не затёрлись чужие конфиги. Лучше восстанавливать в пустой каталог или сначала сделать резервирование текущего состояния на время восстановления.

Типичные ошибки при восстановлении

1. Несовпадение версий PHP и расширений

    WordPress может подняться частично, но плагины падают. Решение: на тестовой среде повторить стек продакшена или хотя бы убедиться, что необходимые модули PHP установлены.

    2. Разные учётные данные БД в wp-config.php

      Если ты восстановил файлы, но база подключается к старому имени пользователя/паролю, сайт будет ругаться на подключение. Решение: перед импортом БД проверь wp-config.php и соответствие.

      3. Права на файлы uploads

        После восстановления может быть другой владелец/права. Тогда пользователи не смогут загружать медиа. Решение: после восстановления выставь владельца и права на wp-content/uploads (точно под твою схему web server).

        4. Неконсистентность дампа

          Если дамп сделан без корректного подхода для текущего движка таблиц, могут быть странные ошибки. Решение: использовать —single-transaction для InnoDB и обязательно делать тест восстановления.

          5. Смешивание файлов из разных снимков

            Это бывает, когда ты восстанавливаешь файлы из одного snapshot, а дамп базы из другого. В итоге возникают «конфликты версий». Решение: делать единый job, который помечает файлы и базу как связанный full-снимок, или восстанавливать из одного общего набора.

            Как проверить сайт после восстановления

            Проверка должна быть короткой, но содержательной:

            • открыть главную и одну внутреннюю страницу (статьи/страницы);
            • войти в админку;
            • проверить загрузку медиа (хотя бы один тестовый файл);
            • проверить работу нескольких критичных плагинов.

            Если сайт использует кэширование на уровне веб-сервера или CDN, после восстановления может потребоваться очистка кэша. Но сначала убедись, что контент и админка работают без этого.

            Лайфхак: если у тебя в админке есть показатель здоровья сайта или ошибки, быстро открой логи PHP/web server и проверь 10–20 строк вокруг последних запросов после восстановления. Так ты заметишь проблему раньше, чем пользователи.

            Практика безопасности и надёжности: шифрование, ключи, тестирование

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

            Шифрование и управление ключами

            RESTIC_PASSWORD (или аналог для borg/restic) должен быть:

            • одинаковым для доступа к репозиторию;
            • защищённым и не попадающим в историю команд, логи и репозитории.

            Не передавай пароль бэкапа «в чат с коллегой» без безопасного канала. Лучше:

            • хранить секрет в переменных окружения через систему управления секретами (если есть);
            • или в защищённом конфиг-файле с правами 600.

            Если пароль потерян — репозиторий фактически становится нечитаемым. Поэтому продумай, где он хранится и кто имеет доступ.

            Регулярные тесты восстановления

            Тест восстановления должен быть повторяемым. Практичный подход:

            • раз в 1–2 недели выбираешь последний успешный snapshot;
            • разворачиваешь тестовую среду (можно временно);
            • восстанавливаешь БД и файлы;
            • выполняешь чеклист проверки.

            Важно: тест должен подтверждать именно восстановление из репозитория, а не «визуальную работу файлов в каталоге». Если дамп не поднимает админку — значит, есть проблема в логике экспорта или импортной части.

            Защита от ransomware и ошибок оператора

            Рансомваре и повреждение файлов — реальный сценарий. Для защиты:

            • храни бэкап оффсайт;
            • используй дедупликацию/шифрование на стороне клиента;
            • ограничь доступ к репозиторию.

            Дополнительно проверь, что твой скрипт бэкапа не может удалить данные при ошибке. Например, prune должен работать по понятной политике и только на репозитории, а не локально в исходных каталогах.

            Если используешь SSH в другой VPS, убедись, что ключи доступа защищены и не унаследованы от «универсальных» аккаунтов.

            Контроль качества: метрики, алерты и регулярный аудит

            Когда бэкап настроен, самое сложное начинается после. Надо следить, что он продолжает работать, и что восстановление остаётся возможным.

            Что логировать

            Минимально логируй:

            • время начала и завершения job;
            • успешность файловой части;
            • успешность дампа БД;
            • размер репозитория/количество снапшотов (по возможности);
            • результат prune (сколько старых снапшотов удалено).

            Если есть интеграция с мониторингом, дополнительно логируй:

            • длительность выполнения;
            • коды ошибок;
            • свободное место на диске (если локальные временные файлы завязаны на диск).

            Минимальный набор алертов

            Алерты должны предупреждать о проблемах до того, как они станут критичными:

            • не было успешного бэкапа за последние N часов;
            • job завершился с ошибкой;
            • репозиторий недоступен (ошибка авторизации, сетевые проблемы);
            • не удалось создать дамп БД.

            На первом этапе достаточно двух алертов: «нет успеха» и «ошибка дампа/файлов». Этого обычно хватает, чтобы не пропустить проблему.

            Регулярный аудит процесса

            Раз в месяц сделай короткий аудит:

            • проверь, что бэкап создаётся по расписанию и соответствует политике хранения;
            • проверь, что нужные теги/snapshot формируются так, как ты их потом используешь при restore;
            • проверь доступы: не истёк ли ключ/пароль на стороне хранилища;
            • обнови зависимости (restic), если это безопасно и протестировано.

            Аудит не должен занимать много времени. Но он закрывает «тихие» поломки, которые иногда происходят после обновлений ОС или изменения сетевых настроек.

            Итог: как сделать бэкап WordPress на VPS автоматизированным и проверяемым

            Надёжный бэкап WordPress на VPS — это связка из трёх вещей: что именно ты резервируешь (файлы + база), как ты это автоматизируешь (скрипты + расписание + ротация), и как ты подтверждаешь пригодность для восстановления (тест restore на практике).

            Начни с рабочего сценария: файловая часть через restic (или другой инструмент снапшотов) и дамп базы через mysqldump, затем объединяй это в один job. После этого обязательно сделай тест восстановления на свежей среде и только потом включай расписание без ручного контроля.

            Если ты уже сделал бэкапы «как получается», но не восстанавливал их, самое полезное действие прямо сейчас — запланировать восстановление из последнего успешного снапшота. В этот момент ты увидишь реальную картину: что работает, что нужно поправить, и где процесс стоит усилить.

            От mpns_by