Перейти к основному контенту

Глава 3.5: Стратегия бэкапов.

Среди системных администраторов есть старая мудрость: «Люди делятся на две категории: те, кто еще не делает бэкапы, и те, кто их УЖЕ делает». В селф-хостинге бэкап — это ваша единственная страховка от сгоревшего SSD, случайной команды rm -rf или неудачного обновления.

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


1. Главное правило: Железный «холодный» бэкап

Когда контейнер базы данных (MariaDB или PostgreSQL) активно работает, он постоянно держит файлы открытыми и записывает туда кэш. Если попытаться скопировать папку db_data прямо в этот момент, вы рискуете получить "битый", поврежденный архив, который потом откажется запускаться.

Для домашнего селф-хостинга, где кратковременная остановка сайта на 10–15 секунд глубокой ночью никому не навредит, поэтому, существует идеальный, самый надежный и простой метод — «холодный» бэкап.

Алгоритм прост до безобразия:

  1. Останавливаем контейнеры (освобождаем файлы и сбрасываем кэш на диск).
  2. Упаковываем всю папку проекта в архив.
  3. Запускаем контейнеры обратно.

2. Ручной бэкап: Шаг за шагом

Давайте разберем, как заархивировать нашу Wiki вручную. Перейдем в каталог со стеками:

cd /stacks

Теперь выполним цепочку команд:

# 1. Останавливаем проект (файлы закрываются)
docker compose -f ./bookstack/docker-compose.yml stop

# 2. Архивируем всю папку в один сжатый файл с текущей датой в имени
tar -czf /var/backups/bookstack_backup_$(date +%F).tar.gz ./bookstack

# 3. Поднимаем проект обратно в работу
docker compose -f ./bookstack/docker-compose.yml start

Флаг -f позволяет нам управлять нужным docker-compose.yml удаленно, даже не заходя внутрь самой папки bookstack.


3. Автоматизация по ночам через Cron

Чтобы сервер сам делал эту процедуру каждую ночь в 3:00, занесем эту строчку в системный планировщик задач Cron.

Откроем планировщик:

crontab -e

Прокрутите в самый вниз файла и вставьте следующую команду (все шаги связываются оператором &&, который запускает следующее действие только при успехе предыдущего):

0 3 * * * cd /stacks && docker compose -f ./bookstack/docker-compose.yml stop && tar -czf /var/backups/bookstack_$(date +\%F).tar.gz ./bookstack && docker compose -f ./bookstack/docker-compose.yml start

Сохраните файл и выйдите. Теперь каждую ночь ваша база данных будет засыпать на пару секунд, отдавать чистую копию файлов в архив /var/backups/ и мгновенно просыпаться.


4. Альтернатива: Путь идеалиста (Дамп базы без остановки)

Конечно, среди домашних сисадминов всегда найдутся перфекционисты, которые скажут: «Мой сервер должен работать в режиме 24/7/365, и даже секундная остановка базы ради бэкапа — это преступление!».

Если вы относитесь к их числу или просто хотите расширить кругозор, то вам предстоит курить мануалы в сторону утилиты mysqldump (или pg_dump для баз PostgreSQL). Этот подход позволяет делать "горячий слепок" базы данных прямо на лету, вообще без остановки контейнеров, просовывая команду внутрь через утилиту выполнения:

docker exec bookstack_db mysqldump -u bookstack_user -p'secure_db_password_456' bookstackapp > db_backup.sql

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

Но давайте будем честны: для домашнего селф-хостинга это абсолютно избыточно по нескольким причинам:

  • Если в 3 часа ночи ваша личная Wiki заснет на 5–10 секунд, этого просто никто не заметит.
  • Вам придется плодить лишние сущности: писать сложные многострочные bash-скрипты, которые сначала делают дамп, потом архивируют файлы, а затем подчищают за собой временные файлы .sql.
  • Вам придется "светить" пароль от базы данных в открытом текстовом виде прямо внутри планировщика Cron, что с точки зрения безопасности — сомнительная практика.

💡 Резюме домашнего админа:
Оставьте «горячие дампы» энтерпрайзу с их миллионными оборотами. Наш «холодный» метод с docker compose stop — это автомат Калашникова: он проще в настройке, не оставляет мусора и гарантирует 100% консистентность файлов базы на диске без лишней головной боли.


5. Хочу больше: Продвинутые бэкапы через Restic

Простое копирование архивов в .tar.gz отлично работает на старте. Но когда ваших сервисов станет много, архивы начнут занимать гигабайты/терабайты, ведь каждую ночь вы будете копировать одни и те же картинки и файлы заново.

Если вы хотите настроить взрослую, профессиональную систему резервного копирования с дедупликацией (когда сохраняются только изменившиеся за сутки кусочки файлов), шифрованием и автоматической отправкой в удаленные облака, переходите к нашему специальному практическому руководству:

👉 Продвинутые бэкапы: Настройка и автоматизация Restic в Linux
Там подробно