↩️ Назад

Категории

Полное клонирование IoT-проекта на удалённый сервер

08.06.2026 | Статья из категории: IOT умный дом

Проект: IoT Умный дом (Raspberry Pi + Zigbee2MQTT + MySQL + PHP)

В этой статье я расскажу, как настроить автоматическое клонирование всего IoT-проекта (файлы, база данных, логи) на удалённый сервер. Скрипт создаёт резервную копию, архивирует, отправляет по SSH и восстанавливает на удалённой машине. Идеально для ежемесячного зеркалирования.


📁 Структура проекта


⚙️ Полный скрипт клонирования

Создайте файл /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-ключи:

# Создаём ключ
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

⏰ Автоматический запуск по расписанию (cron)

Добавьте задачу в 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 (опционально)

Добавьте в конец скрипта:

# Отправка уведомления в 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

❌ Возможные ошибки и их решение


📦 Дополнительно: клонирование только базы данных

#!/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




Категории:

Категории

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Посетителей сегодня: 0
о блоге | карта блога | 📡 Подписаться на RSS

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA