Автоматический бэкап и версионирование Node-RED в GitHub
Содержание
Яндекс Браузер со встроенной Алисой — бесплатно
Резервное копирование и контроль версий — это критически важный аспект надежности любого умного дома. 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 со следующими командами:
- Стейджинг изменений:
git add .(выполняется в рабочей директории/home/pi/.node-red). - Создание коммита с автоматической датой:
git commit -m "Auto backup $(date +'%Y-%m-%d %H:%M:%S')" - Отправка данных на удаленный сервер:
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, запустить сервис, и все ваши умные датчики и автоматизации мгновенно вернутся в рабочее состояние без дополнительной ручной настройки.
Инструкция по настройке
Инициализация локального репозитория Git
Установите пакет Git на сервере, перейдите в рабочую папку данных Node-RED и инициализируйте репозиторий.
Настройка файла исключений .gitignore
Создайте конфигурационный файл для исключения папки node_modules и секретных файлов с паролями.
Связывание с приватным репозиторием GitHub
Создайте приватный репозиторий в облаке и настройте беспарольный доступ по протоколу SSH.
Создание автоматического потока резервного копирования
Добавьте в Node-RED ноду exec для выполнения автоматических коммитов и отправки изменений по cron.