2013-08-20 19 views
13

Ho un'applicazione Node.js che voglio eseguire su un Raspberry Pi.Distribuzione dell'applicazione Node.js e Node.js a Raspberry Pi

E, mi piacerebbe essere in grado di distribuire la nuova versione della mia applicazione e le nuove versioni di Node.js a quel Raspberry Pi da remoto.

In sostanza, qualcosa come:

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

Non ho alcuna preferenza su come trasferire la mia app per il Pi, può essere spingere o tirare. Non mi interessa (anche se devo aggiungere che il codice per l'applicazione è disponibile da un repository GitHub privato).

Inoltre, una volta distribuiti Node.js e/o la mia app, desidero riavviare l'app Node.js potenzialmente in esecuzione.

Come posso fare questo? Quale software dovrei esaminare? È qualcosa che può essere fatto facilmente usando gli strumenti di Raspbian, o dovrei cercare software di terze parti (strumenti devop, come Chef &) o ...?

Qualsiasi aiuto è molto apprezzato :-)

risposta

12

a) Per l'esecuzione dello script in modo continuo, è possibile utilizzare strumenti come forever o pm2, altrimenti si può anche make the app a debian daemon on raspian è possibile eseguire con sudo <servicename> start (se si sta eseguendo Arch Linux, questo è gestito in modo diverso credo).

b) Se il proprio Raspberry è raggiungibile da Internet, è possibile utilizzare uno GitHub hook (API Documentation) da eseguire ogni volta che si invia una modifica al repository. Questo hook è fondamentalmente un endpoint URL sul tuo Pi che esegue localmente un piccolo script di shell.

Questo script dovrebbe arrestare l'applicazione con garbo, fare un git pull per il repository e avviare nuovamente l'app/servizio. Puoi anche attivare questo script di shell su SSH dal tuo computer locale, ad es. ssh [email protected] /path/to/your/script

Uno script di aggiornamento potrebbe essere la seguente:

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

c) Il problema con il Nodo aggiornamento remoto è di per sé, che il binario ufficiale costruisce per Raspberry Pi appaiono solo molto irregolare, altrimenti sarebbe facile basta scaricare/aggiornare i file binari con wget o curl. Quindi la maggior parte delle volte devi passare il nodo di compilazione sul tuo computer o impiegare circa due ore per ricompilarlo sul tuo Pi. Se si desidera utilizzare lo unofficial builds on GitHub, è possibile installarli con 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 ma è necessario controllare il nome del file per ogni versione.

+0

E riguardo l'aggiornamento remoto di Node.js stesso? Come consiglieresti di fare questo? E - cosa succede se il Raspberry non è raggiungibile da internet, solo all'interno di una rete locale? Quindi un hook GitHub non funzionerà, suppongo ;-) –

+1

Aggiornamento della risposta sopra. Se il Pi si trova sulla tua rete locale e ha una connessione Internet, esegui lo script della shell localmente o tramite SSH. – Frederic

+1

Ottenere le ultime versioni di Node.js è diventato più semplice, basta guardare: http://nodejs.org/dist/latest/ e trovare la versione più recente di 'node-v -linux-arm-pi.tar.gz' – Frederic

2

È possibile creare uno schema di integrazione continua molto semplice utilizzando supervisor, che fa due cose:

  • mantiene il vostro processo in esecuzione anche se non riesce,
  • e riavvia il processo se uno qualsiasi dei file cambia.

diventa un problema semplice per mantenere la vostra applicazione aggiornata: è sufficiente eseguire i comandi git pull; npm install: quando il codice viene scaricato (o anche moduli nodo cambiano) supervisore sarà riavviare l'applicazione automaticamente per voi.

Se il Raspberry Pi è visibile da Internet, è possibile utilizzare a GitHub webhook, puntandolo verso una pagina molto semplice che esegue i comandi git pull; npm install utilizzando child_process.exec(). (Una nota importante: usa un URL non banale (con un codice o qualcosa del genere) in modo che le persone non vi si imbattano per errore.) Altrimenti esegui quei comandi da crontab ogni ora o così, per esempio.

Per quanto riguarda l'aggiornamento di node.js stesso, vorrei utilizzare lo Debian package ufficiale, sia dal test che dallo from unstable. Altrimenti dovresti creare un repository privato per ospitare i tuoi pacchetti, che probabilmente non vale la pena; ma è fattibile.

3

Non cercare oltre resin.io Tutto ciò di cui hai bisogno è scaricare la tua immagine con l'immagine e quindi inviare il tuo progetto. resin.io compila il suo codice e le sue dipendenze per l'architettura del tuo dispositivo e invia il risultato ai tuoi dispositivi (in un file di finestra mobile).