Создание резервной копии
Шаг 1: Перейдите в директорию проекта
cd /opt/rwp-shopШаг 2: Создайте бекап базы данных
docker compose exec db pg_dump -U postgres postgres > backup_$(date +%Y%m%d_%H%M%S).sqlСовет
Имя файла Команда автоматически добавляет дату и время в имя файла, например: backup_20251227_141530.sql
Восстановление из резервной копии
Внимание
Внимание Восстановление полностью заменит текущие данные в базе. Убедитесь, что вы восстанавливаете правильный бекап.
Шаг 3: Остановите бота
docker compose stop botШаг 4: Очистите текущую базу данных
docker compose exec db psql -U postgres -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;"Шаг 5: Восстановите данные из бекапа
docker compose exec -T db psql -U postgres postgres < backup_20251227_141530.sqlПримечание
Замените backup_20251227_141530.sql на имя вашего файла бекапа.
Шаг 6: Запустите бота
docker compose up -dАвтоматическое резервное копирование
Для автоматического создания бекапов по расписанию:
Шаг 7: Создайте директорию для бекапов
mkdir -p /opt/rwp-shop/backupsШаг 8: Создайте скрипт бекапа
nano /opt/rwp-shop/backup.sh#!/bin/bash
BACKUP_DIR="/opt/rwp-shop/backups"
PROJECT_DIR="/opt/rwp-shop"
RETENTION_DAYS=14
cd "$PROJECT_DIR"
# Создание бекапа
docker compose exec -T db pg_dump -U postgres postgres > "$BACKUP_DIR/backup_$(date +%Y%m%d_%H%M%S).sql"
# Удаление старых бекапов
find "$BACKUP_DIR" -name "backup_*.sql" -type f -mtime +$RETENTION_DAYS -deleteШаг 9: Сделайте скрипт исполняемым
chmod +x /opt/rwp-shop/backup.shШаг 10: Добавьте задачу в cron
crontab -eДобавьте строку для ежедневного бекапа в 3:00:
0 3 * * * /opt/rwp-shop/backup.sh| Параметр | Описание |
|---|---|
BACKUP_DIR | Директория для хранения бекапов |
PROJECT_DIR | Директория проекта с compose.yaml |
RETENTION_DAYS | Количество дней хранения бекапов |
Проверка бекапа
Для проверки целостности бекапа без восстановления:
# Проверка синтаксиса SQL
head -100 backup_20251227_141530.sql
# Проверка размера файла
ls -lh backup_20251227_141530.sqlСовет
Регулярно проверяйте, что бекапы создаются и имеют ненулевой размер.