[英]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:dev
和sudo 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-start
的nuxt-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.它会自动找到配置文件并同时运行两个应用程序。
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 应用程序现在可以使用了!
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.