2013-08-20 9 views
13

Ich habe eine Node.js-Anwendung, die ich auf einem Raspberry Pi ausführen möchte.Bereitstellen von Node.js und Node.js-Anwendung auf Raspberry Pi

Und ich würde gerne in der Lage sein, neue Version meiner Anwendung sowie neue Versionen von Node.js zu diesem Raspberry Pi fern zu stellen.

Grundsätzlich etwas wie:

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

Ich habe keine Präferenzen, wie mein App auf das Pi zu übertragen, kann es drückend oder ziehend sein. Es ist mir egal (obwohl ich hinzufügen sollte, dass der Code für die Anwendung von einem privaten GitHub-Repository verfügbar ist).

Außerdem, sobald Node.js und/oder meine App bereitgestellt wurden, möchte ich die potenziell laufende Node.js App neu starten.

Wie könnte ich das tun? Auf welche Software sollte ich schauen? Ist das etwas, das leicht mit Tools von Raspbian gemacht werden kann, oder sollte ich nach Software von Drittanbietern (Devops-Tools, wie zum Beispiel Chef & Co.) suchen, oder ...?

Jede Hilfe ist sehr :-)

geschätzt

Antwort

12

a) Für das Skript kontinuierlich ausgeführt wird, können Sie Tools wie forever oder pm2 verwenden, sonst kann man auch make the app a debian daemon on raspian Sie mit sudo <servicename> start ausführen können (wenn Sie Bogen laufen sind Linux, das wird anders gehandhabt, denke ich).

b) Wenn Ihr Raspberry aus dem Internet erreichbar ist, können Sie ein GitHub hook (API Documentation) verwenden, um jedes Mal zu starten, wenn Sie eine Änderung an Ihr Repository übertragen. Dieser Hook ist im Grunde genommen ein URL-Endpunkt auf Ihrem Pi, der lokal ein kleines Shell-Skript ausführt.

Dieses Skript sollte Sie App anmutig herunterfahren, machen Sie eine git pull für Ihr Repository und starten Sie die App/Service erneut. Sie können dieses Shell-Skript auch über SSH von Ihrem lokalen Computer aus auslösen, z. ssh [email protected] /path/to/your/script

Eine Update-Skript könnte wie folgt aussehen:

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

c) Das Problem mit Remote-Aktualisierung Knoten selbst ist, dass die offizielle binäre baut für Raspberry Pi nur sehr unregelmäßig erscheinen, sonst wäre es leicht zu Laden Sie einfach die Binärdateien mit wget oder curl herunter/aktualisieren Sie sie. Meistens müssen Sie entweder den Knoten auf Ihrem eigenen Computer kompilieren oder ungefähr zwei Stunden damit verbringen, ihn auf Ihrem Pi neu zu kompilieren. Wenn Sie mit der unofficial builds on GitHub gehen möchten, können Sie sie mit 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 installieren, aber Sie müssen den Dateinamen für jede Version überprüfen.

+0

Was ist mit Remote-Aktualisierung von Node.js selbst? Wie würdest du das empfehlen? Und - wenn die Himbeere nicht aus dem Internet erreichbar ist, nur innerhalb eines lokalen Netzwerks? Dann funktioniert ein GitHub-Hook nicht, vermute ich ;-) –

+1

Die Antwort oben wurde aktualisiert. Wenn sich das Pi in Ihrem lokalen Netzwerk befindet und über eine Internetverbindung verfügt, führen Sie das Shell-Skript einfach lokal oder über SSH aus. – Frederic

+1

Die neusten Versionen von Node.js zu bekommen ist jetzt einfacher geworden, schau einfach unter: http://nodejs.org/dist/latest/ und finde die aktuelle Version von 'node-v -linux-arm-pi.tar.gz' – Frederic

2

Sie ein sehr einfaches kontinuierliches Integrationsschema erstellen supervisor verwenden, welche zwei Dinge:

  • Ihren Prozess am Laufen hält, auch wenn es ausfällt,
  • und startet Ihren Prozess, wenn eine der Dateien ändern.

Es wird eine einfache Frage Ihre App zu halten aktualisiert: Sie müssen nur die Befehle ausführen git pull; npm install: wenn der Code heruntergeladen wird (oder sogar Knotenmodule aus) Supervisor wird die App automatisch für Sie neu starten.

Wenn der Raspberry Pi aus dem Internet sichtbar ist, können Sie a GitHub webhook verwenden und auf eine sehr einfache Seite zeigen, die die Befehle git pull; npm install mit child_process.exec() ausführt. (Ein wichtiger Hinweis: Verwenden Sie eine nicht-triviale URL (mit einem Code oder etwas), damit die Leute nicht versehentlich darauf stoßen.) Führen Sie andernfalls diese Befehle etwa jede Stunde aus der Crontab aus.

Für die Aktualisierung von node.js selbst, würde ich die offizielle Debian package verwenden, entweder aus dem Test oder bekommen es from unstable. Andernfalls müssten Sie ein privates Repo erstellen, um Ihre eigenen Pakete zu hosten, was sich wahrscheinlich nicht lohnt. aber ist machbar.

3

Suchen Sie nicht weiter als resin.io Alles, was Sie brauchen, ist spülen Sie Ihre rpi mit ihrem Bild und dann git push Ihr Projekt. harz.io kompiliert seinen Code und die Abhängigkeiten für die Architektur Ihres Geräts und sendet das Ergebnis an Ihre Geräte (in einer Docker-Datei).