ubuntu下安装node、node代码调试

https://www.iteblog.com/archives/1313.html

上面的链接对于新装的话确实不错!亲测有效,不过有个缺点就是安装的版本号还是太低了。

本该到v6.多的,还是那么低。

解决方法:

先照上面的安装,然后

如果你有安装过n模块,第一步骤也可以省略了!

sudo n // 用于切换本地已经下载的node版本

第二种安装方法,适合没有外网的服务器

https://www.jianshu.com/p/2cc020b170c0

下载的包可能为***.tar.xz   (解压指令为 tar xvjf ***.tar.xz)

 

2.对于离线环境,如何全局安装node_modules

查看全局包位置: 
npm root -g 
可以看到实际的位置 (把文件拷贝过去就可以了)

修改全局包位置 
npm config set prefix '目标目录' 

查看修改结果 
npm config get prefix 
或者用npm root -g命令也可

 

使用pm2进行项目后台运行

npm install pm2 -g : 全局安装。

① 在你的项目下安装 npm install pm2 --save

② 在根努力下创建pm2.json(可以自己命名)

 1 {
 2     "apps": [{
 3         "name": "liblog",
 4         "script": "index.js",
 5         "cwd": "/usr/local/node/gongwuyuan/lookWebsite",
 6         "max_memory_restart": "1G",
 7         "autorestart": true,
 8         "node_args": [],
 9         "args": [],
10         "env": {
11 
12         }
13     }]
14 }

cwd : 指的是根目录,script: 指的是要运行的文件目录

各参数详解

{
    "apps": {
        "name": "wuwu",                             // 项目名          
        "script": "./bin/www",                      // 执行文件
        "cwd": "./",                                // 根目录
        "args": "",                                 // 传递给脚本的参数
        "interpreter": "",                          // 指定的脚本解释器
        "interpreter_args": "",                     // 传递给解释器的参数
        "watch": true,                              // 是否监听文件变动然后重启
        "ignore_watch": [                           // 不用监听的文件
            "node_modules",
            "logs"
        ],
        "exec_mode": "cluster_mode",                // 应用启动模式,支持fork和cluster模式
        "instances": 4,                             // 应用启动实例个数,仅在cluster模式有效 默认为fork;或者 max
        "max_memory_restart": 8,                    // 最大内存限制数,超出自动重启
        "error_file": "./logs/app-err.log",         // 错误日志文件
        "out_file": "./logs/app-out.log",           // 正常日志文件
        "merge_logs": true,                         // 设置追加日志而不是新建日志
        "log_date_format": "YYYY-MM-DD HH:mm:ss",   // 指定日志文件的时间格式
        "min_uptime": "60s",                        // 应用运行少于时间被认为是异常启动
        "max_restarts": 30,                         // 最大异常重启次数,即小于min_uptime运行时间重启次数;
        "autorestart": true,                        // 默认为true, 发生异常的情况下自动重启
        "cron_restart": "",                         // crontab时间格式重启应用,目前只支持cluster模式;
        "restart_delay": "60s"                      // 异常重启情况下,延时重启时间
        "env": {
           "NODE_ENV": "production",                // 环境参数,当前指定为生产环境 process.env.NODE_ENV
           "REMOTE_ADDR": "爱上大声地"               // process.env.REMOTE_ADDR
        },
        "env_dev": {
            "NODE_ENV": "development",              // 环境参数,当前指定为开发环境 pm2 start app.js --env_dev
            "REMOTE_ADDR": ""
        },
        "env_test": {                               // 环境参数,当前指定为测试环境 pm2 start app.js --env_test
            "NODE_ENV": "test",
            "REMOTE_ADDR": ""
        }
    }
}

③ 通过 sudo pm2 start index 或者sudo pm2 start pm2.json都可以开启服务,不过两个命令在不同的端口下开启服务

 最简单的办法可以通过sudo  pm2 restart pm2.json 重启服务,但这种方式会导致服务临时性的中断(重启服务需要时间,重启过程中会导致无法处理用户的请求从而导致服务中断)。如果不想服务中断,那么可以通过发送信号的方式来重启方式,具体命令为:

sudo pm2 sendSignal SIGUSR2 pm2.json

通过发送 SIGUSR2 信号,pm2 会将这个信号派发给框架,框架主进程捕获到这个信号后,会 fork 一个新的子进程提供服务,然后逐渐将之前的子进程重启,从而达到不中断服务重启的目的。

##可以使用pm2 实现集群(cluster)

//-i max 根据有效CPU数目启动最大进程数目
pm2 start app.js -i max --name [项目名称]
//内存使用超过上限自动重启 可以加上--max-memory-restart参数
pm2 start app.js --max-memory-restart 20M

//如果需要设置定时重启,cluster模式有提供参数可以选择;
cron_restart crontab时间格式重启应用
pm2 start app.js --cron "0 3 * * *"   //表示 每天的 凌晨3点都重启任务
第一段应该定义的是:分钟,表示每个小时的第几分钟来执行。范围是从0-59
第二段应该定义的是:小时,表示从第几个小时来执行,范围是从0-23
第三段应该定义的是:日期,表示从每个月的第几天执行,范围从1-31
第四段应该定义的是:月,表示每年的第几个月来执行,范围从1-12
第五段应该定义的是:周,表示每周的第几天执行,范围从0-6,其中 0表示星期日

 4⃣️ 指定用户活动

pm2启动时会指定一个PM2_HOME目录,作为存放日志文件、rpc.sock文件,默认情况下会PM2_HOME指向$HOME/.pm2文件夹,使用其他用户启动pm2时,除非另外指定,否则该环境变量仍然会指向当前用户的家目录下的文件夹,从而会出现Permission denied错误。可以在使用pm2命令前设定该变量:

PM2_HOME='/path/to/.pm2' pm2 start app.js

$HOME 指的是 cd ~(对应的pwd)

线上服务通常并不直接使用可登陆用户运行pm2,而是使用一个不具备登陆权限的用户来启动程序。假如要使用www作为服务的启动者,可以通过sudo -u + 用户名来实现:

sudo -u www pm2 PM2_HOME='/path/to/.pm2' start app.js

 

ubuntu 如何给文件夹root权限(chown -R 用户名 /文件夹名)

 

### linux 查看node的文件位置   

which node

修改Linux环境变量

cd /etc
vim ./profile

在最底部添加

export NODE_HOME= "这里要填的是which node 命令的结果,去掉最后的/node"
export PATH=$NODE_HOME:$PATH

保存退出

刷新这个配置文件
source ./profile

检查是否成功
1. echo $PATH
2. export

 node 代码调试

1. V8 Inspector 方式(http://www.ruanyifeng.com/blog/2018/03/node-debugger.html

node --inspect app.js   // 然后在浏览器打开对应的调试工具

//对于有一些一开始就执行的代码,一开始就设置段点
node --inspect-brk=9229 app.js

2.vscode (https://code.visualstudio.com/docs/editor/debugging#_launch-configurations)

https://github.com/nswbmw/node-in-debugging/blob/master/4.3%20Visual%20Studio%20Code.md

目前通过配置nodemon,避免每次修改后需重新启动项目,但是存在问题,会报端口被占用

"configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "启动程序",
            "runtimeExecutable": "nodemon",
            "program": "${workspaceFolder}/app.js", // workspaceFolder是这个项目对应的根路径。也就是vs code打开了哪个文件夹
            "restart": true,
            "console": "integratedTerminal",
            "internalConsoleOptions": "neverOpen",
            "skipFiles": [ //代表在设置断点的时候,点击下一步时,忽略这些文件
                "${workspaceFolder}/node_modules/**/*.js",
                "<node_internals>/**/*.js"
            ]
        }
    ]

 

posted @ 2017-03-19 16:12  潮哥  阅读(502)  评论(0编辑  收藏  举报