2013-08-20 135 views
13

Tôi có một ứng dụng Node.js mà tôi muốn chạy trên một Raspberry Pi.Triển khai ứng dụng Node.js và Node.js tới Raspberry Pi

Và tôi muốn có thể triển khai phiên bản mới của ứng dụng cũng như các phiên bản mới của Node.js cho Raspberry Pi từ xa.

Về cơ bản, một cái gì đó như:

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

tôi không có bất kỳ ưu đãi về làm thế nào để chuyển ứng dụng của tôi đến Pi, nó có thể đẩy hoặc kéo. Tôi không quan tâm (mặc dù tôi nên thêm rằng mã cho các ứng dụng có sẵn từ một kho lưu trữ GitHub tư nhân).

Ngoài ra, sau khi Node.js và/hoặc ứng dụng của tôi được triển khai, tôi muốn ứng dụng Node.js đang chạy có khả năng khởi động lại.

Tôi làm cách nào để thực hiện việc này? Tôi nên xem phần mềm nào? Đây có phải là cái gì đó có thể dễ dàng được thực hiện bằng cách sử dụng các công cụ từ Raspbian, hoặc tôi nên tìm phần mềm của bên thứ 3 (công cụ devops, chẳng hạn như Chef & co.), Hoặc ...?

Any help is appreciated rất :-)

Trả lời

12

a) Đối với chạy kịch bản liên tục, bạn có thể sử dụng các công cụ như forever hoặc pm2, nếu không bạn cũng có thể make the app a debian daemon on raspian bạn có thể chạy với sudo <servicename> start (nếu bạn đang chạy Arch Linux, điều này được xử lý khác nhau, tôi đoán).

b) Nếu Raspberry của bạn có thể truy cập được từ internet, bạn có thể sử dụng GitHub hook (API Documentation) để chạy mỗi khi bạn đẩy thay đổi vào kho lưu trữ của mình. Hook này về cơ bản là một điểm cuối URL trên Pi của bạn chạy một kịch bản lệnh shell cục bộ.

Tập lệnh này sẽ tắt ứng dụng của bạn một cách duyên dáng, thực hiện git pull cho kho lưu trữ của bạn và khởi động lại ứng dụng/dịch vụ. Bạn cũng có thể kích hoạt tập lệnh shell này qua SSH từ máy cục bộ của bạn, ví dụ: ssh [email protected] /path/to/your/script

Một kịch bản cập nhật có thể nhìn như thế này:

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

c) Vấn đề với Node cập nhật từ xa chính nó là, rằng nhị phân chính thức xây dựng cho Raspberry Pi chỉ xuất hiện rất đột xuất, nếu không nó có thể dễ dàng chỉ cần tải xuống/cập nhật các tệp nhị phân với wget hoặc curl. Vì vậy, hầu hết thời gian bạn cần phải biên dịch Node trên máy của riêng bạn hoặc dành khoảng hai giờ để biên dịch lại nó trên Pi của bạn. Nếu bạn muốn đi với unofficial builds on GitHub, bạn có thể cài đặt chúng với 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 nhưng bạn cần phải kiểm tra tên tệp cho mỗi bản phát hành.

+0

Điều gì về việc cập nhật từ xa Node.js? Bạn sẽ khuyên bạn nên làm điều này như thế nào? Và - nếu Raspberry không thể truy cập được từ internet, chỉ trong một mạng cục bộ? Sau đó, một cái móc GitHub sẽ không hoạt động, tôi đoán ;-) –

+1

Cập nhật câu trả lời ở trên. Nếu Pi nằm trên mạng cục bộ của bạn và có kết nối internet, chỉ cần chạy tập lệnh shell cục bộ hoặc thông qua SSH. – Frederic

+1

Nhận các bản phát hành Node.js mới nhất trở nên dễ dàng hơn, chỉ cần xem: http://nodejs.org/dist/latest/ và tìm phiên bản mới nhất của nút-v -linux-arm-pi.tar.gz' – Frederic

2

Bạn có thể tạo một chương trình tích hợp liên tục rất đơn giản sử dụng supervisor, mà thực hiện hai điều:

  • giữ quá trình của bạn chạy ngay cả khi nó không thành công,
  • và khởi động lại quá trình của bạn nếu có những thay đổi tập tin.

Nó trở thành một vấn đề đơn giản để cập nhật ứng dụng của bạn: bạn chỉ cần chạy lệnh git pull; npm install: khi mã được tải xuống (hoặc thậm chí mô-đun nút thay đổi) người giám sát sẽ tự động khởi động lại ứng dụng cho bạn.

Nếu Raspberry Pi hiển thị trên internet, bạn có thể sử dụng a GitHub webhook, trỏ đến trang rất đơn giản chạy các lệnh git pull; npm install sử dụng child_process.exec(). (Một lưu ý quan trọng: sử dụng một URL không tầm thường (với một mã hoặc một cái gì đó) để mọi người không chạy vào nó do nhầm lẫn.) Nếu không, chỉ cần chạy các lệnh từ crontab mỗi giờ hoặc lâu hơn, ví dụ.

Đối với việc cập nhật node.js, tôi sẽ sử dụng chính thức Debian package, hoặc từ kiểm tra hoặc nhận được from unstable. Nếu không, bạn sẽ phải tạo một repo riêng để lưu trữ các gói của riêng bạn, điều này có lẽ không đáng để gặp rắc rối; nhưng có thể làm được.

3

Nhìn không xa hơn resin.io Tất cả những gì bạn cần làm là xả rpi của bạn bằng hình ảnh của chúng và sau đó git đẩy dự án của bạn. resin.io sẽ biên dịch mã và phụ thuộc của nó cho kiến ​​trúc thiết bị của bạn và gửi kết quả đến (các) thiết bị của bạn (trong tệp docker).