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

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

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

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


1. Главное правило: Нельзя просто так скопировать папку базы данных

У новичков часто возникает соблазн просто скопировать всю папку /stacks/bookstack/db_data, пока контейнер работает. Это огромная ошибка. База данных MariaDB или PostgreSQL постоянно держит файлы открытыми и записывает туда кэш. Если скопировать их в этот момент, вы получите "битый" архив, который потом откажется запускаться.

Правильная стратегия состоит из двух этапов:

  1. Сделать официальный текстовый слепок базы данных (Дамп) с помощью встроенных утилит самой СУБД прямо на лету.
  2. Заархивировать папки конфигураций и полученный дамп в один надежный архив.

2. Делаем дамп базы данных «на лету»

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

Перейдем в папку нашей Wiki:

cd /stacks/bookstack

Выполним команду создания дампа (вместо ${DB_PASSWORD} подставьте ваш реальный пароль пользователя базы данных из файла .env):

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

Разбор магии: Команда docker exec временно "просовывает руку" внутрь запущенного контейнера bookstack_db, запускает там утилиту резервного копирования и аккуратно выгружает готовый файл db_backup.sql наружу, прямо в вашу текущую локальную папку на сервере Debian.


3. Архивация всего стека приложения

Технически, база данных у нас теперь сохранена в один текстовый файл. Рядом лежит папка app_data со всеми картинками и конфигами сайта. Теперь мы можем безопасно упаковать всю папку проекта в один сжатый архив формата .tar.gz:

# Поднимаемся на уровень выше в каталог /stacks
cd /stacks

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

Конструкция $(date +%F) автоматически подставит в имя архива текущую дату. На выходе вы получите красивый файл вида: bookstack_backup_2026-06-01.tar.gz.

Очистка места: Файл db_backup.sql внутри папки проекта больше не нужен, так как он уже надежно упакован внутрь общего архива. Удалим его, чтобы не дублировать данные:

rm /stacks/bookstack/db_backup.sql

4. Как автоматизировать бэкапы по ночам?

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

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

crontab -e

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

0 3 * * * cd /stacks/bookstack && docker exec bookstack_db mysqldump -u bookstack_user -p'secure_db_password_456' bookstackapp > db_backup.sql && cd /stacks && tar -czf /var/backups/bookstack_$(date +\%F).tar.gz ./bookstack && rm /stacks/bookstack/db_backup.sql

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

⚠️ Главное правило выживания: Храните бэкапы на другом устройстве!
Хранить бэкапы на том же жестком диске, где крутится сам Docker — это плохой тон. Если диск сгорит, вы потеряете и рабочую систему, и бэкапы. Настройте копирование полученных архивов из папки /var/backups/ на вашу домашнюю флешку, сетевое хранилище (NAS) или в облако.


5. Как восстановить всё из бэкапа за 2 минуты?

Если случилась авария, жесткий диск сгорел, и вы купили новый чистый компьютер, процедура вашего полного восстановления выглядит тривиально:

  1. Установите чистый Docker по нашему гайду из Раздела 1.
  2. Создайте пустую папку /stacks.
  3. Распакуйте ваш архив командой: tar -xzf bookstack_backup_XXXX.tar.gz -C /stacks/.
  4. Зайдите в папку проекта cd /stacks/bookstack и запустите контейнеры: docker compose up -d.
  5. Восстановите базу данных из дампа одной командой:
    docker exec -i bookstack_db mysql -u bookstack_user -p'secure_db_password_456' bookstackapp < db_backup.sql

Через 30 секунд ваша Wiki продолжит работу с той самой секунды, когда был сделан ночной архив. Вы великолепны!


🐳 Поздравляем! Книга «Docker Ecosystem» полностью написана и укомплектована!
Вы прошли путь от полного непонимания контейнеров до построения взрослой, автоматизированной, изолированной и защищенной серверной экосистемы. Теперь у вас есть мощнейший сисадминский фундамент, и вы готовы к развертыванию сервисов любой сложности!