一、 nvm
1. 简介
nvm 是 node 的包管理工具。由于在打开不同的项目时,不同的项目在安装依赖时可能会和 node 版本有关,所以这就需要我们在不同的项目下使用不同的 node 版本。
nvm 就是一个比较好用 node 管理工具,切换 node 版本。
2. 安装 nvm
2.1 使用原码安装 nvm(推荐使用)
github 地址:https://github.com/nvm-sh/nvm,以下两种方式二选一
1 2 3
| curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
|
输入上面命令 会在结尾看到 nvm 配置,将此命令粘贴到 /.zshrc (`/.bash_profile, /.zshrc, /.profile, or ~/.bashrc).文件中,输入vim ~/.zshrc会打开这个文件,将下面内容粘贴进去。然后点击 esc,输入:wq保存并退出。还可以在打开访达,在 mac 用户的根目录下使用 shift+command+.显示隐藏文件。会看到.zshrc 文件,打开,粘贴进去保存就行。 输入nvm -v你会发现提示命令不存在,输入source ~/.zshrc再重新输入nvm -v`就好了。
1 2
| export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
2.2 nvm 常用命令
1 2 3 4 5 6 7 8 9 10 11
| nvm install stable nvm install <version> nvm uninstall <version> nvm use <version> nvm ls nvm ls-remote nvm current nvm alias <name> <version> nvm unalias <name> nvm reinstall-packages <version> nvm alias default [node版本号]
|
3. 使用 brew 安装 nvm
二、nodejs
1. nvm 安装(推荐使用)
2. brew 安装
brew 安装会出现 npm 无法找到的问题,解决方法如下:
1
| ln -s /usr/local/Cellar/node/14.17.3/libexec/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm
|
三、npm 常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| npm -v
sudo npm install npm -g
npm install <Module Name>
npm install <Module Name> -g
npm uninstall <Module Name>
npm update <Module Name>
npm ls npm ls -g
npm search <Module Name>
|
四、pm2
1、安装pm2
1 2 3 4 5
| npm install pm2 -g
pm2 --version
pm2 start server.js
|
2、常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| pm2 start app.js //启动app.js应用 pm2 start app.js --name demo //启动应用并设置name pm2 start app.sh //脚本启动
pm2 stop all //停止所有应用 pm2 stop [AppName] //根据应用名停止指定应用 pm2 stop [ID] //根据应用id停止指定应用。
pm2 delete all //关闭并删除应用 pm2 delete [AppName] //根据应用名关闭并删除应用 pm2 delete [ID] //根据应用ID关闭并删除应用
pm2 startup
pm2 updatePM2 pm2 update
pm2 start app.js --watch //当文件发生变化,自动重启
pm2 serve ./dist 9090 //将目录dist作为静态服务器根目录,端口为9090
pm2 start app.js -i max
pm2 restart app.js //同时杀死并重启所有进程。短时间内服务不可用。生成环境推荐使用reload
pm2 reload app.js //重新启动所有进程,始终保持至少一个进程在运行 pm2 gracefulReload all //优雅地以群集模式重新加载所有应用程序
pm2 list pm2 ls
pm2 monit pm2 monit pm2 monit 0 pm2 monit server.js
pm2 info [AppName]|[ID] pm2 show [Name] //根据name查看 pm2 show [ID] //根据id查看
pm2 logs //查看所有应用日志 pm2 logs [Name] //根据指定应用名查看应用日志 pm2 logs [ID] //根据指定应用ID查看应用日志
pm2 save
pm2 resurrect
pm2 cleardump
pm2 update
|
3、pm2配置
1 2 3 4
| PM2配置文件方式 生成示例配置文件 pm2 ecosystem //生成一个示例JSON配置文件 pm2 init
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| module.exports = { apps : [{ name : 'API', script : 'app.js', env: { PM2_SERVE_PATH: ".", PM2_SERVE_PORT: 8080, NODE_ENV: 'development' }, env_production : { NODE_ENV: 'production' }, instances:"max", watch:true, output: './out.log', error: './error.log', merge_logs: true, log_type:"json", log_date_format: "DD-MM-YYYY", }], deploy : { production : { user : 'node', host : '212.83.163.1', ref : 'origin/master', repo : 'git@github.com:repo.git', path : '/var/www/production', post-deploy : 'npm install && pm2 reload ecosystem.config.js --env production' } } };
|
4、作用
进程守护
配置文件(进程的数量,日志文件目录)
为什么使用多进程,
内存:无法充分利用机器 全部内存 (单进程的cpu 内存分配受限,32位机器 只能分到1.6G内存)
cpu: 无法充分利用多核 cpu的优势
使用多进程的问题:
- 内存数据无法共享,通过共享redis来解决
5、pm2-logrotate
pm2-logrotate可以理解为是一个pm2的插件,它扩充了pm2本身没有功能:日志管理,所以它的运行需要依靠pm2,想用它必须先安装pm2才可以。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| pm2 install pm2-logrotate
pm2 uninstall pm2-logrotate
pm2 delete pm2-logrotate
pm2 start pm2-logrotate pm2 stop pm2-logrotate
pm2 conf
Module: pm2-logrotate $ pm2 set pm2-logrotate:max_size 10M $ pm2 set pm2-logrotate:retain 30 $ pm2 set pm2-logrotate:compress false $ pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss $ pm2 set pm2-logrotate:workerInterval 30 $ pm2 set pm2-logrotate:rotateInterval 0 0 * * * $ pm2 set pm2-logrotate:rotateModule true Module: module-db-v2 $ pm2 set module-db-v2:pm2-logrotate [object Object]
1. 可通过命令修改 pm2 set pm2-logrotate:max_size 10M
2. 修改 /root/.pm2/module_conf.json
|
max_size (Defaults to 10M): 配置项默认是 10MB,并不意味着切割出来的日志文件大小一定就是 10MB,而是检查时发现日志文件大小达到 max_size,则触发日志切割。
retain (Defaults to 30 file logs): 这个数字是在任何一个时间保留已分割的日志的数量,这意味着如果您保留7个,那么您将最多有7个已分割日志和您当前的一个
compress (Defaults to false): 对所有已分割的日志启用 gzip 压缩
dateFormat (Defaults to YYYY-MM-DD_HH-mm-ss) : 文件名格式化的规则
rotateModule (Defaults to true) : 像其他应用程序一样分割 pm2模块的日志
workerInterval (Defaults to 30 in secs) : 您可以控制工作线程检查日志大小的间隔(最小值为1)单位为秒(控制模块检查log日志大小的循环时间,默认30s检查一次)
rotateInterval (Defaults to 0 0 * * * everyday at midnight): 多久备份一次,默认值是0 0 * * *,意思是每天晚上0点分割
转载请注明来源,欢迎指出任何有错误或不够清晰的表达。可以邮件至 xiyugee@qq.com