在本地開發(fā)時,我們使用 egg-bin dev 來啟動服務,但是在部署應用的時候不可以這樣使用。因為 egg-bin dev 會針對本地開發(fā)做很多處理,而生產運行需要一個更加簡單穩(wěn)定的方式。所以本章主要講解如何部署你的應用。
一般從源碼代碼到真正運行,我們會拆分成構建和部署兩步,可以做到一次構建多次部署。
JavaScript 語言本身不需要編譯的,構建過程主要是下載依賴。但如果使用 TypeScript 或者 Babel 支持 ES6 以上的特性,那就必須要這一步了。
一般安裝依賴會指定 NODE_ENV=production 或 npm install --production 只安裝 dependencies 的依賴。因為 devDependencies 中的模塊過大而且在生產環(huán)境不會使用,安裝后也可能遇到未知問題。
$ cd baseDir |
構建完成后打包成 tgz 文件,部署的時候解壓啟動就可以了。
增加構建環(huán)節(jié)才能做到真正的一次構建多次部署,理論上代碼沒有改動的時候是不需要再次構建的,可以用原來的包進行部署,這有著不少好處:
服務器需要預裝 Node.js,框架支持的 Node 版本為 >= 8.0.0。
框架內置了 egg-cluster 來啟動 Master 進程,Master 有足夠的穩(wěn)定性,不再需要使用 pm2 等進程守護模塊。
同時,框架也提供了 egg-scripts 來支持線上環(huán)境的運行和停止。
首先,我們需要把 egg-scripts 模塊作為 dependencies 引入:
$ npm i egg-scripts --save |
添加 npm scripts 到 package.json:
{ |
這樣我們就可以通過 npm start 和 npm stop 命令啟動或停止應用。
注意:egg-scripts 對 Windows 系統(tǒng)的支持有限,參見 #22。
$ egg-scripts start --port=7001 --daemon --title=egg-server-showcase |
如上示例,支持以下參數:
更多參數可查看 egg-scripts 和 egg-cluster 文檔。
你也可以在 config.{env}.js 中配置指定啟動配置。
// config/config.default.js |
path,port,hostname 均為 server.listen 的參數,egg-scripts 和 egg.startCluster 方法傳入的 port 優(yōu)先級高于此配置。
$ egg-scripts stop [--title=egg-server] |
該命令將殺死 master 進程,并通知 worker 和 agent 優(yōu)雅退出。
支持以下參數:
你也可以直接通過 ps -eo "pid,command" | grep -- "--title=egg-server" 來找到 master 進程,并 kill 掉,無需 kill -9。
我們還需要對服務進行性能監(jiān)控,內存泄露分析,故障排除等。
業(yè)界常用的有:
注意: Node.js 性能平臺 (alinode) 目前僅支持 macOS 和 Linux,不支持 Windows。
Node.js 性能平臺 是面向所有 Node.js 應用提供 性能監(jiān)控、安全提醒、故障排查、性能優(yōu)化 等服務的整體性解決方案,提供完善的工具鏈和服務,協(xié)助開發(fā)者快速發(fā)現(xiàn)和定位線上問題。
AliNode Runtime 可以直接替換掉 Node.js Runtime,對應版本參見文檔。
全局安裝方式參見文檔。
有時候,同機會部署多個項目,期望多版本共存時,則可以把 Runtime 安裝到當前項目:
$ npm i nodeinstall -g |
nodeinstall 會把對應版本的 alinode 安裝到項目的 node_modules 目錄下。
注意:打包機的操作系統(tǒng)和線上系統(tǒng)需保持一致,否則對應的 Runtime 不一定能正常運行。
我們提供了 egg-alinode 來快速接入,無需安裝 agenthub 等額外的常駐服務。
安裝依賴:
$ npm i egg-alinode --save |
開啟插件:
// config/plugin.js |
配置:
// config/config.default.js |
npm scripts 配置的 start 指令無需改變,通過 egg-scripts 即可。
啟動命令需使用 npm start,因為 npm scripts 執(zhí)行時會把 node_module/.bin 目錄加入 PATH,故會優(yōu)先使用當前項目執(zhí)行的 Node 版本。
啟動后會看到 master 日志包含以下內容:
$ [master] node version v8.9.4 |
其中 agent register ok. 表示配置的 egg-alinode 正確連接上了 Node.js 性能平臺服務器。
控制臺地址:https://node.console.aliyun.com
更多建議: