ГлавнаяАкадемияNode-RED: установка, flows, msg/JSON, отладка → Резервное копирование и восстановление сценариев

Резервное копирование и восстановление сценариев

Урок 6 · Node-RED: установка, flows, msg/JSON, отладка · 30 мин · theory

Введение: Почему резервное копирование — это критически важно

В любой системе автоматизации, от простого умного дома до небольшого промышленного объекта, логика управления представляет собой ценнейший цифровой актив. Сценарии, которые вы создаете в Node-RED — это результат часов, а иногда и недель проектирования, кодирования и отладки. Потеря этой работы может привести не только к финансовым убыткам, но и к полной остановке функционирования объекта. Поэтому резервное копирование (бэкап) является не просто хорошей практикой, а критически важным процессом для любого профессионального инженера-автоматизатора.

Причины потери данных могут быть различными:

Для эффективного управления резервными копиями необходимо точно знать, какие файлы являются ключевыми. На платформе контроллера HI вся основная конфигурация Node-RED хранится в специальной директории пользователя.

> 📋 Ключевые понятия:

> Вся конфигурация Node-RED, относящаяся к вашим сценариям, по умолчанию находится в скрытой директории в домашнем каталоге пользователя, под которым запущен сервис: `~/.node-red/`.

В этой директории находятся три файла, которые составляют основу вашей работы:

  • `flows.json`: Это сердце ваших сценариев. В данном файле в формате JSON хранится описание всех ваших потоков (flows), узлов, их настроек и связей между ними. Потеря этого файла равносильна потере всей разработанной логики автоматизации.
  • `flows_cred.json`: Как мы уже рассматривали ранее, Node-RED использует механизм Credentials Service для безопасного хранения конфиденциальной информации — паролей, API-ключей, токенов. Этот файл содержит зашифрованные учетные данные. Без него ваши потоки, скорее всего, запустятся, но не смогут подключиться к внешним системам (MQTT-брокерам, базам данных MySQL, облачным сервисам). Для полного восстановления работоспособности этот файл так же важен, как и `flows.json`.
  • `settings.js`: Это главный файл настроек самой среды Node-RED. Он определяет, например, какой порт используется для интерфейса, где хранятся файлы, включены ли дополнительные функции, такие как Projects, и многое другое. Хотя его можно восстановить по умолчанию, любые пользовательские настройки (например, для интеграции с базой данных MySQL для хранения контекста) будут утеряны, если не сохранить этот файл.
  • Понимание назначения и расположения этих файлов — первый шаг к построению надежной стратегии резервного копирования и восстановления.

    ---

    Ручное резервное копирование через SSH

    Самый прямой и надежный способ создать резервную копию — это скопировать файлы конфигурации непосредственно с файловой системы контроллера на ваш локальный компьютер или на сетевой диск. Для этого используется протокол SSH (Secure Shell) и утилита `scp` (Secure Copy).

    > ⚠️ Внимание:

    > Всегда останавливайте службу Node-RED перед копированием файлов сценариев. Node-RED периодически записывает изменения в файл `flows.json`. Копирование файла в момент записи может привести к его повреждению (созданию "битой" копии), что сделает восстановление из такого бэкапа невозможным.

    Процесс ручного резервного копирования состоит из следующих шагов:

  • Подключение к контроллеру по SSH.
  • Откройте терминал на вашем компьютере (PowerShell в Windows, Терминал в macOS или Linux) и выполните команду подключения, заменив `user` и `controller_ip` на реальные данные вашего контроллера HI.

        ssh user@192.168.1.10

    Вам будет предложено ввести пароль.

  • Остановка службы Node-RED.
  • После успешного подключения к контроллеру, остановите сервис Node-RED, чтобы гарантировать целостность файлов. На контроллере HI, работающем на Debian, это делается с помощью `systemctl`.

        sudo systemctl stop nodered.service

    Система запросит пароль пользователя для выполнения команды с правами администратора.

  • Создание архива (рекомендуемый способ).
  • Копировать файлы по одному неудобно и можно что-то забыть. Лучшей практикой является создание единого архивного файла, содержащего всю директорию `.node-red` или, как минимум, ключевые файлы. Это делается с помощью утилиты `tar`.

    Создадим архив с датой в имени файла для удобства версионирования.

        # Создаем директорию для бэкапов, если ее еще нет

    mkdir -p ~/backups

    # Архивируем ключевые файлы в один файл с текущей датой

    tar -czvf ~/backups/nodered_backup_$(date +%Y-%m-%d).tar.gz -C ~/.node-red flows.json flows_cred.json settings.js

    * `tar` — утилита архивирования.

    * `-c` — создать архив.

    * `-z` — сжать с помощью gzip.

    * `-v` — выводить информацию о процессе.

    * `-f` — указать имя файла архива.

    * `-C ~/.node-red` — сменить директорию на `.node-red` перед добавлением файлов, чтобы в архиве не было полного пути.

  • Копирование архива на локальный компьютер.
  • Теперь, когда служба остановлена и архив создан, откройте новый терминал на вашем локальном компьютере (не закрывая сессию SSH в первом) и используйте `scp` для загрузки файла.

        # Формат: scp user@host:удаленный_путь локальный_путь

    scp user@192.168.1.10:~/backups/nodered_backup_2023-10-27.tar.gz ./

    Замените `2023-10-27` на актуальную дату. Файл будет скопирован в текущую директорию на вашем компьютере.

  • Запуск службы Node-RED.
  • После завершения копирования не забудьте запустить сервис Node-RED обратно на контроллере. Вернитесь в окно терминала с SSH-сессией.

        sudo systemctl start nodered.service

    Этот метод, хоть и ручной, дает полный контроль над процессом и является обязательным навыком для любого инженера.

    ---

    Восстановление сценариев из резервной копии

    Восстановление — это обратный процесс, который может понадобиться после сбоя оборудования или в случае, если последние изменения в логике привели систему в неработоспособное состояние и нужно "откатиться" к стабильной версии.

    > 💡 Подсказка:

    > Перед тем как начать восстановление, всегда создавайте резервную копию текущего состояния (`flows.json`, `flows_cred.json`). Это ваш "спасательный круг". Если импортируемая резервная копия по какой-то причине окажется неработоспособной или не той версии, вы сможете легко вернуться к состоянию "до восстановления".

    Процедура восстановления:

  • Загрузка архива на контроллер.
  • Откройте терминал на вашем локальном компьютере и используйте `scp` для копирования файла резервной копии в домашнюю директорию на контроллере.

        # Формат: scp локальный_путь user@host:удаленный_путь

    scp ./nodered_backup_2023-10-27.tar.gz user@192.168.1.10:~/

  • Подключение к контроллеру и остановка службы.
  • Подключитесь к контроллеру по SSH и немедленно остановите сервис Node-RED. Это предотвратит любые конфликты при замене файлов.

        ssh user@192.168.1.10

    sudo systemctl stop nodered.service

  • Создание бэкапа текущего состояния (Safety Net).
  • Как было сказано в подсказке, сохраним текущие файлы на всякий случай.

        # Переименуем текущие файлы, добавив суффикс .bak

    mv ~/.node-red/flows.json ~/.node-red/flows.json.bak

    mv ~/.node-red/flows_cred.json ~/.node-red/flows_cred.json.bak

  • Распаковка архива и замена файлов.
  • Теперь распакуем архив, который мы загрузили на шаге 1, непосредственно в рабочую директорию Node-RED.

        # Распаковываем архив, файлы из него заменят отсутствующие

    tar -xzvf ~/nodered_backup_2023-10-27.tar.gz -C ~/.node-red/

    Команда `tar -x...` извлечет файлы (`flows.json`, `flows_cred.json`, `settings.js`) из архива и поместит их в директорию `~/.node-red/`.

  • Запуск службы и проверка.
  • Запускаем сервис и проверяем результат.

        sudo systemctl start nodered.service

    Откройте веб-интерфейс Node-RED в браузере. Вы должны увидеть именно те потоки, которые были на момент создания резервной копии. Проверьте, что все узлы с учетными данными (например, MQTT-брокеры) показывают статус "connected". Пройдитесь по основным сценариям, чтобы убедиться в их работоспособности.

    Важно понимать, что все изменения, сделанные в редакторе после даты создания бэкапа и до момента восстановления, будут безвозвратно утеряны.

    ---

    Автоматизация бэкапов с помощью Cron

    Ручное резервное копирование эффективно, но полагаться только на него рискованно — можно забыть, отложить на потом и в итоге остаться без свежей копии в критический момент. Стандартный планировщик задач в Linux, cron, позволяет полностью автоматизировать этот процесс.

    Cron — это демон (фоновая служба), который выполняет команды или скрипты по заданному расписанию. Расписание хранится в специальном файле, называемом crontab.

    Структура crontab

    Каждая строка в файле crontab представляет собой одно задание и имеет следующий формат:

    `минута час день_месяца месяц день_недели команда`

    | Поле | Допустимые значения | Описание |

    |---------------|---------------------|-----------------------------------|

    | минута | 0-59 | Минута, в которую выполнится команда |

    | час | 0-23 | Час (в 24-часовом формате) |

    | день_месяца | 1-31 | Число месяца |

    | месяц | 1-12 | Номер месяца |

    | день_недели | 0-7 (0 и 7 - Вс) | День недели |

    Символ `` означает "любое значение". Например, расписание `0 3 ` означает "каждый день в 3:00 ночи".

    Скрипт для автоматического бэкапа

    Создадим простой, но мощный shell-скрипт, который будет выполнять архивацию.

  • Подключитесь к контроллеру по SSH.
  • Создайте файл скрипта, например, `nodered_backup.sh`, с помощью текстового редактора `nano`.
  •     mkdir -p ~/scripts

    nano ~/scripts/nodered_backup.sh

  • Вставьте в редактор следующий код:
  •     #!/bin/bash

    # Директория, куда будут сохраняться бэкапы

    BACKUP_DIR="/home/user/backups/nodered"

    # Исходная директория Node-RED

    SOURCE_DIR="/home/user/.node-red"

    # Убедитесь, что директория для бэкапов существует

    mkdir -p $BACKUP_DIR

    # Формируем имя файла с датой и временем

    FILENAME="nodered_backup_$(date +%Y-%m-%d_%H-%M-%S).tar.gz"

    # Создаем архив (без остановки сервиса, т.к. это может прервать работу)

    # Для максимальной надежности, cron-задачу лучше ставить на время наименьшей активности

    tar -czf "$BACKUP_DIR/$FILENAME" -C "$SOURCE_DIR" flows.json flows_cred.json settings.js

    # Удаляем бэкапы старше 7 дней, чтобы не занимать место на диске

    find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +7 -delete

    echo "Node-RED backup created: $BACKUP_DIR/$FILENAME"

    > ℹ️ Информация: Замените `/home/user` на реальный путь к домашней директории вашего пользователя. Вы можете получить его, выполнив команду `echo $HOME`.

  • Сохраните файл (в `nano` это `Ctrl+X`, затем `Y`, затем `Enter`) и сделайте его исполняемым:
  •     chmod +x ~/scripts/nodered_backup.sh

    Настройка расписания в cron

    Теперь добавим наш скрипт в планировщик.

  • Откройте редактор crontab для текущего пользователя:
  •     crontab -e

  • Добавьте в конец файла следующую строку, чтобы запускать скрипт каждый день в 02:30 ночи:
  •     30 2   * /home/user/scripts/nodered_backup.sh > /dev/null 2>&1

    `30 2 ` — расписание (02:30 ежедневно).

    * `/home/user/scripts/nodered_backup.sh` — полный путь к нашему скрипту.

    * `> /dev/null 2>&1` — перенаправляет весь стандартный вывод и вывод ошибок в "никуда", чтобы cron не отправлял вам письма по почте при каждом выполнении.

    Теперь контроллер будет автоматически создавать резервную копию ваших сценариев и удалять старые копии, обеспечивая надежную защиту вашей работы без вашего участия.

    ---

    Краткий обзор: Использование функции "Projects" для контроля версий

    Простое копирование файлов — это хорошо, но для сложных объектов и командной работы существует более мощный инструмент, встроенный в Node-RED — Projects (Проекты). Эта функция превращает ваш редактор Node-RED в полноценную среду разработки с системой контроля версий Git.

    > ℹ️ Информация:

    > Функция Projects — это более продвинутый и надежный способ управления конфигурацией, особенно в крупных и командных проектах. Мы детально рассмотрим его настройку и использование в отдельном продвинутом модуле. Сейчас важно понять его концептуальные преимущества.

    Что такое Node-RED Projects?

    Когда вы активируете эту функцию, вместо одного файла `flows.json` Node-RED создает структуру проекта, которая включает:

    Самое главное — вся эта папка становится Git-репозиторием. Это дает колоссальные преимущества:

  • Версионирование: Вы можете "сохранять" (коммитить) состояние вашего проекта в любой момент времени с осмысленным комментарием (например, "Добавлена логика управления освещением в гостиной").
  • История изменений: Вы всегда можете посмотреть, кто, когда и какие изменения вносил в потоки.
  • Возможность отката: Если новая функция сломала систему, вы можете одной командой откатиться к любой предыдущей стабильной версии.
  • Ветвление: Вы можете создавать "ветки" для безопасной разработки и тестирования нового функционала, не затрагивая основной, работающий на объекте поток.
  • Централизованное хранение: Проект можно связать с удаленным репозиторием на GitHub, GitLab или Bitbucket. Это не только надежный облачный бэкап, но и инструмент для совместной работы команды инженеров над одним объектом.
  • Сравнение методов резервного копирования

    | Критерий | Ручное копирование (scp) | Автоматизация (cron + tar) | Node-RED Projects (Git) |

    |---------------------------|-------------------------------------|-----------------------------------------------------|--------------------------------------------------------|

    | Простота настройки | Очень высокая | Средняя (требует написания скрипта и настройки cron) | Средняя (требуется включить в `settings.js` и знать основы Git) |

    | Надежность | Низкая (зависит от человека) | Высокая (автоматически по расписанию) | Очень высокая (полная история + удаленное хранение) |

    | Гранулярность | Резервная копия всего файла | Резервная копия всего файла на определенную дату | Сохранение каждого логического изменения (коммит) |

    | Восстановление | Замена файла целиком | Замена файла целиком на дату | Откат к любой версии, слияние изменений |

    | Командная работа | Не поддерживается | Не поддерживается | Идеально подходит, основной сценарий использования |

    | Лучший сценарий | Быстрый бэкап перед рискованным изменением | Ежедневное резервное копирование на одном контроллере | Крупные проекты, командная разработка, сложные объекты |

    Активация Projects выполняется добавлением одной строки в файл `settings.js`:

    editorTheme: {
    

    projects: {

    enabled: true

    }

    }

    После перезапуска Node-RED предложит вам создать ваш первый проект.

    ---

    Резюме и ключевые выводы

    В этом уроке мы рассмотрели фундаментально важную тему — обеспечение сохранности вашей работы через резервное копирование. Отсутствие стратегии бэкапа является профессиональной халатностью и может привести к катастрофическим последствиям на реальном объекте.

    Мы изучили три основных подхода, каждый из которых имеет свою область применения:

    Ключевой вывод урока: на каждом объекте, который вы внедряете, должна быть реализована как минимум одна стратегия резервного копирования. Для большинства объектов комбинация из автоматического `cron`-бэкапа и базовых знаний ручного копирования является достаточной и необходимой мерой. Всегда помните, что файлы `flows.json` и `flows_cred.json` — это ваш минимально необходимый набор для восстановления логики автоматизации после любого сбоя.

    Что дальше?

    Теперь, когда вы умеете защищать свою работу, мы готовы перейти к созданию более сложных и интеллектуальных сценариев. В следующем уроке мы углубимся в работу с контекстом, научимся сохранять состояние устройств между перезагрузками контроллера и создадим наши первые конечные автоматы (FSM) для управления сложными системами, такими как климат-контроль.