由于业务安全需要等各种原因,无法将所有插件发布到公共npm仓库,所以需要搭建自己的私有npm仓库。最近搭建了一个简单的npm仓库,踩过一些坑,分享给大家,希望对有需要的童鞋有所帮助。本讲使用sinopia从0搭建npm仓库,会比较详细。觉得啰嗦的童鞋只能看自己需要的了。([原文链接[1])在服务器端安装nodejs和npm因为我的linux服务器是centos,所以这里说的是在centos上安装node环境的方法1.安装wgetyuminstall-ywget2。下载最新的node包nodejs官网可以找到最新的下载地址(找到需要的可以右键复制链接地址获取最新地址)wgethttps://nodejs.org/en/下载/node-v10.15.0-linux-x64.tar.xz解压安装包xz-dnode-v10.15.0-linux-x64.tar.xztar-xfnode-v10.15.0-linux-x64.tar.xz部署bin文件重点是找到你的nodejs文件Path(解压node文件的地方就是where.),如果找不到node路径请先执行whereisnode再执行ln-snodepath/usr/bin/nodeln-snodepath/usr/bin/npmeg://我的node解压路径是/opt/node-v10.15.0-linux-x64/bin/nodeln-s/opt/node-v10.15.0-linux-x64/bin/node/usr/bin/nodeln-s/opt/node-v10.15.0-linux-x64/bin/node/usr/bin/npmIfln:failedtocreatesymboliclink'/usr/bin/node':FileexistsExecute:rm/usr/bin/node检查是否安装成功node-vnpm-vbuildnpmwarehouse在安装好sinopia和安装好node之后,我们就可以直接在服务器上安装sinopia了。一行命令全局安装npminstall-gsinopia安装完成后可以启动试试。以下结果表明sinopia已经成功运行。这时候打开http://localhost:4873/就可以访问Sinopia了,不需要超级用户权限。不要在root下运行它。warn---configfile-/root/.config/sinopia/config.yamlwarn---httpaddress-http//localhost:4873/如果报sinopia:commandnotfound,请添加关联,找到你的sinopia路径(该路径在上一个node路径的子目录下)ln-s/opt/node-v10.15.0-linux-x64/bin/sinopia/usr/binpm2node服务很脆弱,一般在实践中会配合守护进程。这里我使用pm2作为daemon安装npminstall-gpm2pm2-v如果出现pm2:commandnotfound,方法同sinopialn-s/opt/node-v10.15.0-linux-x64/bin/pm2/USR/BIN通过PM2启动Sinopia:PM2启动`whichsinopia`结果类似:┌──────────────────────────────────┬──┬────────┬────┬──────────┬────────────┬──────────┐│名称│id│模式│状态│?│cpu│内存│├────────────┼──────┼────────┼──────────┼──────────┼────────┼──────────┼────────────┤│sinopia│0│N/A│分叉│在线│0│0%│16.7MB│└──────────┴──────┴────────┴──────────┴──────────┴────────┴────────────────────────────────────────┘Sinopia配置修改默认情况下,sinopia的配置不适合直接使用,所以我们需要根据需要修改其配置文件。我们找到上面提到的配置文件目录,打开配置文件编辑##Thisisthedefaultconfigfile。它允许所有用户做任何事情,#所以不要在生产系统上使用它。##在此处查看更多配置文件示例:#https://github.com/rlidwka/sinopia/tree/master/conf##包含所有包存储的目录路径:./storage#npm包存储路径auth:htpasswd:file:./htpasswd#保存用户账号密码等信息#允许的最大用户数d注册,默认为“+inf”。#您可以将其设置为-1以禁用注册。max_users:-1#默认为1000,改成-1,禁止注册#我们可以聊聊的其他已知仓库列表uplinks:npmjs:url:http://registry.npm.taobao.org/#默认是npm的官方网站。由于国情,修改url让sinopia使用淘宝的npm镜像地址packages:#Configureauthoritymanagement'@*/*':#scopedpackagesaccess:$all#表示哪类用户可以安装匹配的项目[$all表示每个人都可以进行相应的操作,$authenticated表示只有通过验证的人才可以进行相应的操作,$anonymous表示只有Anonymous的人可以进行相应的操作(一般没用)]publish:$authenticated#表示哪个typeofuserscanpublishmatchingitems'*':#allowallusers(includingnon-authenticatedusers)toreadand#publishallpackages##youcanspecifyusernames/groupnames(dependingonyourauthplugin)#和三个关键字:“$all","$anonymous","$authenticated"access:$all#表示哪类用户可以进行匹配项目安装#允许所有已知用户发布包#(默认任何人都可以注册,记得吗?)publish:$authenticated#表示哪种类型的用户可以发布匹配项#如果包不是availablelocally,proxyrequeststo'npmjs'registryproxy:npmjs#顾名思义,这里的值对应uplinks#logsettingslogs:-{type:stdout,format:pretty,level:http}#-{type:file,path:sinopia.log,level:info}#可以指定监听地址(或者简单的端口)listen:0.0.0.0:4873#默认没有,只能本地访问,添加后可以通过外部访问network==listen:0.0.0.0:4873一定要加上,然后记得打开服务器的4873端口==访问,在电脑浏览器输入服务器ip地址+端口号,默认端口号是4873eg:192.186.1.343:4873到这里,我们就可以在自己的服务器上成功搭建自己的私有npm啦~~
