先說下需求:
目前是一個項目是一個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