国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用pm2部署node生產(chǎn)環(huán)境

劉厚水 / 3440人閱讀

摘要:一是什么是可以用于生產(chǎn)環(huán)境的的進(jìn)程管理工具,并且它內(nèi)置一個(gè)負(fù)載均衡。嗯嗯,最好的用處就是監(jiān)控我們的生產(chǎn)環(huán)境下的程序運(yùn)行狀態(tài),讓它給我們?nèi)找岳^日的處于工作狀態(tài)。部署自動(dòng)部署,避免逐個(gè)在所有服務(wù)器中進(jìn)行。

一、PM2是什么

是可以用于生產(chǎn)環(huán)境的Nodejs的進(jìn)程管理工具,并且它內(nèi)置一個(gè)負(fù)載均衡。它不僅可以保證服務(wù)不會(huì)中斷一直在線,并且提供0秒reload功能,還有其他一系列進(jìn)程管理、監(jiān)控功能。并且使用起來非常簡(jiǎn)單。

嗯嗯,最好的用處就是監(jiān)控我們的生產(chǎn)環(huán)境下的node程序運(yùn)行狀態(tài),讓它給我們?nèi)找岳^日的處于工作狀態(tài)。

pm2官方文檔

二、為森么要使用pm2

原始社會(huì)的我們開發(fā)node服務(wù)端程序一般過程:

編寫好node程序app.js,運(yùn)行node app.js;或者寫入script使用npm運(yùn)行;打開瀏覽器訪問;

好像需要修改內(nèi)容,瀏覽器對(duì)修改的內(nèi)容沒有顯示出來?->node app.js->再次運(yùn)行;

瀏覽器忽然訪問不到服務(wù),好像出錯(cuò)啦?重啟下->node app.js->再次運(yùn)行;

哎呀開了好多控制臺(tái)窗口,一不小心關(guān)閉了,服務(wù)又訪問不到了,繼續(xù)打開控制臺(tái)->node app.js->再次運(yùn)行;

好崩潰!好像有個(gè)工具nodemon;安裝使用nodemon app.js;哇,可以自動(dòng)監(jiān)聽文件修改變化自動(dòng)重啟,但是關(guān)閉控制臺(tái)服務(wù)還是會(huì)被摧毀。

通過這個(gè)很常用的場(chǎng)景,我們了解到要避免這些麻煩一個(gè)服務(wù)器至少需要有:后臺(tái)運(yùn)行和自動(dòng)重啟,這兩個(gè)能力。

再來看看使用pm2可擁有的能力:

日志管理;兩種日志,pm2系統(tǒng)日志與管理的進(jìn)程日志,默認(rèn)會(huì)把進(jìn)程的控制臺(tái)輸出記錄到日志中;

負(fù)載均衡:PM2可以通過創(chuàng)建共享同一服務(wù)器端口的多個(gè)子進(jìn)程來擴(kuò)展您的應(yīng)用程序。這樣做還允許以零秒停機(jī)時(shí)間重新啟動(dòng)應(yīng)用程序。

終端監(jiān)控:可以在終端中監(jiān)控應(yīng)用程序并檢查應(yīng)用程序運(yùn)行狀況(CPU使用率,使用的內(nèi)存,請(qǐng)求/分鐘等)。

SSH部署:自動(dòng)部署,避免逐個(gè)在所有服務(wù)器中進(jìn)行ssh。

靜態(tài)服務(wù):支持靜態(tài)服務(wù)器功能

支持開發(fā)調(diào)試模式,非后臺(tái)運(yùn)行,pm2-dev start

。。。。。太過強(qiáng)大!

pm2常用命令

啟動(dòng)服務(wù)pm2 start [options] 啟動(dòng)指定應(yīng)用

pm2 start app.js                //啟動(dòng)app.js應(yīng)用
pm2 start app.js --name app    //啟動(dòng)應(yīng)用并設(shè)置name
pm2 start app.sh                //腳本啟動(dòng)

pm2 start app.js --watch    //監(jiān)聽模式啟動(dòng),當(dāng)文件發(fā)生變化,自動(dòng)重啟

//max 表示PM2將自動(dòng)檢測(cè)可用CPU的數(shù)量并運(yùn)行盡可能多的進(jìn)程
//max可以自定義,如果是4核CPU,設(shè)置為2則占用2個(gè)
pm2 start app.js -i max //啟用群集模式(自動(dòng)負(fù)載均衡)

pm2-dev start ... // 開發(fā)模式啟動(dòng),即不啟用后臺(tái)運(yùn)行

查看啟動(dòng)列表pm2 list

顯示應(yīng)用程序詳細(xì)信息pm2 show [options] 顯示指定應(yīng)用詳情

pm2 show [Name]      //根據(jù)name查看
pm2 show [ID]        //根據(jù)id查看

停止指定應(yīng)用pm2 stop [options] 停止指定應(yīng)用

pm2 stop all               //停止所有應(yīng)用
pm2 stop [AppName]        //根據(jù)應(yīng)用名停止指定應(yīng)用
pm2 stop [ID]             //根據(jù)應(yīng)用id停止指定應(yīng)用

重啟應(yīng)用pm2 reload|restart [options] 重啟指定應(yīng)用

pm2 restart app.js        //同時(shí)殺死并重啟所有進(jìn)程,短時(shí)間內(nèi)服務(wù)不可用,生成環(huán)境慎用
pm2 reload app.js        //重新啟動(dòng)所有進(jìn)程,0秒重啟,始終保持至少一個(gè)進(jìn)程在運(yùn)行
pm2 gracefulReload all   //以群集模式重新加載所有應(yīng)用程序

啟動(dòng)靜態(tài)服務(wù)器pm2 serve ./dist 8080將目錄dist作為靜態(tài)服務(wù)器根目錄,端口為8080

刪除應(yīng)用pm2 delete [options] 刪除指定應(yīng)用;如果修改了應(yīng)用配置行為,需要先刪除應(yīng)用,重新啟動(dòng)后方才會(huì)生效,如修改腳本入口文件;

pm2 delete all               //關(guān)閉并刪除應(yīng)用
pm2 delete [AppName]        //根據(jù)應(yīng)用名關(guān)閉并刪除應(yīng)用
pm2 delete [ID]            //根據(jù)應(yīng)用ID關(guān)閉并刪除應(yīng)用

pm2 kill 殺掉pm2管理的所有進(jìn)程;

pm2 logs 查看指定應(yīng)用的日志,即標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤

pm2 logs            //查看所有應(yīng)用日志
pm2 logs [Name]    //根據(jù)指定應(yīng)用名查看應(yīng)用日志
pm2 logs [ID]      //根據(jù)指定應(yīng)用ID查看應(yīng)用日志

pm2 monit 監(jiān)控各個(gè)應(yīng)用進(jìn)程cpu和memory使用情況;

PM2配置方式

命令生產(chǎn)默認(rèn)示例配置文件pm2 ecosystempm2 init,運(yùn)行默認(rèn)會(huì)生成ecosystem.config.js配置文件

module.exports = {
  apps: [
    {
      name: "back-Api",      //應(yīng)用名
      script: "./server/start.js",   //應(yīng)用文件位置
      env: {
        PM2_SERVE_PATH: "./apidoc",    //靜態(tài)服務(wù)路徑
        PM2_SERVE_PORT: 8080,   //靜態(tài)服務(wù)器訪問端口
        NODE_ENV: "development" //啟動(dòng)默認(rèn)模式
      },
      env_production : {
        NODE_ENV: "production"  //使用production模式 pm2 start ecosystem.config.js --env production
      },
      instances:"max",          //將應(yīng)用程序分布在所有CPU核心上,可以是整數(shù)或負(fù)數(shù)
      instance_var: "INSTANCE_ID",
      exec_mode: "cluster",
      watch:[
        "server",
      ],  //監(jiān)聽模式,不能單純的設(shè)置為true,易導(dǎo)致無限重啟,因?yàn)槿罩疚募谧兓枰懦龑?duì)其的監(jiān)聽
      merge_logs: true,         //集群情況下,可以合并日志
    }
  ],
  deploy: {
      production : {
        user: "node",                      //ssh 用戶
        host: "212.83.163.1",              //ssh 地址
        ref: "origin/master",             //GIT遠(yuǎn)程/分支
        repo: "git@github.com:repo.git",   //git地址
        path: "/var/www/production",       //服務(wù)器文件路徑
        "post-deploy": "npm install && pm2 reload ecosystem.config.js --env production"  //部署后的動(dòng)作
      }
  }
}; 

自定義json配置文件如:processes.json;啟動(dòng)pm2 start processes.json

    {
      "apps": [{
        "name": "app",  //名稱
        "script": "./", //程序入口
        "cwd": "./",           //根目錄
        "watch":[
            "views"
        ],//需要監(jiān)控的目錄
        "error_file":"./logs/err.log",//錯(cuò)誤輸出日志
        "out_file":"./logs/out.log",  //日志
        "log_date_format":"YYYY-MM-DD HH:mm Z" //日期格式
        }]
    }
pm2常用配置項(xiàng)解析
1. apps:json結(jié)構(gòu),apps是一個(gè)數(shù)組,每一個(gè)數(shù)組成員就是對(duì)應(yīng)一個(gè)pm2中運(yùn)行的應(yīng)用

2. name:應(yīng)用程序名稱"app"

3. cwd:應(yīng)用程序所在的目錄"./"

4. script:應(yīng)用程序的腳本路徑"./"

5. log_date_format: 日志文件名輸出日期格式"YYYY-MM-DD HH:mm Z"

6. error_file:自定義應(yīng)用程序的錯(cuò)誤日志文件"./logs/app-err.log",

7. out_file:自定義應(yīng)用程序日志文件"./logs/app-out.log"

8. instances: 應(yīng)用啟動(dòng)實(shí)例個(gè)數(shù),僅在cluster模式有效 默認(rèn)為fork;或者 max

9. min_uptime:最小運(yùn)行時(shí)間,這里設(shè)置的是60s即如果應(yīng)用程序在60s內(nèi)退出,pm2會(huì)認(rèn)為程序異常退出,此時(shí)觸發(fā)重啟max_restarts設(shè)置數(shù)量

10. max_restarts:設(shè)置應(yīng)用程序異常退出重啟的次數(shù),默認(rèn)15次(從0開始計(jì)數(shù))

11. cron_restart:定時(shí)啟動(dòng),解決重啟能解決的問題

12. watch:是否啟用監(jiān)控模式,默認(rèn)是false。如果設(shè)置成true,當(dāng)應(yīng)用程序變動(dòng)時(shí),pm2會(huì)自動(dòng)重載。這里也可以設(shè)置你要監(jiān)控的文件。

13. "ignore_watch": [                           // 不用監(jiān)聽的文件
            "node_modules",
            "logs"
        ],
13. merge_logs:// 設(shè)置追加日志而不是新建日志

14. exec_interpreter:應(yīng)用程序的腳本類型,這里使用的shell,默認(rèn)是nodejs

15. exec_mode:應(yīng)用程序啟動(dòng)模式,這里設(shè)置的是cluster_mode(集群),默認(rèn)是fork

16. autorestart:啟用/禁用應(yīng)用程序崩潰或退出時(shí)自動(dòng)重啟,默認(rèn)為true, 發(fā)生異常的情況下自動(dòng)重啟

17. vizion:啟用/禁用vizion特性(版本控制)

18. "args": "", // 傳遞給腳本的參數(shù)

19. env: {
        PM2_SERVE_PATH: "./apidoc",    //靜態(tài)服務(wù)路徑
        PM2_SERVE_PORT: 8080,   //靜態(tài)服務(wù)器訪問端口
        NODE_ENV: "development" //啟動(dòng)默認(rèn)模式
      },

20. env_production : {
        NODE_ENV: "production"  //使用production模式 pm2 start ecosystem.config.js --env production
      },
pm2配合log4js處理日志

pm2啟動(dòng)時(shí)通常會(huì)發(fā)現(xiàn)log4js記錄不到日志信息;

決解方案,安裝pm2的pm2-intercom進(jìn)程間通信模塊

在log4js的配置文件logger.js里添加如下命令:

pm2: true, 
pm2InstanceVar: "INSTANCE_ID" 

pm2配置文件中添加"instance_var": "INSTANCE_ID", // 添加這一行 字段

發(fā)現(xiàn)如果沒有設(shè)置群集模式"exec_mode": "cluster",也會(huì)記錄不到;

其他

log4js日志配置使用詳情Koa日志中間件封裝開發(fā)(log4js)

“積跬步、行千里”—— 持續(xù)更新中~,喜歡的話留下個(gè)贊和關(guān)注哦!

往期經(jīng)典好文:

團(tuán)隊(duì)合作必備的Git操作

談?wù)凧s前端模塊化規(guī)范

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/109040.html

相關(guān)文章

  • [譯] 如果可以,永遠(yuǎn)不要在生產(chǎn)中直接運(yùn)行 Node.js

    摘要:就在幾周前,我正在和一個(gè)朋友談話,他不經(jīng)意間提到,你永遠(yuǎn)都不會(huì)在生產(chǎn)中直接使用來運(yùn)行程序。我強(qiáng)烈點(diǎn)頭,表示我也不會(huì)在生產(chǎn)中直接運(yùn)行,原因可能每個(gè)人都知道。首先,讓我們弄清楚永遠(yuǎn)不要在生產(chǎn)中直接通過運(yùn)行程序的說法。 原文地址:You should never ever run directly against Node.js in production. Maybe. 原文作者:Burke ...

    Tony_Zby 評(píng)論0 收藏0
  • 通過Github與PM2部署Node應(yīng)用

    摘要:于是著手將應(yīng)用遷移到阿里云的上去。環(huán)境介紹本地,應(yīng)用采用的技術(shù)遠(yuǎn)端服務(wù)器阿里云核內(nèi)存,,系統(tǒng)為賬戶名系統(tǒng)架構(gòu)服務(wù)器部署的應(yīng)用,并在端口進(jìn)行監(jiān)聽。通過瀏覽器打開可以看到部署的應(yīng)用可以訪問了。 背景 前一段時(shí)間,是通過百度云的BAE部署自己的Node應(yīng)用的,不過隨著應(yīng)用的不斷開發(fā),BAE的限制不斷制約了應(yīng)用的使用。于是著手將應(yīng)用遷移到阿里云的ECS上去。本文即是介紹了如何在ECS上搭建No...

    tianren124 評(píng)論0 收藏0
  • 最好用的koa2+mysql的RESTful API腳手架,mvc架構(gòu),支持node調(diào)試,pm2部署

    摘要:基于構(gòu)建的服務(wù)器腳手架這是一個(gè)基于的輕量級(jí)腳手架,支持支持使用編寫。腳手架可以根據(jù)不同的環(huán)境配置不同的信息運(yùn)行價(jià)值,支持開發(fā),測(cè)試,生產(chǎn)環(huán)境的不同參數(shù)配置。 #基于webpack構(gòu)建的 Koa2 restful API 服務(wù)器腳手架 這是一個(gè)基于 Koa2 的輕量級(jí) RESTful API Server 腳手架,支持 ES6, 支持使用TypeScript編寫。 GIT地址:https...

    xiongzenghui 評(píng)論0 收藏0
  • 使用pm2快速將項(xiàng)目部署到遠(yuǎn)程服務(wù)器

    摘要:使用背景當(dāng)我們需要將項(xiàng)目部署到遠(yuǎn)程線上服務(wù)器時(shí)傳統(tǒng)的方法可能就是將本地代碼通過等方式上傳到服務(wù)器然后通過登入到服務(wù)器,配置好環(huán)境手動(dòng)啟動(dòng)應(yīng)用。 使用背景 當(dāng)我們需要將項(xiàng)目部署到遠(yuǎn)程線上服務(wù)器時(shí);傳統(tǒng)的方法可能就是: 將本地代碼通過ssh、ftp等方式上傳到服務(wù)器; 然后通過ssh登入到服務(wù)器,配置好環(huán)境; 手動(dòng)啟動(dòng)應(yīng)用。 太過手動(dòng)化,麻煩,操作繁瑣。 現(xiàn)代自動(dòng)化部署 ...

    wind5o 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

劉厚水

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<