Автоматический бэкап и версионирование Node-RED в GitHub

Содержание
Рекомендация
Управляй умным домом с компьютера

Яндекс Браузер со встроенной Алисой — бесплатно

Установить
Реклама. ООО «Яндекс», ИНН 7736207543

Резервное копирование и контроль версий — это критически важный аспект надежности любого умного дома. Node-RED является центральным узлом автоматизации, где сосредоточена вся логика работы ваших устройств, датчиков и сценариев. Потеря этих данных из-за внезапного выхода из строя SD-карты на Raspberry Pi или сбоя питания может уничтожить месяцы сложной работы по настройке. Простой экспорт JSON-файлов вручную через веб-интерфейс неудобен и не позволяет отслеживать историю изменений.

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

Инициализация локального репозитория Git

Первым шагом необходимо подготовить серверную часть на вашем хосте, где запущен Node-RED. Обычно это миникомпьютер Raspberry Pi или домашний сервер под управлением Linux. Для начала работы подключитесь к серверу по протоколу SSH и перейдите в рабочую директорию данных Node-RED. По умолчанию в операционных системах Linux эта папка находится по пути ~/.node-red в домашнем каталоге пользователя.

Перед выполнением любых операций с системой контроля версий убедитесь, что в системе установлен пакет git. Сделать это можно с помощью стандартного менеджера пакетов:

sudo apt update
sudo apt install git -y

После установки перейдите в папку данных и инициализируйте новый пустой локальный репозиторий Git с помощью команды git init. Это создаст скрытую папку .git, которая будет отслеживать изменения файлов.

Настройка файла исключений .gitignore

В рабочей директории Node-RED содержится множество служебных файлов, которые не имеет смысла отправлять в удаленный репозиторий GitHub. К ним относятся локальные логи, временные файлы сессий, а также папка node_modules, содержащая код установленных нод. Загрузка этой папки сильно перегрузит ваш репозиторий и усложнит чтение коммитов.

Более того, файлы конфигурации могут содержать секретные ключи доступа, пароли от брокера MQTT и токены интеграций умного дома. Чтобы предотвратить утечку конфиденциальных данных в публичную сеть, обязательно создайте файл .gitignore в корне папки ~/.node-red.

Добавьте в созданный файл .gitignore следующие строки:

node_modules/
.config.json.backup
.sessions.json
flows_cred.json
*.log

IMPORTANT

Файл flows_cred.json содержит все зашифрованные учетные записи, пароли от баз данных, токены авторизации и пароли Wi-Fi. Ни при каких обстоятельствах не отправляйте его в удаленный репозиторий GitHub, даже если репозиторий является приватным. Нарушение этого правила ставит под угрозу безопасность всей вашей локальной сети умного дома.

Настройка удаленного репозитория GitHub

Теперь необходимо связать локальный репозиторий с облачным сервисом GitHub. Создайте бесплатную учетную запись на сайте GitHub, если у вас её еще нет. В личном кабинете создайте новый репозиторий. Укажите понятное имя, например, node-red-backup, и обязательно выберите тип видимости Private (приватный), чтобы посторонние лица не имели доступа к вашей конфигурации.

Для авторизации вашего локального Git-клиента с облаком GitHub рекомендуется использовать SSH-ключи. Сгенерируйте новую пару ключей на сервере с помощью команды ssh-keygen -t ed25519 и добавьте публичный ключ в настройки вашего профиля GitHub в разделе SSH keys. Это позволит выполнять коммиты и отправлять изменения без ввода логина и пароля при каждой операции.

Альтернативный вариант — использование Personal Access Token (PAT). Вы можете сгенерировать токен доступа в настройках разработчика GitHub и использовать его вместо стандартного пароля при авторизации по протоколу HTTPS.

Свяжите ваш локальный каталог с созданным удаленным репозиторием с помощью команды:

git remote add origin git@github.com:username/node-red-backup.git

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

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

Создайте новый поток в Node-RED. Разместите на рабочей области ноду inject, которая будет запускать процесс резервного копирования по расписанию, например, каждую ночь в 03:00 или при каждом развертывании (deploy) конфигурации. Настройте ноду на выполнение раз в сутки.

Последовательно подключите к ней цепочку нод exec со следующими командами:

  1. Стейджинг изменений: git add . (выполняется в рабочей директории /home/pi/.node-red).
  2. Создание коммита с автоматической датой: git commit -m "Auto backup $(date +'%Y-%m-%d %H:%M:%S')"
  3. Отправка данных на удаленный сервер: git push -u origin main

WARNING

Если команда git commit возвращает ошибку из-за отсутствия глобальных настроек пользователя, вам необходимо один раз выполнить на сервере команды настройки имени и почты: git config --global user.email "your-email@example.com" и git config --global user.name "Your Name". Без этого автоматический коммит не сможет завершиться успешно.

TIP

Для более удобного визуального контроля вы можете включить встроенную функцию проектов в настройках Node-RED. Для этого откройте конфигурационный файл settings.js и установите параметр active: true в блоке editorTheme: { projects: { active: true } }. После перезапуска сервиса в интерфейсе появится полноценная вкладка для работы с ветками Git, коммитами и конфликтами слияния. О том, как выполнить базовую настройку среды автоматизации перед включением этой функции, читайте в нашей подробной статье про первоначальную настройку Node-RED.

NOTE

Автоматическое версионирование позволяет не беспокоиться о сохранности логики. В случае полной поломки диска вам достаточно установить чистую систему, склонировать ваш приватный репозиторий в папку ~/.node-red, запустить сервис, и все ваши умные датчики и автоматизации мгновенно вернутся в рабочее состояние без дополнительной ручной настройки.

Инструкция по настройке

1

Инициализация локального репозитория Git

Установите пакет Git на сервере, перейдите в рабочую папку данных Node-RED и инициализируйте репозиторий.

2

Настройка файла исключений .gitignore

Создайте конфигурационный файл для исключения папки node_modules и секретных файлов с паролями.

3

Связывание с приватным репозиторием GitHub

Создайте приватный репозиторий в облаке и настройте беспарольный доступ по протоколу SSH.

4

Создание автоматического потока резервного копирования

Добавьте в Node-RED ноду exec для выполнения автоматических коммитов и отправки изменений по cron.