npm相关
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会自动重载。这里也可以设置你要监控的文件。
-----------------------------------------------------------------------------------------------------------------------------------
当你的才华还撑不起你的野心的时候,你就应该静下心来学习; 当你的能力还驾驭不了你的目标时,就应该沉下心来,历练; 梦想,不是浮躁,而是沉淀和积累,只有拼出来的美丽,没有等出来的辉煌,机会永远是留给最渴望的那个人,学会与内心深处的你对话,问问自己,想 要怎样的人生,静心学习,耐心沉淀,送给自己,共勉。
-----------------------------------------------------------------------------------------------------------------------------------
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号