前言: 之前一直不知道一個node項目應(yīng)該怎么真正在項目中應(yīng)用,怎么部署到服務(wù)器,這次通過一個小demo,先讓大家對這個node上線部署的流程有一個大概的了解。
-
先建一個koa項目,還不認(rèn)識koa?
https://koa.bootcss.com/簡單的步驟概括(在安裝了node 基礎(chǔ)上):
新建文件夾 nodeapp
進(jìn)入文件夾nodeapp,執(zhí)行npm init
執(zhí)行 npm install koa --save
-
新建文件 app.js ,拷貝最簡單的demo,內(nèi)容如下:
const Koa = require('koa'); const app = new Koa(); app.use(async ctx => { ctx.body = 'Hello World'; }); app.listen(3000); 執(zhí)行node app.js,就可以在localhost:3000看到helloworld,接下來咱們就把這個node應(yīng)用部署到服務(wù)器上面去。
-
新建pm2.json,作為pm2的啟動文件。pm2對于nodejs的部署來說也是舉足輕重的。
PM2是node進(jìn)程管理工具,可以利用它來簡化很多node應(yīng)用管理的繁瑣任務(wù),如性能監(jiān)控、自動重啟、負(fù)載均衡等,而且使用非常簡單。pm2官網(wǎng):
https://pm2.keymetrics.io/docs/usage/process-management/
具體如下:
能夠動態(tài)的監(jiān)控文件的上傳
實現(xiàn)0秒熱啟動
能夠負(fù)載均衡
-
使用內(nèi)存過多/cpu調(diào)度太頻繁就會自動重啟,所以通過重啟次數(shù)也可以知道進(jìn)程的一些情況
在這個項目中應(yīng)該如何配置呢??如下:{ "name": “node-app”, "script": "app.js", //入口腳本文件 "log_date_format": "YYYY-MM-DD HH:mm Z", "out_file":"log/node-app.stdout.log", //日志路徑 “watch”: true, “instances”:"max", "exec_mode":"cluster"http://這里需要明確cluster模式和fork模式的區(qū)別 }配置好pm2之后,也確保安裝了pm2之后,我們只要在對應(yīng)的文件路徑下執(zhí)行 pm2 start pm2.json就能啟動對應(yīng)的node進(jìn)程。
部署到服務(wù)器也是一樣的流程和原理,將對應(yīng)的app.js , package.json, package.lock.json,pm2.json重新放入一個文件夾并將文件夾上傳至服務(wù)器,在對應(yīng)的文件夾下面執(zhí)行 npm install --production (安裝生產(chǎn)環(huán)境所需要的依賴),然后執(zhí)行pm2 start pm2.json把項目跑起來就行啦!
附錄
-
幾個常用的linux命令:
ps aux | grep node //查看當(dāng)前誰在使用node進(jìn)程,找到對應(yīng)的pid kill 9 pid //殺掉對應(yīng)pid的進(jìn)程 ssh root@ip地址 scp local_file remote_username@remote_ip:remote_folder //從本地復(fù)制到遠(yuǎn)程,指定了遠(yuǎn)程的目錄,文件名字不變 scp local_file remote_username@remote_ip:remote_file //從本地復(fù)制到遠(yuǎn)程,指定了遠(yuǎn)程的目錄和文件名 pwd //用于顯示工作目錄 lsof -i tcp:端口號 //查看服務(wù)器端口的占用情況但是在部署的時候,我們也要手動輸入這么多命令嗎???
可以使用shelljs插件,用寫js的方式去寫linux命令,然后在一個js文件里面把命令都寫了,之后node執(zhí)行這個文件就行
node中間層http://www.itdecent.cn/p/8fc3cf8218f8 在上線之前,寫這么一個配置文件就是為了讓運(yùn)維知道怎么去進(jìn)行配置。以下是ngnix.conf
upstream firsttest{
server 192.168.0.xx;
server 192.168.0.xx;
}
serve {
listen 8080;
location /{
proxy_pass http://first
}
}
pm2跑起來之后發(fā)現(xiàn)還是沒辦法通過固定的端口去訪問到咱們的應(yīng)用,發(fā)現(xiàn)是這個端口沒有開放給外面訪問,所以在對應(yīng)的控制臺這里添加一個規(guī)則就好了.
然后訪問對應(yīng)的ip和端口就能看到我們在代碼里面寫的helloworld了?。?/p>
