2012-03-05 23 views
14

Có cách nào tốt để chạy và quản lý nhiều ứng dụng nodejs trên một máy chủ không?Chạy và quản lý các ứng dụng nodejs trên một máy chủ

Tôi đã xem haibunodester, nhưng chúng có vẻ hơi phức tạp đối với những gì tôi đang cố gắng làm.

Tôi cũng đang xem forever và tôi nghĩ rằng có thể làm việc với tệp cấu hình và gui web, nhưng tôi không chắc chắn cách tôi sẽ xử lý truyền thông tin cổng qua ENV hoặc đối số.

+0

Tôi không hoàn toàn chắc chắn về phạm vi của dự án của bạn, nhưng nó sẽ là một lựa chọn để sử dụng file cấu hình trang web của mỗi ứng dụng? Bạn có thể chỉ định cổng cho mỗi ứng dụng trong tệp "siteConfig.js" và nhập tệp đó vào tệp máy chủ của bạn, đây là một cách để sắp xếp mọi thứ (xem https://github.com/mape/node-express-boilerplate). Điều đó có thể xử lý một phần cổng nhưng không nhất thiết phải cung cấp cho bạn một giải pháp quản lý cho tất cả các ứng dụng. –

+0

Hãy để tôi giải thích quy trình làm việc của mình. Trên máy chủ của chúng tôi, chúng tôi chạy Apache và tôi sẽ thiết lập proxy ngược cho mọi ứng dụng nút mà chúng tôi phát triển. Hiện tại đây là những ứng dụng lưu lượng truy cập thấp nên tôi muốn chạy chúng trên cùng một máy chủ. –

Trả lời

6

tôi sử dụng Supervisord & Monit, các chi tiết và cấu hình ví dụ ở đây: Process Management at Bringr.

Ngoài ra, bạn có thể chỉ định biến môi trường trực tiếp từ tệp cấu hình giám sát (xem sub-process environment). Nhưng cá nhân tôi thích thêm các biến này trực tiếp bên trong một ~/.bashrc trên mỗi máy.

Nếu số cổng sẽ không thay đổi đối với từng ứng dụng (nhưng thay đổi giữa môi trường phát triển &). Tôi sẽ khuyên bạn nên chỉ định chúng bên trong một config.json (hoặc trực tiếp bên trong package.json). Và config.json sẽ chứa một số cổng khác nhau cho mỗi ứng dụng tùy thuộc vào Environnement:

{ 
myapp:{ 
    production:{port:8080}, 
    development:{port:3000} 
} 
} 

và bên myapp.js:

var config = require('./config'); 
app.listen(config.myapp[process.env.NODE_ENV].port) 

Với process.env.NODE_ENV khai báo trong ~/.bashrc.

+0

Cảm ơn bạn đã viết bài đăng blog đó, nó rất chi tiết. Vì vậy, bạn sẽ quản lý các cổng trong cấu hình giám sát: [program: myapp] command = node myapp.js 3000, [program: myapp2] command = node myapp.js 3001, v.v ...? –

+0

Trả lời chỉnh sửa, hy vọng nó trả lời câu hỏi của bạn. Cá nhân tôi thích giữ tập tin cấu hình giám sát càng nhỏ càng tốt và giữ bit/env thay đổi. các biến trong tệp cấu hình * .json. – FGRibreau

1

Nếu máy chủ của bạn đã khởi động, chỉ cần sử dụng nó. Tôi không có may mắn với mãi mãi và tương tự. Nếu bạn muốn tiếp tục với mới nổi, roco sẽ được tốt đẹp như giải pháp triển khai:

roco deploy:setup:upstart 
roco deploy 
+0

Oh vậy trong tập lệnh roco tôi chỉ định nghĩa tất cả các cổng? –

+0

Có, mô tả mọi thứ bạn cần: ít nhất tên cổng và tên máy chủ. – Anatoliy

1

Chúng tôi liên tục cố gắng cải thiện foreverhaibu tại Nodejitsu. Có vẻ như cách tiếp cận bạn đang tìm kiếm ở đây là tệp cấu hình .forever cho các tùy chọn phức tạp. Tính năng này đã có mặt trên tồn đọng của chúng tôi trong một thời gian tại

https://github.com/nodejitsu/forever/issues/124

Kiểm tra lại. Tôi coi nó là ưu tiên khá cao sau vòng cải tiến hiệu suất tiếp theo.

+0

Thật tuyệt khi biết rằng 'mãi mãi' vẫn đang được hỗ trợ! Gói 'npm' đã không được cập nhật trong một thời gian, trừ khi tôi đã bỏ lỡ nó bằng cách nào đó. Cảm ơn! – btleffler

+0

Cảm ơn bạn đã nhập. Vì vậy, nó sẽ là tối ưu để tạo ra một kịch bản quản lý mà sẽ tạo ra các cấu hình .forever trong mỗi ứng dụng? –

3

Tôi đã viết một ứng dụng nodegod mà tôi sử dụng cho một số lần triển khai có thể có 10 ứng dụng.

  • nodegod đọc một danh sách ứng dụng từ json. Nó có một máy trạng thái nội bộ cho mỗi ứng dụng xử lý vòng đời ứng dụng một cách an toàn bao gồm khởi động lại và các tính năng của trang web dừng/bắt đầu/gỡ lỗi.

  • Giao diện web sử dụng ổ cắm web, để bạn có thể quản lý máy chủ từ xa qua ssh.

  • Khi bạn triển khai trên rsync, ứng dụng sẽ tự động khởi động lại.

  • nodegod theo dõi mức độ nghiêm trọng của các ứng dụng khác, bạn có thể ghi lại hơi thở cuối cùng của ứng dụng như lỗi segfault và malloc.

  • Tôi sử dụng một ngã ba http-proxy trước một loạt các trường hợp thể hiện, vì vậy bất kỳ số lượng ứng dụng nào cũng có thể chia sẻ một cổng máy chủ riêng lẻ cho cả http và ổ cắm web.

tôi đã viết một module haraldops để đọc cấu hình ứng dụng từ bên ngoài cây nguồn. Với điều đó, bạn có thể theo dõi và nhận email bất cứ khi nào có thứ gì đó với ứng dụng.

Cấu hình ứng dụng Tôi giữ trong repo git trong hệ thống tệp.

Nó không phải là khoa học tên lửa, và tất cả đều phù hợp rất độc đáo với nhau. Chỉ nútjson: SIMPLE được thực hiện nhiều hơn.

+0

Nghe hay, tôi sẽ thử –

0

Những ngày này tôi đã sử dụng dokku là bản sao OSS của heroku. Triển khai cũng đơn giản như việc đảm bảo package.json của bạn chứa tập lệnh bắt đầu. Ví dụ:

"scripts": { 
    "start": "node index.js" 
} 

Sample App

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