如何在Nuxt项目中给pm2配置生产环境和测试环境

在 Nuxt.js 项目中,咱们有一个全局的环境变量 process.env.NODE_ENV,默认状况下,这个变量的值要么是 production,要么是 development,分别表示生产环境和开发环境。而若是咱们使用 pm2 来部署咱们的项目,咱们须要的环境可能不止这两种,咱们还须要测试环境、预生产环境等等。这时候,就须要作一些配置工做才能正常使用,本篇文章就记录一下如何在 Nuxt 项目中给 pm2 配置生产环境和测试环境。
若是要使用 pm2 来部署咱们的项目,首先须要在项目根目录中建立一个名为 ecosystem.config.js 的生态系统配置文件,这个文件导出一个对象,这个对象包含两部分:apps 和 deploy。其中 apps 是一个数组,包含咱们须要部署的项目信息,通常这个数组只有一个对象,咱们在一个生态系统配置文件里只部署一个项目。而 deploy 是一个对象,包含一些项目部署到服务器所需的配置。git

module.exports = {
  apps: [{}, {}],
  deploy: {}
}

假设咱们要部署的项目名称为 mydemo,项目总共有三个环境,生产环境 production,测试环境 test,开发环境 development,其中要使用 pm2 部署 production 和 test 两个环境(development 环境只在咱们本地开发调试的时候使用,而不用部署)。那么咱们的 ecosystem.config.js 文件应该这样写:npm

module.exports = {
  apps: [
    {
      name: 'mydemo',
      script: 'start.js',
      env: {
        COMMON_VARIABLE: 'true'
      },
      env_production: {
        NODE_ENV: 'production'
      },
      env_test: {
        NODE_ENV: 'test'
      }
    }
  ],
  deploy: {
    production: {
      user: '你的服务器登陆名',
      host: ['你的服务器 IP'],
      port: '你的服务器登陆端口,默认 22',
      ref: 'origin/master',
      repo: '你的 git 仓库地址',
      path: '/www/mydemo/production',
      ssh_options: 'StrictHostKeyChecking=no',
      'post-deploy': 'yarn install && npm run build && pm2 startOrRestart ecosystem.config.js --env production'
    },
    test: {
      user: '你的服务器登陆名',
      host: ['你的服务器 IP'],
      port: '你的服务器登陆端口,默认 22',
      ref: 'origin/test',
      repo: '你的 git 仓库地址',
      path: '/www/mydemo/test',
      ssh_options: 'StrictHostKeyChecking=no',
      'post-deploy': 'yarn install && npm run build && pm2 startOrRestart ecosystem.config.js --env test'
    }
  }
}

能够看到,在 apps 数组的第一个对象中,咱们有项目名称,项目入口,以及两个环境,一个是生产环境 env_production,里面 NODE_ENV 的值为 production,另外一个是测试环境 env_test,里面 NODE_ENV 的值为 test。在 deploy 中,咱们有两个对象,一个是 production,里面是部署生产环境用到的配置,其中 ref 要使用咱们项目在 git 仓库的生产分支,path 是咱们的生产代码在服务器上存储的路径,post-deploy 中最后指定 --env production 表示咱们会用到 apps 中 env_production 的配置。另外一个是 test,里面是部署测试环境用到的配置,其中 ref 要使用咱们项目在 git 仓库的测试分支,path 是咱们的测试代码在服务器上存储的路径,post-deploy 中最后指定 --env test 表示咱们会用到 apps 中 env_test 的配置。
写好了 pm2 的生态系统配置文件 ecosystem.config.js,还有一个很重要的地方也要修改,那就是 nuxt.config.js,这个文件是 nuxt 项目的配置文件。咱们须要在里面添加一个对象 env,而后在这个对象里面添加名为 NODE_ENV 的字段,字段的值为 process.env.NODE_ENV。这样,咱们在程序里面经过 process.env.NODE_ENV 就能获取当前环境是生产环境仍是测试环境。若是不写这个的话,即便咱们在 ecosystem.config.js 的 env_test 里面配置了测试环境的 NODE_ENV 为 test,咱们在代码里面获取到的仍然是 development,而不是 test(默认只有 production 和 development,非 production 的一概按 development 处理)。json

module.exports = {
  env: {
    NODE_ENV: process.env.NODE_ENV
  }
}

当咱们把这些配置都写好以后,咱们就能够经过 pm2 deploy ecosystem.config.js production 命令来部署生产环境,经过 pm2 deploy ecosystem.config.js test 命令来部署测试环境。这两句命令里面的 production 和 test 指的是 ecosystem.config.js 中 deploy 里面的 production 对象和 test 对象,而 post-deploy 里面的 production 和 test 指的是 apps 里面的 env_production 和 env_test,注意不要混淆。
为了方便部署,咱们一般在 package.json 文件的 scripts 里面添加两句命令来指代上面的部署命令,这样当咱们要部署生产服务时咱们只须要输入 npm run prd,当咱们要部署测试服务时咱们只须要输入 npm run test数组

"scripts": {
    "prd": "pm2 deploy ecosystem.config.js production",
    "test": "pm2 deploy ecosystem.config.js test"
  }

就在你觉得万事大吉,大功告成的时候,你会发现你无法同时在一台服务器上部署生产环境和测试环境。当你使用 npm run prd 部署好生产服务后,你服务器上的 pm2 会有一个名为 mydemo 的进程。当你使用 npm run test 部署完测试服务后,你服务器上的 pm2 的进程仍是只有一个 mydemo,虽然名字相同,但其实它如今已是你测试环境的服务了。因为名字相同,因此每次它都会替换以前的服务,而不会共存。那么为了可让生产服务和测试服务同时运行,咱们还须要在 ecosystem.config.js 的 apps 的对象里面添加一句 append_env_to_name: true,这表示会把当前环境的名字跟在咱们进程的名字后面,最后当咱们使用 npm run prd 部署完生产服务后,会发现咱们生产服务的名字为 mydemo-production,当咱们使用 npm run test 部署完测试服务后,会发现咱们测试服务的名字为 mydemo-test,这样就可让一个项目的生产环境和测试环境同时运行在一个服务器上了。服务器

module.exports = {
  apps: [
    {
      name: 'mydemo',
      script: 'start.js',
      append_env_to_name: true,
      env: {
        COMMON_VARIABLE: 'true'
      },
      env_production: {
        NODE_ENV: 'production'
      },
      env_test: {
        NODE_ENV: 'test'
      }
    }
  ],
  deploy: {}
}

以上就是在一个 Nuxt 项目中给 pm2 配置生产环境和测试环境的过程,最后,经过公众号“极课助手”去购买“极客时间”全部课程,能够得到高额返现,最高可返 51 元,若是想了解更多技术知识,能够关注“极课助手”公众号。app

图片描述

(正文完)ssh

参考文献:ide

  1. pm2 ecosystem file reference
  2. nuxt configuration
相关文章
相关标签/搜索