nodejs上線部署

前言: 之前一直不知道一個node項目應(yīng)該怎么真正在項目中應(yīng)用,怎么部署到服務(wù)器,這次通過一個小demo,先讓大家對這個node上線部署的流程有一個大概的了解。

  1. 先建一個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ù)器上面去。

  2. 新建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)程。

  3. 部署到服務(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把項目跑起來就行啦!


附錄
  1. 幾個常用的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

  2. 在上線之前,寫這么一個配置文件就是為了讓運(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>

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容