Развертывание Узла.js и узел.приложение js для Raspberry Pi

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

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

в основном, что-то типа:

$ pi-update 192.168.0.37 node@0.11.4
$ pi-update 192.168.0.37 my-app@latest

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

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

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

любая помощь очень ценится : -)

3 ответов


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

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

этот скрипт должен отключить вас приложение изящно, сделайте git pull для вашего репозитория и снова запустите приложение/службу. Вы также можете запустить этот сценарий оболочки через SSH с вашего локального компьютера, например ssh pi@192.168.0.37 /path/to/your/script

сценарий обновления может выглядеть следующим образом:

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

В) проблемы с самим узла удаленного обновления, что официальные двоичные сборки для Raspberry Pi появляются только очень нерегулярно, иначе было бы легко просто загрузить/обновить двоичные файлы с помощью wget или curl. Поэтому большую часть времени вам нужно либо пересечь узел компиляции на своей машине, либо потратить около двух часов на его перекомпиляцию на вашем 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 но вам нужно проверить имя файла для каждого выпуска.


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


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

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

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

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

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