首页 > 技术文章 > npm相关

macoffee 2020-10-21 11:27 原文

node -v
v12.16.2
npm --version
6.14.4
pm2 -V
4.2.3
sinopia -V
Sinopia doesn't need superuser privileges. Don't run it under root.
1.4.0

nodejs版本下载:https://nodejs.org/download/release/v12.16.2/

1. nodejs安装
》1. tar -xvf node-v12.16.2-linux-x64.tar.gz
》2. 配置环境变量
编辑
vim .bash_profile
# 添加 node环境变量
export NODE_HOME=/root/node/node-v12.16.2
export PATH=$PATH:$NODE_HOME/bin
export NODE_PATH=$NODE_HOME/lib/node_modules
》3. source .bash_profile
》4. 检查是否安装成功
node -v
npm -v
有版本号表示配置成功。

2. 安装sinopia
》1. npm install -g sinopia
》2. 安装好后,执行下面命令启动 sinopia
sinopia
》3. 你会看到下面两行提示:
warn --- config file - /root/.config/sinopia/htpassw
warn --- http address - http://localhost:4873/
》4. node服务非常脆弱,一般在实际中使用都会配合守护进程。这里我用的是 pm2 做守护进程,首先全局安装 PM2,执行下面语句:
npm install -g pm2
》5. 再执行下面语句,通过 PM2 启动 sinopia:
pm2 start `which sinopia`
》6. 默认情况下,sinopia 的配置是不适合直接使用的,所以我们需要对它的配置文件按需酌情修改,我们找到上面提到的配置文件目录,打开配置文件进行编辑:
#
# This is the default config file. It allows all users to do anything,
# so don't use it on production systems.
#
# Look here for more config file examples:
# https://github.com/rlidwka/sinopia/tree/master/conf
#

# path to a directory with all packages
storage: ./storage #npm包存放的路径

auth:
htpasswd:
file: ./htpasswd #保存用户的账号密码等信息
# Maximum amount of users allowed to register, defaults to "+inf".
# You can set this to -1 to disable registration.
max_users: -1 #默认为1000,改为-1,禁止注册

# a list of other known repositories we can talk to
uplinks:
npmjs:
url: http://registry.npm.taobao.org/ #默认为npm的官网,由于国情,修改 url 让sinopia使用 淘宝的npm镜像地址

packages: #配置权限管理
'@*/*':
# scoped packages
access: $all #表示哪一类用户可以对匹配的项目进行安装 【$all 表示所有人都可以执行对应的操作,$authenticated 表示只有通过验证的人可以执行对应操作,$anonymous 表示只有匿名者可以进行对应操作(通常无用)】
publish: $authenticated #表示哪一类用户可以对匹配的项目进行发布

'*':
# allow all users (including non-authenticated users) to read and
# publish all packages
#
# you can specify usernames/groupnames (depending on your auth plugin)
# and three keywords: "$all", "$anonymous", "$authenticated"
access: $all #表示哪一类用户可以对匹配的项目进行安装

# allow all known users to publish packages
# (anyone can register by default, remember?)
publish: $authenticated #表示哪一类用户可以对匹配的项目进行发布

# if package is not available locally, proxy requests to 'npmjs' registry
proxy: npmjs #如其名,这里的值是对应于 uplinks

# log settings
logs:
- {type: stdout, format: pretty, level: http}
#- {type: file, path: sinopia.log, level: info}

# you can specify listen address (or simply a port)
listen: 0.0.0.0:4873 #默认没有,只能在本机访问,添加后可以通过外网访问

3. 管理和发布,推荐用nrm管理,环境和用户问题已经解决,那么接下来我们试试在我们的服务商发布自己的包,这里推荐用 nrm 来管理 npm 的镜像地址,非常方便
首先全局安装 nrm:
npm install -g nrm
然后添加虚拟机npm 服务镜像地址:
nrm add my http://192.168.2.18:4873
使用虚拟机镜像:
nrm use my
其他常用的 nrm 命令:
nrm --help #查看 nrm 命令帮助
nrm list #列出可用的 npm 镜像地址
nrm use taobao #使用'淘宝npm'镜像地址
上面我们把本机的 npm 切换到虚拟机镜像后吗,用它来安装 gulp:
npm install gulp
安装包没问题,然后就是发布我们自己的包了,发布之前要用下面命令登录:
npm login
进入我们要发布的包根目录,然后执行初始化命令创建 package.json (已经初始化的话,跳过这步):
npm init
根据提示输入包信息,初始化完成后就可以发布了
然后在根目录执行下面命令:
npm publish
发布成功后,你就可以像安装别的包那样安装自己发布的包了。

常用命令:
sinopia
pm2 start `which sinopia`
pm2 stop `which sinopia`

三、PM2常用命令
假设你现在已经写好了一个app.js的文件,需要启动,你可以使用pm2进行管理

1. 启动
# pm2 start app.js
# pm2 start app.js --name my-api #my-api为PM2进程名称
# pm2 start app.js -i 0 #根据CPU核数启动进程个数
# pm2 start app.js --watch #实时监控app.js的方式启动,当app.js文件有变动时,pm2会自动reload
2. 查看进程
# pm2 list
# pm2 show 0 或者 # pm2 info 0 #查看进程详细信息,0为PM2进程id
3. 监控
# pm2 monit
4. 停止
# pm2 stop all #停止PM2列表中所有的进程
# pm2 stop 0 #停止PM2列表中进程为0的进程
5. 重载
# pm2 reload all #重载PM2列表中所有的进程
# pm2 reload 0 #重载PM2列表中进程为0的进程
6. 重启
# pm2 restart all #重启PM2列表中所有的进程
# pm2 restart 0 #重启PM2列表中进程为0的进程
7. 删除PM2进程
# pm2 delete 0 #删除PM2列表中进程为0的进程
# pm2 delete all #删除PM2列表中所有的进程
8. 日志操作
# pm2 logs [--raw] #Display all processes logs in streaming
# pm2 flush #Empty all log file
# pm2 reloadLogs #Reload all logs
9. 升级PM2
# npm install pm2@lastest -g #安装最新的PM2版本
# pm2 updatePM2 #升级pm2
10. 更多命令参数请查看帮助
# pm2 --help
四、PM2目录结构
默认的目录是:当前用于的家目录下的.pm2目录(此目录可以自定义,请参考:五、自定义启动文件),详细信息如下:

$HOME/.pm2 #will contain all PM2 related files
$HOME/.pm2/logs #will contain all applications logs
$HOME/.pm2/pids #will contain all applications pids
$HOME/.pm2/pm2.log #PM2 logs
$HOME/.pm2/pm2.pid #PM2 pid
$HOME/.pm2/rpc.sock #Socket file for remote commands
$HOME/.pm2/pub.sock #Socket file for publishable events
$HOME/.pm2/conf.js #PM2 Configuration
五、自定义启动文件
创建一个test.json的示例文件,格式如下:

{
"apps":
{
"name": "test",
"cwd": "/data/wwwroot/nodejs",
"script": "./test.sh",
"exec_interpreter": "bash",
"min_uptime": "60s",
"max_restarts": 30,
"exec_mode" : "cluster_mode",
"error_file" : "./test-err.log",
"out_file": "./test-out.log",
"pid_file": "./test.pid"
"watch": false
}
}
说明:

apps:json结构,apps是一个数组,每一个数组成员就是对应一个pm2中运行的应用

name:应用程序的名称

cwd:应用程序所在的目录

script:应用程序的脚本路径

exec_interpreter:应用程序的脚本类型,这里使用的shell,默认是nodejs

min_uptime:最小运行时间,这里设置的是60s即如果应用程序在60s内退出,pm2会认为程序异常退出,此时触发重启max_restarts设置数量

max_restarts:设置应用程序异常退出重启的次数,默认15次(从0开始计数)

exec_mode:应用程序启动模式,这里设置的是cluster_mode(集群),默认是fork

error_file:自定义应用程序的错误日志文件

out_file:自定义应用程序日志文件

pid_file:自定义应用程序的pid文件

watch:是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。

推荐阅读