← Вернуться к оглавлению

🗂 Бэкапы VPS: что, как и когда

Версия 1.1 | 12 сентября 2026

Полное описание системы резервного копирования сервера 193.32.179.138: расписание, состав копий, обработка ошибок, статус в Telegram-боте и восстановление. Предыдущая версия скрипта сохранена на сервере как /opt/scripts/backup.sh.v1-20260912.

🕐 Кто, когда и куда

Параметр Значение
Исполнительcron от root
Расписание0 2 * * * — ежедневно в 02:00 МСК
Скрипт/opt/scripts/backup.sh
Журнал/var/log/backup.log
Хранение/opt/backups/<датаВремя>/
Retention3 дня → хранится 4 ночные копии, ~1.3 GB каждая (максимум ~5 GB)
Часовой поясEurope/Moscow — расписания, журналы и статусы в МСК (переведён с UTC 12.09.2026)
Статус для бота/opt/backups/.last-status

📦 Что попадает в копию

Файл в копии Источник Что внутри
mysqldump-all.sql.gz
(~1.3 MB)
docker exec mylife-common-db Консистентный дамп всех баз MySQL проекта mylife (--single-transaction — снимок без остановки работы). Данные БД — всего ~48 MB, поэтому дамп крошечный
projects-backup.tar.gz
(~1.3 GB)
/opt/projects кроме mylife/.../data/mysql Код, файлы и .env всех проектов (main-site, project-example, mylife). «Горячие» файлы БД исключены — их заменил дамп
npm-backup.tar.gz
(~4 MB)
/opt/infrastructure/npm Конфигурация Nginx Proxy Manager (proxy hosts, access-листы) и SSL-сертификаты
3x-ui-backup.tar.gz
(~270 KB)
/opt/3x-ui/data + docker-compose.yml База VPN-панели (inbounds, клиенты, их ключи и трафик-лимиты) и сертификаты
monitoring-backup.tar.gz
(~2.2 MB)
/opt/infrastructure/uptime-kuma/data + netdata/config Настройки и история проверок Uptime Kuma; пороги алертов и токен бота Netdata
infrastructure-configs.tar.gz /opt/infrastructure/*.yml Compose-файлы инфраструктуры
system-backup.tar.gz
(~16 KB)
/opt/scripts, /etc/vps-report.env, systemd-юнит бота, sshd_config, fail2ban Скрипты (включая сам backup.sh и бота), токен окружения, системные настройки
crontab-root.txt
ufw-status.txt
containers-list.txt
crontab -l, ufw status, docker ps -a Снимки расписаний, правил файрвола и списка контейнеров на момент копии

🧠 Ключевые решения скрипта

📬 Статус бэкапа в Telegram

В конце каждого запуска скрипт пишет одну строку в /opt/backups/.last-status:

OK|12.09.2026 20:31|1.3G|1
│        │             │    └─ mysqldump прошёл (1) или нет (0)
│        │             └────── размер копии
│        └──────────────────── время (МСК)
└───────────────────────────── OK или "ПРОБЛЕМЫ (N)"
        

Отчёт /status бота теперь содержит строку бэкапа:

🖥 VPS 193.32.179.138
💾 Диск: 66% занято, свободно 12.7 GB
🧠 RAM: 64% занято
⚡ CPU: 41% · load 1m: 0.96
⏱ Аптайм: 42 дн
🗂 Бэкап: OK, 1.3G, 12.09.2026 20:31 МСК
🛡 Алерты: 1 (disk_space_usage — WARNING)
        

Если копии нет дольше 30 часов (ночной запуск не состоялся), бот сообщит ⚠️ нет свежей копии (N ч назад) — это ранний сигнал, что cron или скрипт сломались.

🔍 Как проверить

# Ручной запуск (создаст копию прямо сейчас; retention почистит старые)
/opt/scripts/backup.sh

# Хвост журнала
tail -20 /var/log/backup.log

# Состав последней копии и статус
ls -lh /opt/backups/$(ls -t /opt/backups | grep ^20 | head -1)/
cat /opt/backups/.last-status

# Убедиться, что дамп не пустой и читается
D=$(ls -t /opt/backups | grep ^20 | head -1)
zcat /opt/backups/$D/mysqldump-all.sql.gz | head -5
tar -tzf /opt/backups/$D/3x-ui-backup.tar.gz
        

♻️ Восстановление (кратко)

# База MySQL (в пустой/запущенный контейнер mylife-common-db)
gunzip < mysqldump-all.sql.gz | docker exec -i mylife-common-db \
  sh -c 'mysql -uroot -p"$MYSQL_ROOT_PASSWORD"'

# Файлы проектов, конфиги, 3x-ui, мониторинг — распаковать на место
tar -xzf projects-backup.tar.gz -C /            # восстановит /opt/projects/...
tar -xzf npm-backup.tar.gz -C /
tar -xzf 3x-ui-backup.tar.gz -C /
tar -xzf monitoring-backup.tar.gz -C /

# После восстановления контейнеров — перезапустить
cd /opt/infrastructure && docker compose -f docker-compose.yml up -d
        
⚠️ Важно: порядок при полном восстановлении — сначала поднимается инфраструктура (Docker, NPM), затем распаковываются конфиги, затем разворачивается база, и только потом запускаются проекты. Архивы содержат секреты (токены, сертификаты, дамп БД) — доступ к бэкапам равен доступу ко всем сервисам.

⚠️ Ограничения и что дальше

📜 История изменений

Дата Изменение
23.07.2026 Первая версия: NPM, проекты, конфигурации, retention 7 дней
12.09.2026 (07:42 МСК) Добавлена строка 3x-ui (с подавлением ошибок — работала вслепую)
12.09.2026 (текущая) Консистентный mysqldump; исключение «горячих» файлов БД из архива; добавлены Uptime Kuma, конфиг Netdata, скрипты и системные настройки; убрано подавление ошибок; retention 3 дня; файл статуса для Telegram-бота; таймстампы в журнале
12.09.2026 (20:27 МСК) Сервер переведён с UTC на Europe/Moscow: cron, журналы и статусы — в МСК; ночной бэкап теперь в 02:00 МСК

🎉 Готово. Документ обновляйте при изменении состава бэкапов.