Подтвердить что ты не робот

Развертывание приложения Node.js и Node.js для малины Pi

У меня есть приложение Node.js, которое я хочу запустить на малине Pi.

И я хотел бы иметь возможность развернуть новую версию моего приложения, а также новые версии Node.js для этой малины Pi удаленно.

В принципе, что-то вроде:

$ pi-update 192.168.0.37 [email protected]
$ pi-update 192.168.0.37 [email protected]

У меня нет никаких предпочтений в отношении того, как перенести мое приложение на Pi, может ли оно нажимать или тянуть. Мне все равно (хотя я должен добавить, что код для приложения доступен из частного репозитория GitHub).

Кроме того, после развертывания Node.js и/или моего приложения, я хочу перезапустить потенциально запущенное приложение Node.js.

Как я могу это сделать? На какое программное обеспечение я должен смотреть? Это что-то, что можно легко сделать с помощью инструментов от Raspbian, или я должен искать стороннее программное обеспечение (devops tools, например, Chef and co.) Или...?

Любая помощь приветствуется: -)

4b9b3361

Ответ 1

a) Для непрерывной работы script вы можете использовать такие инструменты, как forever или pm2, в противном случае вы можете сделать приложение демона debian на raspian, который вы можете запустить с помощью sudo <servicename> start (если вы используете Arch Linux, это обрабатывается по-разному Я думаю).

b) Если ваша малина доступна из Интернета, вы можете использовать GitHub hook (Документация по API) для запуска каждый раз, когда вы нажимаете на изменение в своем репозитории. Этот хук в основном является конечной точкой URL на вашем Pi, который локально запускает небольшую оболочку script.

Этот script должен изящно закрыть приложение, сделать git pull для вашего репозитория и снова запустить приложение/службу. Вы также можете запустить эту оболочку script через SSH с вашей локальной машины, например. ssh [email protected] /path/to/your/script

Обновление script может выглядеть так:

# change the 'service' command to your script runner of choice
service <yourapp> stop
cd /path/to/your/app
git pull
service <yourapp> start

c) Проблема с удаленным обновлением Node заключается в том, что официальная бинарная сборка для Raspberry Pi появляется только очень нерегулярно, в противном случае было бы просто просто загрузить/обновить двоичные файлы с помощью wget или curl. Поэтому большую часть времени вам нужно либо перекрещивать компиляцию Node на вашей собственной машине, либо потратить около двух часов, чтобы перекомпилировать ее на вашем Pi. Если вы хотите использовать неофициальные сборки на GitHub, вы можете установить их с помощью curl -# -L https://gist.github.com/raw/3245130/v0.10.17/node-v0.10.17-linux-arm-armv6j-vfp-hard.tar.gz | tar xzvf - --strip-components=1 -C /usr/local, но вам нужно проверить имя файла для каждой версии.

Ответ 2

Посмотрите не далее, чем resin.io Все, что вам нужно, - это очистить ваш rpi своим изображением, а затем git нажать проект. resin.io скомпилирует свой код и зависимости для вашей архитектуры устройства и отправит результат на ваши устройства (в файл докеров).

Ответ 3

Вы можете создать очень простую схему непрерывной интеграции, используя supervisor, что делает две вещи:

  • поддерживает ваш процесс, даже если он не работает,
  • и перезапустит ваш процесс, если какой-либо из файлов изменится.

Это становится простой проблемой для обновления вашего приложения: вам просто нужно запускать команды git pull; npm install: при загрузке кода (или даже при замене модулей

Если "Малина Pi" видна из Интернета, вы можете использовать веб-хост GitHub, указав его на очень простую страницу, которая запускает команды git pull; npm install используя child_process.exec(). (Одно важное замечание: используйте нетривиальный URL (с кодом или что-то еще), чтобы люди не попадали в него по ошибке.) В противном случае просто запустите эти команды из crontab каждый час или около того, например.

Что касается обновления самого node.js, я бы использовал официальный пакет Debian, либо от тестирования, либо до его получения из нестабильного. В противном случае вам придется создать частное репо, чтобы разместить свои собственные пакеты, что, вероятно, не стоит хлопот; но выполнимо.