如何在生產伺服器上部署 Node.js 應用?

服務端用 Apache 或 Nginx,Node使用了Express框架。如何配置一個生產可用的服務器?


https://github.com/yyx990803/pod 我個人寫的部署工具,以前基於forever,現在基於pm2。在進程管理的基礎上增加直接git push發布更新的功能。在我自己的vps上搭配nginx用著很省心。由於是個人項目,用於生產環境請務必小心,有問題歡迎github上開issue


伺服器推薦用nginx,配置簡單,性能強悍。

nginx可以使用代理訪問後端的Node.js應用伺服器。

配置方法:

1)在配置文件http段內容添加後端伺服器:

http {

#添加後端伺服器,和nginx負載均衡配置一樣

upstream nodejs {

server 127.0.0.1:8080;

}

...

}

2)給應用添加虛擬主機:

server {

listen 80;

server_name node.xxxx.com;

location / {

proxy_pass http://nodejs;#名字和前面的對應,將所有的請求轉發給後端的node

}

access_log logs/nodejs.access.log main;#如果需要日誌的話

}

推薦將靜態文件如css、js和圖片和應用伺服器分開。

應用啟動的話可以直接node app.js,還可以使用其他守護方式啟動,當進程掛了自動重啟。還可以考慮使用multi-node(https://github.com/kriszyp/multi-node),增強應用的穩定性和性能。


forever守護進程,開機啟動配置好,nginx做轉向代理,crontab做好定時備份,監控好了幾個主要node服務的埠,差不多了,我的網站就是這樣跑了好幾年……


multi-node的主進程也就是起的第一個node進程是個單點故障,如果他在處理請求時意外死了,所有node進程就都死了。所以生產環境用cluster更有保障


Goodbye node-forever, hello PM2

快用PM2來輔助部署和運行吧喵~這個守護

Docker - Build, Ship, and Run Any App, Anywhere

另外,如果是多APP部署,建議Docker封裝運行,這樣遷移比較方便。

前端當然Nginx代理~不過注意連接保持設定,不要讓http://socket.io一類掛掉。


Docker + nginx + pm2


基於 shipit 的Node.js 應用部署方案

本文主要介紹如何基於https://github.com/shipitjs/shipit的自動化部署方案,可以支持測試環境、灰度上線、回滾等功能。


想怎麼弄都可以,nginx做proxy吧


有人知道伺服器端的node怎麼用嗎


pm2

node一般會docker pm2


node 用 forever 不行嗎?

伺服器前端肯定是nginx , Apache的處理靜態文件的性能實在不如 nginx.


推薦閱讀:

tomcat 與 nginx,apache的區別是什麼?
並發的HTTP請求,apache是如何響應的,以及如何調用php文件的?
用 HHvm 運行 WordPress 是用 Apache 好還是 Nginx 好一點?
Web 測試 有沒有比Apache Jemeter更好的工具,windows或者macos上的?

TAG:伺服器 | Nodejs | Nginx | Apache | Express框架 |