Проект: IoT Умный дом (Raspberry Pi + Zigbee2MQTT + MySQL + PHP)
В этой статье я расскажу, как настроить автоматическое клонирование всего IoT-проекта (файлы, база данных, логи) на удалённый сервер. Скрипт создаёт резервную копию, архивирует, отправляет по SSH и восстанавливает на удалённой машине. Идеально для ежемесячного зеркалирования.
/var/www/html/iotiot_db (пользователь iot_user)/var/log/cron_*.log, /var/log/battery_check.logСоздайте файл /home/Tazzick/backup_and_clone.sh и сделайте его исполняемым:
#!/bin/bash
# ============================================
# КЛОНИРОВАНИЕ IoT ПАНЕЛИ НА УДАЛЁННЫЙ СЕРВЕР
# ============================================
# --- НАСТРОЙКИ ---
LOCAL_PROJECT="/var/www/html/iot"
REMOTE_USER="ваш_логин"
REMOTE_HOST="ваш_сервер.cz"
REMOTE_PORT="22"
REMOTE_PATH="/var/www/html/iot"
DB_NAME="iot_db"
DB_USER="iot_user"
DB_PASS="123456"
LOG_FILE="/var/log/iot_clone.log"
BACKUP_DIR="/home/Tazzick/iot_backups"
DATE=$(date +"%Y%m%d_%H%M%S")
# --- ФУНКЦИИ ---
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}
error_exit() {
log "❌ ОШИБКА: $1"
exit 1
}
# --- НАЧАЛО ---
log "🚀 ЗАПУСК КЛОНИРОВАНИЯ IoT ПАНЕЛИ"
mkdir -p $BACKUP_DIR
# 1. Бэкап базы данных
log "📦 Создание дампа базы данных..."
BACKUP_FILE="$BACKUP_DIR/iot_db_$DATE.sql"
mysqldump --single-transaction --routines --triggers -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_FILE 2>/dev/null && gzip $BACKUP_FILE
[ $? -eq 0 ] || error_exit "Не удалось создать дамп БД"
# 2. Архивация файлов проекта
log "📁 Архивация файлов проекта..."
PROJECT_BACKUP="$BACKUP_DIR/iot_files_$DATE.tar.gz"
tar --exclude='*/cache/*' --exclude='*/tmp/*' --exclude='*/logs/*.log' -czf $PROJECT_BACKUP -C $LOCAL_PROJECT .
[ $? -eq 0 ] || error_exit "Не удалось создать архив проекта"
# 3. Архивация логов
log "📋 Архивация системных логов..."
LOG_BACKUP="$BACKUP_DIR/iot_logs_$DATE.tar.gz"
tar -czf $LOG_BACKUP /var/log/cron_*.log /var/log/fish-*.log /var/log/battery_check.log 2>/dev/null
# 4. Проверка SSH подключения
log "🌐 Проверка подключения к $REMOTE_HOST..."
ssh -p $REMOTE_PORT -o ConnectTimeout=10 $REMOTE_USER@$REMOTE_HOST "echo OK" || error_exit "SSH недоступен"
# 5. Копирование на удалённый сервер
log "📤 Копирование файлов..."
ssh -p $REMOTE_PORT $REMOTE_USER@$REMOTE_HOST "mkdir -p $REMOTE_PATH"
scp -P $REMOTE_PORT $PROJECT_BACKUP $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/iot_files.tar.gz || error_exit "Ошибка копирования"
scp -P $REMOTE_PORT ${BACKUP_FILE}.gz $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/iot_db.sql.gz || error_exit "Ошибка копирования дампа"
# 6. Восстановление на удалённом сервере
log "🛠️ Восстановление на удалённом сервере..."
ssh -p $REMOTE_PORT $REMOTE_USER@$REMOTE_HOST << 'ENDSSH'
cd /var/www/html/iot
tar -xzf iot_files.tar.gz && rm -f iot_files.tar.gz
gunzip -c iot_db.sql.gz | mysql -u iot_user -p123456 iot_db 2>/dev/null
rm -f iot_db.sql.gz
touch /var/log/battery_check.log && chmod 666 /var/log/battery_check.log
chown -R www-data:www-data /var/www/html/iot
chmod -R 755 /var/www/html/iot
ENDSSH
[ $? -eq 0 ] || error_exit "Ошибка восстановления"
# 7. Очистка старых бэкапов (оставляем 3)
cd $BACKUP_DIR
ls -t iot_*.sql.gz 2>/dev/null | tail -n +4 | xargs rm -f 2>/dev/null
ls -t iot_*.tar.gz 2>/dev/null | tail -n +4 | xargs rm -f 2>/dev/null
log "🎉 КЛОНИРОВАНИЕ ЗАВЕРШЕНО!"
Чтобы скрипт работал без ручного ввода пароля, настройте SSH-ключи:
# Создаём ключ
ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa_iot
# Копируем на удалённый сервер
ssh-copy-id -i ~/.ssh/id_rsa_iot.pub ваш_логин@ваш_сервер.cz
# Добавляем конфиг для удобства
cat >> ~/.ssh/config << 'EOF'
Host iot-server
HostName ваш_сервер.cz
User ваш_логин
Port 22
IdentityFile ~/.ssh/id_rsa_iot
EOF
Добавьте задачу в crontab для ежемесячного клонирования:
# Редактируем crontab
crontab -e
# Запуск 1-го числа каждого месяца в 03:00
0 3 1 * * /home/Tazzick/backup_and_clone.sh >> /var/log/iot_clone.log 2>&1
На чешском сервере предварительно установите необходимое ПО:
# Установка пакетов (Ubuntu/Debian)
sudo apt update
sudo apt install -y nginx mysql-server php-fpm php-mysql php-curl
# Создание базы данных
mysql -u root -p
CREATE DATABASE iot_db;
CREATE USER 'iot_user'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON iot_db.* TO 'iot_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
| Этап | Действие | Результат |
|---|---|---|
| 1 | Дамп БД | iot_db_20250601_030000.sql.gz |
| 2 | Архивация файлов проекта | iot_files_20250601_030000.tar.gz |
| 3 | Архивация логов | iot_logs_20250601_030000.tar.gz |
| 4 | Проверка SSH | Подключение к удалённому серверу |
| 5 | Копирование | Архивы переданы через SCP |
| 6 | Восстановление | Распаковка и импорт БД на удалённом сервере |
| 7 | Очистка | Остаются только 3 последних бэкапа |
Все действия записываются в файл /var/log/iot_clone.log:
[2026-06-01 03:00:01] 🚀 ЗАПУСК КЛОНИРОВАНИЯ IoT ПАНЕЛИ
[2026-06-01 03:00:05] 📦 Создание дампа базы данных...
[2026-06-01 03:00:10] ✅ Дамп базы создан
[2026-06-01 03:00:15] 📁 Архивация файлов проекта...
[2026-06-01 03:00:25] ✅ Архив проекта создан
[2026-06-01 03:00:30] 🌐 Проверка подключения...
[2026-06-01 03:00:32] ✅ Подключение успешно
[2026-06-01 03:00:35] 📤 Копирование файлов...
[2026-06-01 03:01:00] 🛠️ Восстановление на удалённом сервере...
[2026-06-01 03:02:00] 🎉 КЛОНИРОВАНИЕ ЗАВЕРШЕНО!
Добавьте в конец скрипта:
# Отправка уведомления в Telegram
BOT_TOKEN="1234567890:ABCdefGHIjklmNOPqrstUVwxyz"
CHAT_ID="123456789"
curl -s "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d "chat_id=${CHAT_ID}" \
-d "text=✅ IoT клон готов за $(($SECONDS / 60)) мин $(($SECONDS % 60)) сек" > /dev/null
chmod 600 ~/.ssh/id_rsa_iotsudo apt install mysql-clientsudo apt install gzip#!/bin/bash
# Быстрый экспорт БД на удалённый сервер
DATE=$(date +%Y%m%d)
mysqldump -u iot_user -p123456 iot_db | gzip | \
ssh ваш_логин@ваш_сервер.cz "gunzip | mysql -u iot_user -p123456 iot_db"
Скрипт полностью автоматизирует процесс клонирования IoT-проекта. Теперь у вас есть:
Скрипт можно использовать для ежемесячного клонирования проекта на вторичный сервер, для тестовой среды или для создания полноценного бэкапа.
🔗 Автор: Tazzick
📅 Версия: 1.0 (июнь 2026)
📧 Контакты: —
🌐 Проект: IoT Умный дом на Raspberry Pi + Zigbee2MQTT
Комментарии
Пока нет комментариев. Будьте первым!