nuxt.js項目使用pm2部署測試環境和生產環境的配置

先說下需求:

目前是一個項目是一個nuxt-app,如果要啓動多個nuxt項目時,這時就需要不同的項目使用不同的端口號,這樣可以做到互不影響。此項目中的用的端口號是5000,但是在ecosystem.config.js中怎麼都加不上端口號,後來經過網上搜索和自己的一番配置,生產環境還是監聽不到5000端口,其實質還是服務沒有啓動。後來經過查看官方文檔和參考https://juejin.im/post/5caf3d20e51d456e586640a0 這個,最終生產環境可以監聽到5000端口了。

 

一、最後經過上網搜索。如下配置是可用的:

module.exports = {

  apps: [{
      name: 'anchor',
      script: './server.js',
      append_env_to_name: true,
      cwd: './',

      exec_mode: "cluster",

      // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
      out_file: "./logs/out-0.log",
      error_file: "./logs/err-0.log",
      merge_logs: true,
      log_data_format: 'YYYY-MM-DD HH:mm Z',
      autorestart: true,
      watch: [
        'src',
        'build'
      ],
      max_memory_restart: '1G',
      node_args: '--harmony',
      env: {
        PORT: 5000, 
        NODE_ENV: "production"
      }
    }

  ],

};

package.json:

{
  "name": "anchor",
  "version": "1.0.0",
  "description": "My splendiferous Nuxt.js project",
  "author": "",
  "private": true,
  "scripts": {
    "dev": "cross-env NODE_ENV=development PORT=5000 nodemon server/index.js --watch server --exec babel-node",
    "build": "nuxt build",
    "start": "cross-env NODE_ENV=production PORT=5000 nodemon server/index.js --exec babel-node",
    "prod": "nuxt start && node server/index.js  --exec babel-node",
    "generate": "nuxt generate",
    "pm2": "pm2 start ./ecosystem.config.js --interpreter babel-node --env production",
    "bundle": "rollup -c"
  },

npm run build之後再運行npm run pm2可以啓動服務:

但是不知道爲什麼總是啓動兩個,明明配置文件中是一個啊,有大神知道是因爲什麼啊!!!!!!,後來是啓動一個服務了,其實也沒改什麼,看來還得多看看pm2的文檔了。

而且5000端口也可以監聽到了。

另外在本地連接到生產環境,啓動的結果如下:

而且5000端口也可以監聽到:

netstat -tunlp

 

剩下的就是讓運維配置nginx反向代理,把5000端口映射到域名上。

 

二、另外,可能有時需要配置測試環境和生產環境:

分環境的ecosystem.config.js配置如下:

module.exports = {

  apps: [{
      name: 'anchor',
      // port: '5000',
      script: './server.js',
      append_env_to_name: true,
      cwd: './',

      // exec_interpreter: "babel-node", //此配置就是使用babel-node去執行nodejs文件
      exec_mode: "cluster",

      // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
      out_file: "./logs/out-0.log",
      error_file: "./logs/err-0.log",
      merge_logs: true,
      log_data_format: 'YYYY-MM-DD HH:mm Z',
      autorestart: true,
      watch: [
        'src',
        'build'
      ],
      max_memory_restart: '1G',
      node_args: '--harmony',
      env: {
        PORT: 5000,
        NODE_ENV: "production"
      }
    },
    {
      name: 'anchor-test',
      script: './server.js',
      append_env_to_name: true,
      cwd: './',

      exec_mode: "cluster",

      // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
      out_file: "./logs/out-0.log",
      error_file: "./logs/err-0.log",
      merge_logs: true,
      log_data_format: 'YYYY-MM-DD HH:mm Z',
      autorestart: true,
      watch: [
        'src',
        'build'
      ],
      max_memory_restart: '1G',
      node_args: '--harmony',
      env: {
        PORT: 5000,
        NODE_ENV: "test"
      }
    }


  ],


};

 

package.json文件如下 :

{
  "name": "anchor",
  "version": "1.0.0",
  "description": "My splendiferous Nuxt.js project",
  "author": "",
  "private": true,
  "scripts": {
    "dev": "cross-env NODE_ENV=development PORT=5000 nodemon server/index.js --watch server --exec babel-node",
    "build": "nuxt build",
    "start": "cross-env NODE_ENV=production PORT=5000 nodemon server/index.js --exec babel-node",
    "prod": "nuxt start && node server/index.js  --exec babel-node",
    "generate": "nuxt generate",
    "pm2-test": "pm2 start ./ecosystem.config.js --interpreter babel-node --only anchor-test --env test",//其中--only anchor-test 是在生產環境只啓動測試環境的pm2(anchor-test是ecosystem.config.js中的name)
    "pm2-prod": "pm2 start ./ecosystem.config.js --interpreter babel-node --only anchor --env production",  //其中--only anchor 是在生產環境只啓動生產環境的pm2(anchor是ecosystem.config.js中的name)
    "bundle": "rollup -c"
  },

 

生產環境啓動命令爲:npm run pm2-prod   (啓動之前先運行pm2 list查看一下有哪些pm2 的進程在啓動着,再運行pm2 delete 項目名稱或id ,先殺掉進程)

測試環境啓動命令爲:npm run pm2-test

 

三、如果想查看node在環境中的具體信息,可以運行如下命令:pm2 show 項目名稱   

 

四、監控每個 node 進程的 cpu 和內存使用情況

使用如下命令:

$ pm2 monit

 

 

參考鏈接:

https://juejin.im/post/5be406705188256dbb5176f9

https://juejin.im/post/5caf3d20e51d456e586640a0

https://www.jianshu.com/p/4f8b5806dafb

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章