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