2013-08-20 17 views
13

Mam aplikację Node.js, którą chcę uruchomić na Raspberry Pi.Wdrażanie aplikacji Node.js i Node.js do Raspberry Pi

Chciałbym też móc zdalnie instalować nową wersję mojej aplikacji, a także nowe wersje Node.js do tego Raspberry Pi.

Zasadniczo coś takiego jak:

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

nie mam żadnych preferencji, w jaki sposób przenieść moją aplikację Pi może być pchanie lub ciągnięcie. Nie obchodzi mnie to (chociaż powinienem dodać, że kod aplikacji jest dostępny z prywatnego repozytorium GitHub).

Dodatkowo po wdrożeniu Node.js i/lub mojej aplikacji chcę, aby potencjalnie uruchomiona aplikacja Node.js została uruchomiona ponownie.

Jak mogę to zrobić? Jakie oprogramowanie powinienem zaglądać? Czy jest to coś, co można łatwo zrobić przy użyciu narzędzi Raspbian, czy też powinienem szukać oprogramowania innej firmy (narzędzia devops, takie jak Chef & co.), Czy ...?

Każda pomoc jest mile widziana :-)

Odpowiedz

12

a) W przypadku wykonywania skryptu w sposób ciągły, można użyć narzędzi, takich jak forever lub pm2, w przeciwnym razie można również make the app a debian daemon on raspian można uruchomić z sudo <servicename> start (jeśli używasz Arch Linux, to jest inaczej traktowane).

b) Jeśli twoja Malina jest dostępna z internetu, możesz użyć GitHub hook (API Documentation) do uruchamiania za każdym razem, gdy wprowadzisz zmianę do swojego repozytorium. Ten hak to w zasadzie punkt końcowy adresu URL w twoim Pi, który uruchamia lokalnie mały skrypt powłoki.

Ten skrypt powinien zamknąć aplikację z wdziękiem, wykonaj git pull dla swojego repozytorium i ponownie uruchom aplikację/usługę. Możesz również uruchomić ten skrypt powłoki za pośrednictwem SSH z komputera lokalnego, np. ssh [email protected] /path/to/your/script

Skrypt zmiana mogłaby wyglądać następująco:

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

c) Problem ze zdalnym aktualizacji węzeł sam jest, że oficjalna binarny buduje dla Raspberry Pi pojawia się tylko bardzo nieregularnie, w przeciwnym razie byłoby to łatwe do wystarczy pobrać/zaktualizować pliki binarne za pomocą wget lub curl. Więc przez większość czasu musisz przejść przez kompilację Węzła na swojej maszynie lub spędzić około dwie godziny na przekompilowaniu go na swoim Pi. Jeśli chcesz korzystać z unofficial builds on GitHub, możesz zainstalować je pod numerem 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, ale musisz sprawdzić nazwę pliku dla każdego wydania.

+0

Co ze zdalną aktualizacją samego Node.js? Jak poleciłbyś to zrobić? A co, jeśli Malina nie jest dostępna z internetu, tylko w sieci lokalnej? Wtedy haczyk GitHub nie zadziała, tak myślę ;-) –

+1

Zaktualizowano powyższą odpowiedź. Jeśli Pi jest w twojej lokalnej sieci i ma połączenie z Internetem, uruchom skrypt powłoki lokalnie lub przez SSH. – Frederic

+1

Pobieranie najnowszych wersji Node.js stało się jeszcze łatwiejsze, wystarczy spojrzeć na: http://nodejs.org/dist/latest/ i znaleźć najnowszą wersję 'node-v -linux-arm-pi.tar.gz' – Frederic

2

Można stworzyć bardzo prosty schemat integracji ciągłego korzystając supervisor, co robi dwie rzeczy:

  • utrzymuje proces uruchomiony, nawet jeśli to się nie powiedzie,
  • i restartuje proces, jeśli któryś z plików zmian.

Staje prosty problem, aby utrzymać app aktualizacja: wystarczy uruchomić polecenia git pull; npm install: kiedy kod jest pobierany (lub nawet moduły węzła zmień) przełożony zrestartuje aplikację automatycznie.

Jeśli Raspberry Pi jest widoczny z Internetu, można użyć a GitHub webhook, wskazując na bardzo prostą stronę, która uruchamia polecenia git pull; npm install przy użyciu child_process.exec(). (Jedna ważna uwaga: używaj nietrywialnego adresu URL (z kodem lub czymś), aby ludzie nie wpadli na niego przez pomyłkę.) W przeciwnym razie wystarczy uruchomić te komendy z crontabu co godzinę lub na przykład.

Jeśli chodzi o aktualizowanie samego pliku node.js, używałbym oficjalnego Debian package, albo z testowania, albo z otrzymywania go from unstable. W przeciwnym razie musiałbyś utworzyć prywatne repozytorium, aby hostować własne pakiety, co prawdopodobnie nie jest warte kłopotów; ale jest wykonalne.

3

Nie szukaj dalej niż resin.io Wszystko, czego potrzebujesz, to przepłukać swój rpi swoim obrazem, a następnie git popchnąć swój projekt. Program resin.io skompiluje swój kod i zależności dla architektury twojego urządzenia i wyśle ​​wynik do twojego urządzenia (urządzeń) (w pliku dokowania).