2012-12-29 16 views
8

Tôi đang xây dựng một ứng dụng Node.JS đơn giản cho một khách hàng. Webapp nên dễ triển khai trên mỗi cá thể máy chủ (đó là RedHat EL 6.3), "chìa khóa trong tay".Cung cấp Node.JS webapp "chìa khóa trong tay"

Cách tốt nhất để đóng gói ứng dụng Node.JS là gì? Về cơ bản, tôi cần một "cài đặt" hoặc "gói" để:

  • Cài đặt Node.js
  • Cài đặt phụ thuộc (npm install)
  • Điền vào hồ sơ (CSS, JS, HTML, vv)

Trả lời

8

Bạn nên cung cấp gói khép kín. Vui lòng xem trang web tuyệt vời The Twelve-Factor App, cụ thể là phần build, release, run. Có rất nhiều trí tuệ cứng rắn từ các kỹ sư hoạt động kinh nghiệm thể hiện trong trang web đó.

  • Trong repo của ứng dụng, viết một kịch bản (vỏ, nút, bất cứ điều gì) mà có thể tạo ra một kho lưu trữ chia
  • RPM hoặc tar lưu trữ là 2 sự lựa chọn hợp lý nhất cho bạn. tar là xách tay và đơn giản hơn. RPM sẽ tích hợp độc đáo với phân phối dựa trên RPM. Tôi khuyên bạn nên bắt đầu với tar nếu bạn chưa thực hiện nhiều công việc quản lý/đóng gói phần mềm. RPM phức tạp hơn nhiều so với tar.
  • Kho lưu trữ tar nên nhúng các tệp node.js vào trong đó. Điều này sẽ làm cho ứng dụng của bạn dễ cài đặt và tránh chia sẻ cài đặt nút trên toàn hệ thống, do đó tạo khớp nối nhân tạo. Nếu bạn đi theo lộ trình RPM, bạn có thể chỉ định nút làm phụ thuộc trong tệp thông số RPM của mình (nhưng có thể bạn không nên - xem bên dưới).
  • Bản lưu trữ cũng phải nhúng tất cả các phụ thuộc npm. Không chạy npm install lúc cài đặt gói. Xem xét sử dụng công cụ npm shrinkwrap để quản lý các phụ thuộc của bạn trong quá trình phát triển, nhưng tại thời điểm triển khai, chúng phải được đóng gói sẵn và sẵn sàng để chạy.

Cụ thể, đây là những ý tưởng xấu bạn nên tránh:

  • Không được tải về bất cứ điều gì từ Internet trong khi cài đặt. Điều này là dễ vỡ, chậm chạp và có khả năng có thể khiến bạn bất ngờ xấu bao gồm cả các sự cố bảo mật
  • Không xây dựng hiện vật tại thời gian cài đặt có thể được xây dựng tại thời gian xây dựng. Vì vậy, hãy tạo trước các tệp CSS được xây dựng trước, các tệp được tối ưu hóa theo yêu cầu, các tệp nhị phân được biên dịch trước, v.v.

Để biết RPM của ứng dụng có liệt kê node.js là phụ thuộc hay nút nhúng vào RPM hay không, dưới đây là một số điểm cân nhắc.

  • Nhúng Node.js vào RPM
    • Độc .rpm tập tin để phân phối
    • Cho phép ứng dụng của bạn để kiểm soát chặt chẽ các phiên bản nút nó sử dụng. (xem bên dưới)
    • Độ tin cậy cao hơn. Thực tế là ứng dụng của bạn có thể được kết hợp khá chặt chẽ với ít nhất phiên bản nhỏ của node.js mà bạn phát triển (ví dụ 0.8.x) hoặc thậm chí bản vá (ví dụ: 0.8.12 < 0.9). Tốt nhất là cho phép nút.js để tách riêng ứng dụng của bạn khỏi hệ điều hành, nhưng đừng bị lừa khi nghĩ rằng ứng dụng của bạn sẽ hoạt động đáng tin cậy trên một phiên bản khác của node.js mà không kiểm tra điều chỉnh &. Phổ biến nhất những ngày này chỉ có 1 ứng dụng chạy trên hệ điều hành, và khái niệm về nút chia sẻ giữa các ứng dụng không đúng giá trị bảo tồn không gian đĩa trên tách riêng và hoạt động độc lập của ứng dụng.
    • Không rõ liệu có bất kỳ RPM chính thức/đáng tin cậy nào được xây dựng sẵn trong yumland sẽ "chỉ hoạt động" hay không.
  • Chỉ định Node.js như một sự phụ thuộc của PRM của bạn
    • theo triết lý chung của quản lý gói OS (tránh trùng lặp, tiết kiệm không gian đĩa, vv)
    • RPM cung cấp khả năng vượt TAR xung quanh quản lý hàng tồn kho Vì bạn đang hỏi câu hỏi này, có thể bạn chưa sẵn sàng giải quyết những vấn đề này, vì vậy bạn có thể bắt đầu với tar và một khi bạn hiểu rõ về điều đó, hãy xem xét các kịch bản nâng cấp RPM, v.v.
    • "Tệp duy nhất để phân phối" điểm tốt đẹp có thể nhanh chóng y trở nên không đứng vững một khi ứng dụng của bạn bắt đầu sử dụng một cơ sở dữ liệu hoặc 3, hỗ trợ daemon cho email, tích hợp nội dung đăng vv
+0

Tôi nghĩ rằng tôi sẽ đi con đường RPM vì đây là những gì khách hàng của tôi muốn. Vì vậy, RPM sẽ chứa các mô-đun Node.JS bắt buộc được tải xuống trước, cũng như mã của tôi đã sẵn sàng để chạy. Bạn có nói rằng các RPM tuy nhiên cũng không thể chứa Node.JS chính nó? – Randomblue

+0

Tôi sẽ cập nhật câu trả lời của mình để làm rõ điểm về việc nhúng nút vào RPM. –

Các vấn đề liên quan