~/ziphub — zsh
ZipHub·~/catalog~/articles~/feed~/sellers~/hire
auth login
[product]

SHM Backup Script: Auto MySQL & Docker Backups w/ Telegram Alerts

dignezzzgithubio@v1.0.0

Automate MySQL & Docker backups with Telegram alerts. This script backs up databases and Docker volumes, sending detailed notifications for easy management.

★ 0.0
0 reviews
1
installs
0
versions
today
last release
2026-06-05
updated
screenshot · 1
price
free / free
Скачать бесплатно
licenseopen
updates12 months free
escrow✓ refund within 14d
updated2026-06-05
D
@dignezzz
11 products · ★ 0.00
follow

SHM Backup Script Generator

📚 Навигация по документации | ⚡ Quick Start |

Удобный и безопасный скрипт для автоматического создания резервных копий SHM (Server Hosting Manager) с отправкой в Telegram.

💻 Поддерживаемые ОС

Скрипт официально протестирован и поддерживается на:

Debian Family

  • Debian 11 (Bullseye)
  • Debian 12 (Bookworm)
  • Debian 13 (Trixie)
  • Ubuntu 20.04 LTS (Focal Fossa)
  • Ubuntu 22.04 LTS (Jammy Jellyfish)
  • Ubuntu 24.04 LTS (Noble Numbat)

RHEL Family

  • CentOS 7, 8, 9
  • RHEL 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Fedora (последние версии)

Требования

  • Bash 4.0+
  • Docker (для работы с контейнерами)
  • curl (для отправки в Telegram)
  • tar, grep, sed, split (стандартные утилиты)

💡 Скрипт может работать и на других Linux-дистрибутивах с bash и Docker, но официально не тестировался.

⚡ Автоматическая установка зависимостей

Новое в v2.1! Скрипт автоматически проверяет и устанавливает недостающие зависимости:

  • 🔍 Проверка Docker - убеждается что Docker установлен (обязательно для SHM)
  • 📦 Автоустановка утилит - автоматически устанавливает curl, tar, grep, sed, split
  • Проверка версий - валидация Bash 4.0+

Что устанавливается автоматически:

  • curl (для Telegram API)
  • tar, grep, sed, split (системные утилиты)

Docker не устанавливается автоматически, так как он уже должен быть установлен для работы SHM.

При первом запуске скрипт проверит зависимости:

text
1✔ All dependencies satisfied

Или установит недостающие утилиты:

text
1✖ Missing required dependencies:
2  - curl
3
4Install missing packages automatically? (Y/n):

Просто нажмите Enter (или Y) и недостающие пакеты установятся автоматически! 🚀

🎯 Основные возможности

  • Автоматическое резервное копирование MySQL базы данных
  • Консистентный дамп БД (--single-transaction для InnoDB)
  • Резервное копирование Docker volume (WebDAV данные)
  • Выборочное или полное копирование файлов
  • Автоматическая отправка в Telegram
  • Разделение больших архивов (>49MB)
  • HTML-форматированные уведомления
  • Детальная информация о резервной копии
  • Lock-файл — защита от параллельного запуска
  • Автоочистка — trap гарантирует удаление временных файлов

📋 Что включается в резервную копию

Всегда:

  • 💾 MySQL база данных (db_backup.sql)
  • 📦 Docker volume WebDAV (если существует)

Опционально:

  • 📁 Вся папка SHM целиком, ИЛИ
  • 📄 Только docker-compose.yml и .env

🚀 Быстрый старт

💡 Новичок? Воспользуйтесь ⚡ Quick Start Guide для пошаговой установки за 5 минут!

Установка

bash
1bash <(wget -qO- https://dignezzz.github.io/shm/backup/backup.sh)

или

bash
1bash backup.sh

Настройка (5 простых шагов)

1️⃣ Выберите путь к SHM

1📍 Specify the path to docker-compose.yml for SHM:
2  1) /root/shm
3  2) /opt/shm  ← рекомендуемый
4  3) Enter manually

2️⃣ Выберите режим резервного копирования

1📁 Do you want to backup the entire folder?
2  1) Yes, backup all files and subfolders  ← рекомендуется
3  2) No, backup only specific files

3️⃣ Конфигурация БД (автоматически из .env или вручную)

Скрипт автоматически прочитает настройки из .env файла, если он существует.

4️⃣ Настройте Telegram

1📡 Telegram Settings:
2  Bot Token: 1234567890:ABCdefGHIjklMNOpqrsTUVwxyz  (от @BotFather)
3  Chat ID: -1001234567890  (ID вашего чата/канала)
4  Topic ID: (опционально, для топиков)

5️⃣ Проверьте и подтвердите

1#### 5️⃣ Проверьте и подтвердите
2
3```text
4====================================================
5   Configuration Summary
6====================================================
7📁 SHM Path:          /opt/shm
8📦 Backup Mode:       Full folder
9🗄️  DB Container:      shm-mysql-vsem
10💾 Database:          shm (user: root)
11📱 Telegram Chat:     -1001234567890
12
13Proceed? (Y/n):

6️⃣ Настройте автоматическое расписание

text
1====================================================
2   Automatic Backup Schedule Setup
3====================================================
4Would you like to set up automatic backups?
5
6  1) Every 1 hour
7  2) Every 2 hours
8  3) Every 3 hours
9  4) Every 4 hours
10  5) Every 6 hours
11  6) Every 12 hours
12  7) Once a day (at 03:00)  ← рекомендуется
13  8) Twice a day (at 03:00 and 15:00)
14  9) Skip (configure manually later)
15
16Choose an option (1-9) [7]:

Рекомендации по частоте:

  • Каждый час - для критичных данных, часто изменяющихся
  • Каждые 2-4 часа - для активно используемых систем
  • Каждые 6 часов - стандартный вариант (4 бэкапа в день)
  • Раз в день - для стабильных систем с редкими изменениями
  • Дважды в день - золотая середина для большинства случаев
1
2## 📱 Как выглядят сообщения в Telegram
3
4### Обычный бэкап

✅ SHM Backup Complete

🖥 Server: grizzly 📅 Date: 2025-11-06 14:30:15 UTC 📊 Archive: 23.5M

📦 Contents: 📁 Entire SHM folder 📋 db_backup.sql (MySQL) 💾 webdav-volume.tar.gz (shm-data)

💾 Database: shm (145.67 MB)

1
2### При разделении (>49MB)

✅ SHM Backup Complete

📦 Part: 2 of 3 (49M)

🖥 Server: grizzly 📅 Date: 2025-11-06 14:30:15 UTC 📊 Archive: 135M ...

1
2## ⏰ Автоматизация через Crontab
3
4### Вариант 1: Автоматическая настройка (рекомендуется)
5
6При установке скрипт предложит настроить автоматическое расписание. Просто выберите нужную частоту!
7
8**Преимущества:**
9- ✅ Настройка за 5 секунд
10- ✅ Автоматическая проверка существующих задач
11- ✅ Защита от дублирования
12- ✅ Готовые проверенные расписания
13
14### Вариант 2: Ручная настройка
15
16Если вы пропустили автоматическую настройку или хотите изменить расписание:
17
18```bash
19crontab -e

Добавьте одну из строк:

bash
1# Каждый час
20 * * * * /opt/shm/backup.sh
3
4# Каждые 2 часа
50 */2 * * * /opt/shm/backup.sh
6
7# Каждые 3 часа
80 */3 * * * /opt/shm/backup.sh
9
10# Каждые 4 часа
110 */4 * * * /opt/shm/backup.sh
12
13# Каждые 6 часов (стандарт)
140 */6 * * * /opt/shm/backup.sh
15
16# Каждые 12 часов
170 */12 * * * /opt/shm/backup.sh
18
19# Раз в день в 3:00
200 3 * * * /opt/shm/backup.sh
21
22# Два раза в день (3:00 и 15:00)
230 3,15 * * * /opt/shm/backup.sh
24
25# Еженедельно по понедельникам в 02:30
2630 2 * * 1 /opt/shm/backup.sh

Полезные команды crontab

bash
1# Просмотреть текущие задачи
2crontab -l
3
4# Редактировать задачи
5crontab -e
6
7# Удалить все задачи (осторожно!)
8crontab -r
9
10# Проверить логи выполнения (на большинстве систем)
11grep CRON /var/log/syslog

🛠 Ручной запуск

bash
1/opt/shm/backup.sh

Вы увидите:

1Creating MySQL backup...
2✔ Database backup created successfully
3Detected WebDAV volume: shm-data
4✔ Volume shm-data backed up successfully
5Creating archive...
6Sending to Telegram...
7✔ Archive successfully sent
8✔ Backup completed successfully

🔒 Безопасность

  • ✅ Пароли читаются из .env, не хранятся в открытом виде
  • ✅ Временные файлы удаляются через trap EXIT (даже при ошибке)
  • ✅ Lock-файл предотвращает параллельные запуски из cron
  • ✅ Безопасная обработка пользовательского ввода (без eval)
  • ✅ Строгая обработка ошибок (set -euo pipefail)
  • ✅ Проверка HTTP-кода ответа Telegram API
  • ✅ Рекомендуется ограничить права: chmod 700 /opt/shm/backup.sh

📊 Что происходит при выполнении

  1. � Проверка lock-файла (защита от параллельных запусков)
  2. 📝 Создание дампа MySQL (mysqldump --no-tablespaces --single-transaction)
  3. 🔍 Автоопределение WebDAV volume из docker-compose.yml
  4. 📦 Резервное копирование volume через Alpine контейнер
  5. 🗜️ Создание tar.gz архива
  6. ✂️ Разделение на части по 49MB (если нужно)
  7. 📤 Отправка в Telegram с HTML-форматированием
  8. 🧹 Автоматическая очистка (через trap EXIT)

❓ Часто задаваемые вопросы

Q: Как получить Telegram Bot Token?
A: Напишите @BotFather/newbot → следуйте инструкциям

Q: Как узнать Chat ID?
A: Добавьте бота в чат → напишите что-то → откройте https://api.telegram.org/bot<TOKEN>/getUpdates

Q: Можно ли изменить настройки?
A: Да, перезапустите backup.sh или отредактируйте /opt/shm/backup.sh вручную

Q: Volume не определился автоматически?
A: Скрипт пропустит его с предупреждением. БД и файлы будут сохранены.

Q: Как восстановить из backup?
A:

bash
1# Распаковать
2tar -xzf backup.tar.gz
3
4# Восстановить БД
5docker exec -i shm-mysql-vsem mysql -u root -p < db_backup.sql
6
7# Восстановить volume
8docker run --rm -v shm-data:/volume -v $(pwd):/backup alpine \
9    tar xzf /backup/webdav-volume.tar.gz -C /volume

🐛 Устранение проблем

Ошибка: "Failed to create database backup"

Проверьте:

  • ✅ MySQL контейнер запущен: docker ps | grep mysql
  • ✅ Правильные credentials в .env
  • ✅ Имя контейнера корректно

Ошибка: "Telegram returned an error"

Проверьте:

  • ✅ Токен бота правильный
  • ✅ Chat ID в правильном формате (-100 для каналов)
  • ✅ Бот добавлен в чат/канал
  • ✅ У бота есть права на отправку файлов

Volume не найден

  • Проверьте: docker volume ls | grep shm
  • Убедитесь что WebDAV сервис запущен

🎨 Особенности интерфейса

Интерактивная настройка:

  • ✨ Цветной терминал
  • 📋 Пронумерованные варианты
  • ✅ Подтверждение перед созданием
  • 📊 Резюме всех параметров

Telegram уведомления:

  • 💪 Жирный текст для заголовков (HTML)
  • 🔤 Моноширинный шрифт для данных
  • 🎨 Эмодзи для быстрой навигации
  • 📱 Удобно на мобильном

📝 Changelog

v2.2 (2026-03-02)

  • 🔒 Lock-файл — защита от параллельного запуска бэкапов из cron
  • 🧹 Trap cleanup — автоматическая очистка временных файлов при любом завершении (ошибка, Ctrl+C, успех)
  • 💾 --single-transaction в mysqldump — консистентный бэкап InnoDB без блокировок таблиц
  • 🛡️ Устранена уязвимость — инъекция через eval в обработке пользовательского ввода заменена на безопасный printf -v
  • 📡 Улучшена отправка в Telegram — проверка HTTP-кода ответа + exit-кода curl
  • 🔧 split добавлен в проверку зависимостей
  • 📝 Вывод UI-сообщений через stderr (исправлено зависание при интерактивном вводе)
  • 🐛 Исправлено чтение .env — корректная обработка значений в кавычках

v2.1 (2025-11-06)

  • Автоматическая проверка и установка утилит
  • 🔍 Проверка наличия Docker (обязателен для SHM)
  • 📦 Автоустановка curl, tar, grep, sed через apt/yum/dnf
  • ✅ Проверка совместимости ОС перед установкой
  • 💡 Упрощённая логика (Docker не устанавливается, так как уже есть в SHM)

v2.0 (2025-11-06)

  • ✨ Полный рефакторинг
  • 📱 HTML-форматирование в Telegram
  • 📊 Статистика: продолжительность, количество файлов, таблиц БД
  • 🎨 Интерактивное резюме
  • 🔍 Автоопределение volume
  • 🛡️ Улучшенная обработка ошибок
  • ⏰ Автоматическая настройка crontab (9 вариантов расписания)

v1.0

  • 🎉 Первый релиз

📄 Лицензия

MIT License

👨‍💻 Автор

dignezzz


Сделано с ❤️ для SHM Community

📝 Описание

SHM Backup создает резервные копии:

  • Файлов конфигурации SHM (весь каталог или только ключевые файлы, такие как docker-compose.yml и .env).
  • Базы данных MySQL из Docker-контейнера.

После создания резервной копии скрипт:

  • Архивирует данные.
  • Отправляет архив в указанный Telegram-чат или канал.
  • Если архив превышает лимит Telegram (50 МБ), разделяет его на части и отправляет последовательно.

💻 Установка

Для установки выполните команду:

bash
1bash <(wget -qO- https://dignezzz.github.io/shm/backup/backup.sh)

Установщик загрузит скрипт и проведет через процесс настройки.

⚙️ Настройка

Во время установки вам нужно указать:

  1. Путь к директории SHM:

    • /root/shm
    • /opt/shm
    • Другой путь (ввод вручную)
  2. Объем резервного копирования:

    • Вся директория SHM
    • Только ключевые файлы (docker-compose.yml, .env)
  3. Настройки базы данных:

    • Автоматическое получение из файла .env (если доступен).
    • Ручной ввод (если .env не найден):
      • Имя пользователя MySQL
      • Пароль MySQL
      • Имя базы данных
      • Имя Docker-контейнера с MySQL
  4. Настройки Telegram:

    • Токен бота (получить у @BotFather)
    • ID чата или канала (например, -1001234567890)
    • ID темы (опционально)

🚀 Использование

После установки скрипт сохраняется в директории SHM как backup.sh. Для запуска выполните:

bash
1bash /opt/shm/backup.sh

или

bash
1bash /root/shm/backup.sh

(в зависимости от выбранного пути).

Действия скрипта:

  1. Проверяет lock-файл (защита от повторного запуска).
  2. Создает временную директорию в /tmp.
  3. Выполняет консистентный дамп БД (mysqldump --single-transaction).
  4. Копирует файлы согласно настройкам.
  5. Создает архив резервной копии.
  6. Отправляет архив в Telegram (с проверкой HTTP-кода ответа).
  7. Автоматически очищает временные файлы через trap EXIT.

⏱️ Автоматизация

Для автоматического запуска по расписанию добавьте задачу в crontab:

bash
1crontab -e

Примеры расписания:

plaintext
1# Ежедневно в 03:00
20 3 * * * /opt/shm/backup.sh
3
4# Каждые 6 часов
50 */6 * * * /opt/shm/backup.sh
6
7# Каждый понедельник в 02:30
830 2 * * 1 /opt/shm/backup.sh

🔧 Устранение неполадок

Проблемы с базой данных

Если возникает ошибка:

1Error: Failed to create database backup

Проверьте:

  • Корректность имени пользователя и пароля MySQL.
  • Доступность Docker-контейнера MySQL.
  • Права пользователя MySQL для mysqldump.

Скрипт использует опцию --no-tablespaces, чтобы минимизировать требования к привилегиям.

Проблемы с Telegram

Если возникает ошибка:

1Error sending archive to Telegram

Проверьте:

  • Корректность токена бота.
  • Правильность ID чата/канала.
  • Добавлен ли бот в чат/канал.
  • Наличие у бота прав на отправку сообщений и файлов.

📌 Дополнительная информация

Структура архива

Архив содержит:

  • db_backup.sql — дамп базы данных MySQL.
  • Файлы конфигурации SHM (в зависимости от настроек).

Безопасность

  • Временные файлы хранятся в /tmp и удаляются через trap EXIT (даже при ошибке).
  • Lock-файл предотвращает параллельный запуск бэкапов.
  • Пароли базы данных не сохраняются в истории команд.
  • Рекомендуется ограничить доступ к скрипту:
    bash
    1chmod 700 /opt/shm/backup.sh
    

Изменение настроек

Для изменения настроек:

  1. Отредактируйте backup.sh вручную.
  2. Перезапустите установщик.

📜 Лицензия

MIT License

👨‍💻 Автор

dignezzz

## reviews · 0 ⟶ ★ 0.0

be the first to review

## discussion

$ topics --entity=product0
sign in to start or join a discussion
Обсуждений пока нет — начните первое.
↑↓ nav open⌘K palettei install? help