Версия 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/<датаВремя>/ |
| Retention | 3 дня → хранится 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 | Снимки расписаний, правил файрвола и списка контейнеров на момент копии |
docker exec с паролем из переменных контейнера (пароль нигде не хранится в скрипте), и только при успехе исключает сырые файлы БД из projects-архива;2>/dev/null из старой версии (из-за них проблема с 3x-ui месяцами была бы невидимой). Каждая операция логируется и увеличивает счётчик ошибок;RETENTION_DAYS в начале скрипта;В конце каждого запуска скрипт пишет одну строку в /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
/var/log/backup.log не ротируется — при желании добавить в /etc/logrotate.d.| Дата | Изменение |
|---|---|
| 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 МСК |
🎉 Готово. Документ обновляйте при изменении состава бэкапов.