简体   繁体   English

如何在pm2下运行nuxt?

[英]How to run nuxt under pm2?

I have 2 nuxt projects that need to be run on the server.我有 2 个需要在服务器上运行的 nuxt 项目。 Whenever I run the app locally it seems to be working with: npm run dev , but on the server this needs to be ran under a subprocess, so I use pm2 for that.每当我在本地运行应用程序时,它似乎都在使用: npm run dev ,但在服务器上这需要在子进程下运行,所以我使用 pm2 。 But whenever I start running the same npm script with pm2 the process gets errored.但是每当我开始使用 pm2 运行相同的 npm 脚本时,进程就会出错。

The command used for this is: sudo pm2 start npm --name "dev" -- dev , even when I run the apps separately it gets errored.用于此的命令是: sudo pm2 start npm --name "dev" -- dev ,即使我单独运行应用程序也会出错。 sudo pm2 start npm --name "app1" -- app1:dev and sudo pm2 start npm --name "app2" -- app2:dev sudo pm2 start npm --name "app1" -- app1:devsudo pm2 start npm --name "app2" -- app2:dev


package.json包.json

{
    ...
    "scripts": {
        "app1:dev": "nuxt --config-file src/app1/nuxt.config.js -p=3000",
        "app2:dev": "nuxt --config-file src/app2/nuxt.config.js -p=4000",
        "dev": "concurrently \"npm run app1:dev\" \"npm run app2:dev\"",
    },
    "dependencies": {
        ...
    },
    "devDependencies": {
        "concurrently": "^3.6.0",
        "cross-env": "^5.2.0"
    }
}


pm2 logs pm2 日志

/home/ubuntu/.pm2/pm2.log :
PM2        | [2018-08-16T10:05:55.046Z] PM2 log: ===============================================================================
                                                                ...
PM2        | [2018-08-16T10:07:32.825Z] PM2 log: App [app1] with id [0] and pid [11135], exited with code [1] via signal [SIGINT]
PM2        | [2018-08-16T10:07:32.827Z] PM2 log: Starting execution sequence in -fork mode- for app name:app1 id:0
PM2        | [2018-08-16T10:07:32.828Z] PM2 log: App name:app1 id:0 online
PM2        | [2018-08-16T10:07:33.105Z] PM2 log: App [app1] with id [0] and pid [11145], exited with code [1] via signal [SIGINT]
PM2        | [2018-08-16T10:07:33.106Z] PM2 log: Starting execution sequence in -fork mode- for app name:app1 id:0
PM2        | [2018-08-16T10:07:33.108Z] PM2 log: App name:app1 id:0 online
PM2        | [2018-08-16T10:07:33.383Z] PM2 log: App [app1] with id [0] and pid [11155], exited with code [1] via signal [SIGINT]
PM2        | [2018-08-16T10:07:33.383Z] PM2 log: Script /usr/local/bin/npm had too many unstable restarts (16). Stopped. "errored"

/home/ubuntu/.pm2/logs/app1-error.log :
/home/ubuntu/.pm2/logs/app1-out.log :
                            ...
0|app1   | Specify configs in the ini-formatted file:
0|app1   |     /home/ubuntu/.npmrc
0|app1   | or on the command line via: npm <command> --key value
0|app1   | Config info can be viewed via: npm help config
0|app1   |
0|app1   | npm@5.6.0 /usr/local/lib/node_modules/npm
0|app1   |
0|app1   | Usage: npm <command>
0|app1   |
0|app1   | where <command> is one of:
0|app1   |     access, adduser, bin, bugs, c, cache, completion, config,
0|app1   |     ddp, dedupe, deprecate, dist-tag, docs, doctor, edit,
0|app1   |     explore, get, help, help-search, i, init, install,
0|app1   |     install-test, it, link, list, ln, login, logout, ls,
0|app1   |     outdated, owner, pack, ping, prefix, profile, prune,
0|app1   |     publish, rb, rebuild, repo, restart, root, run, run-script,
0|app1   |     s, se, search, set, shrinkwrap, star, stars, start, stop, t,
0|app1   |     team, test, token, tst, un, uninstall, unpublish, unstar,
0|app1   |     up, update, v, version, view, whoami
0|app1   |
0|app1   | npm <command> -h     quick help on <command>
0|app1   | npm -l           display full usage info
0|app1   | npm help <term>  search for help on <term>
0|app1   | npm help npm     involved overview
0|app1   |
                          ...

What does all of this mean, doesn't pm2 recognize the npm command?这一切意味着什么,pm2 不识别 npm 命令吗? Is there a parameter I'm missing here?这里有我遗漏的参数吗? ... ...

extra info:额外信息:
server: Ubuntu 16.04服务器: Ubuntu 16.04
npm version: 5.6.0 npm 版本: 5.6.0
nuxt version: 1.4.2 nuxt 版本: 1.4.2
pm2 version: 3.0.3 pm2 版本: 3.0.3
node version: 8.11.1节点版本: 8.11.1

下面的代码:

pm2 start npm --name "anyName" -- run dev

For multiple nuxt instances to work with pm2 you need to point to the nuxt-start script in node_modules/nuxt/bin/nuxt-start .要使多个 nuxt 实例与 pm2 一起使用,您需要指向node_modules/nuxt/bin/nuxt-startnuxt-start脚本。

This guide explains it well. 本指南很好地解释了它。 To summarize: You need an ecosystem configuration for your apps (ecosystem.config.js) where you set all the given parameters for your app.总结一下:您需要为您的应用程序 (ecosystem.config.js) 设置生态系统配置,您可以在其中设置应用程序的所有给定参数。 Here 'sa list with all the available parameters.是包含所有可用参数的列表。

Your's should look like this:你的应该是这样的:

module.exports = {
  apps: [
    {
      name: 'app1',
      port: 3000,
      script: './node_modules/nuxt/bin/nuxt-start',
      cwd: '/home/user/your-nuxt-project/app1',
      env: {
        NODE_ENV: 'development'
      },
      env_production: {
        NODE_ENV: 'production'
      }
    },
    {
      name: 'app2',
      port: 4000,
      script: './node_modules/nuxt/bin/nuxt-start',
      cwd: '/home/user/your-nuxt-project/app2',
      env: {
        NODE_ENV: 'development'
      },
      env_production: {
        NODE_ENV: 'production'
      }
    }
  ]
};

Then simply cd to your project dir and run sudo pm2 start .然后只需 cd 到您的项目目录并运行sudo pm2 start It will automatically find the config file and run both apps simultaneously.它会自动找到配置文件并同时运行两个应用程序。

For those who just want to get the app started in Production mode:对于那些只想在生产模式下启动应用程序的人:

Seeing this page comes up at the top of search results of how to use Nuxt.js with PM2, I thought I should add this answer.看到这个页面出现在如何在 PM2 中使用 Nuxt.js 的搜索结果的顶部,我想我应该添加这个答案。

All you need to add to your universal Nuxt app for serving it though PM2 is a file called ecosystem.config.js .尽管 PM2 是一个名为ecosystem.config.js .config.js 的文件,但您需要添加到您的通用 Nuxt 应用程序以提供服务。 Create a new file with that name in your root project directory and add the following content:在您的项目根目录中创建一个具有该名称的新文件并添加以下内容:

module.exports = {
  apps: [
    {
      name: 'NuxtAppName',
      exec_mode: 'cluster', // Optional: If you want it run multiple instances.
      instances: 'max', // Or a number of instances.
      // 'max' auto detects how many CPU cores there are.
      // The previous option must exist to use the above.
      script: './node_modules/nuxt/bin/nuxt.js',
      args: 'start',
    },
  ],
}

Now build your app with npm run build .现在使用npm run build构建您的应用npm run build

And serve it with pm2 start .并使用pm2 start服务它。

Check the status pm2 ls .检查状态pm2 ls

Your Nuxt.js application is now serving!您的 Nuxt.js 应用程序现在可以使用了!

Source来源

While JC97 s answer is great, the Nuxt has upgraded, also if you want to run debug, development, staging and production setup separately you need a more compartmentalized ecosystem file虽然 JC97 的回答很好,但 Nuxt 已经升级,而且如果你想分别运行调试、开发、暂存和生产设置,你需要一个更加分区的生态系统文件

First install nuxt as npm install --save nuxt首先将 nuxt 安装为 npm install --save nuxt

Make a folder called config inside your project folder, this folder is a sibling to the server pages middleware and other directories that nuxt generates在您的项目文件夹中创建一个名为 config 的文件夹,该文件夹是服务器页面中间件和 nuxt 生成的其他目录的同级文件夹

Add 4 .env files .env.deb, .env.dev, .env.sta, .env.pro for debug, development staging and production添加 4 个 .env 文件 .env.deb、.env.dev、.env.sta、.env.pro 用于调试、开发阶段和生产

Run the command pm2 ecosystem which will generate the default file运行命令 pm2生态系统,它将生成默认文件

Replace the default file with the one below用下面的替换默认文件

It creates each environment as a separate app它将每个环境创建为一个单独的应用程序

If you want to run only the staging version you would run it as pm2 start ecosystem.config.js --only myapp_sta如果您只想运行暂存版本,您可以将其作为pm2 start ecosystem.config.js --only myapp_sta

You can run all 4 at time if you WANT!!!如果您愿意,您可以同时运行所有 4 个!!!

const dotenv = require('dotenv')

const autorestart = true
const watch = false
const maxMemoryRestart = '512M'

module.exports = {
  apps: [
    {
      name: 'myapp_dev',
      script: 'npm run clear && npm run dev',
      instances: 1,
      autorestart,
      watch,
      max_memory_restart: maxMemoryRestart,
      env: dotenv.config({ path: './config/.env.dev' }).parsed
    },
    {
      name: 'myapp_deb',
      script: 'npm run clear && npm run deb',
      instances: 1,
      autorestart,
      watch,
      max_memory_restart: maxMemoryRestart,
      env: dotenv.config({ path: './config/.env.deb' }).parsed
    },
    {
      name: 'myapp_sta',
      script: 'npm run clear && npm run sta',
      instances: 1,
      autorestart,
      watch,
      max_memory_restart: maxMemoryRestart,
      env: dotenv.config({ path: './config/.env.sta' }).parsed
    },
    {
      name: 'myapp_pro',
      script: 'npm run clear && npm run build && npm run start',
      instances: 1,
      autorestart,
      watch,
      max_memory_restart: maxMemoryRestart,
      env: dotenv.config({ path: './config/.env.pro' }).parsed
    }
  ],

  deploy: {
    myapp_dev: {
      user: 'zupstock',
      host: '192.168.1.103',
      ref: 'origin/master',
      repo: 'git@github.com:owner/myapp_v1.git',
      path: '/',
      'post-deploy':
        'cd myapp_v1 && npm install && pm2 startOrRestart ecosystem.config.js --only myapp_dev'
    }
  }
}

如果它有效,请尝试以下命令

sudo pm2 start npm -- app1:dev

For me this worked for single app https://nuxtjs.org/faq/deployment-pm2/对我来说,这适用于单个应用程序https://nuxtjs.org/faq/deployment-pm2/

module.exports = {
  apps: [
    {
      name: 'NuxtAppName',
      exec_mode: 'cluster',
      instances: 'max', // Or a number of instances
      script: './node_modules/nuxt/bin/nuxt.js',
      args: 'start'
    }
  ]
}
pm2 start ./node_modules/nuxt/bin/nuxt.js --name="<AppName>" -- start

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM