如何在 pm2 下运行 nuxt?



我有 2 个 nuxt 项目需要在服务器上运行。每当我在本地运行该应用程序时,它似乎都在使用:npm run dev,但在服务器上,这需要在子进程下运行,所以我使用 pm2。但是每当我开始使用pm2运行相同的npm脚本时,该过程都会出错。

用于此目的的命令是:sudo pm2 start npm --name "dev" -- dev,即使我单独运行应用程序,它也会出现错误。sudo pm2 start npm --name "app1" -- app1:devsudo pm2 start npm --name "app2" -- app2:dev


包.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 日志

/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   |
...

这一切意味着什么,pm2 不识别 npm 命令吗?这里缺少参数吗?...

额外信息:
服务器:Ubuntu 16.04
NPM 版本:5.6.0
NUXT 版本:1.4.2
PM2 版本:3.0.3
节点版本:8.11.1

下面的代码:

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

要使多个nuxt实例使用pm2,您需要指向node_modules/nuxt/bin/nuxt-start中的nuxt-start脚本。

本指南很好地解释了它。 总结一下:您需要为应用(ecosystem.config.js(设置生态系统配置,在其中为应用设置所有给定参数。下面是包含所有可用参数的列表。

你的应该看起来像这样:

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'
}
}
]
};

然后只需cd到您的项目目录并运行sudo pm2 start。它将自动找到配置文件并同时运行两个应用程序。

对于那些只想在生产模式下启动应用程序的人:

看到这个页面出现在如何使用Nuxt.js与PM2的搜索结果的顶部,我想我应该添加这个答案。

您需要添加到通用Nuxt应用程序以提供它的所有内容,尽管PM2是一个名为ecosystem.config.js.在根项目目录中创建具有该名称的新文件,并添加以下内容:

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',
},
],
}

现在使用npm run build构建您的应用程序。

并用pm2 start服务.

检查状态pm2 ls

您的Nuxt.js应用程序现在正在服务!

虽然JC97的答案很好,但Nuxt已经升级了,如果你想单独运行调试,开发,暂存和生产设置,你需要一个更加分隔的生态系统文件

首先将 nuxt 作为 npm install --save nuxt

在你的项目文件夹中做一个名为config的文件夹,这个文件夹是nuxt生成的服务器页面中间件和其他目录的同级

添加 4 个 .env 文件 .env.deb、.env.dev、.env.sta、.env.pro 用于调试、开发暂存和生产

运行命令 pm2 生态系统,它将生成默认文件

将默认文件替换为下面的文件

它将每个环境创建为单独的应用程序

如果只想运行暂存版本,则应按pm2 start ecosystem.config.js --only myapp_sta运行它

如果需要,您可以一次运行所有 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'
}
}
}

对我来说,这适用于单个应用程序 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'
}
]
}

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

sudo pm2 start npm -- app1:dev
pm2 start ./node_modules/nuxt/bin/nuxt.js --name="<AppName>" -- start

最新更新