使用sinopia搭建私有npm服务
来源:互联网 发布:日本媳妇 知乎 编辑:程序博客网 时间:2024/05/19 12:38
原文地址 https://github.com/jindada/blog/issues/1
为什么需要搭建私有npm
- 私有的包只想在内部使用,还不想用git+ssh的方式,感觉不够优雅,并且还想可以配置相应的权限
- npm上的包下载很慢,想把已经下载过的包缓存在服务器上,下次 下载时首先检查更新,如果没更新直接走缓存
- 希望下载的时候,公共包走公共仓库,私有包走内部服务器的私有仓库
为什么写这篇文章
写这边文章的时候,已经看到大神们写过的几篇不错的文章,这里想集中汇总一下,并且说明一下已有文章没有提到的坑
下面列举一下感觉不错的文章:
+ 使用Sinopia搭建私有的npm仓库
+ Sinopia | 从零开始搭建npm仓库
介绍sinopia
sinopia 的介绍与优缺点就不详细介绍了 上面2篇文章都有很详细的说明
部署安装和使用
安装 sinopia 与启动(假设你已经安装过node环境)
$ npm install sinopia -g$ sinopia
然后打开浏览器 访问地址 http://localhost:4873/
正常显示即成功, 4873
是默认端口
配置npm代理
sinopia启动之后,首先通过 npm set registry http://localhost:4873/
来设置客户端使用的npm代理,然后就能正常使用了
添加用户与登录
$ npm adduser --registry http://localhost:4873 // 按照提示输入$ npm login // 按照提示输入
登录成功之后,你就可以执行npm publish
发布到这个私有npm上面啦,刷新http://localhost:4873/
就可以看到你刚刚上传的包啦。
需要注意:你无法发布一个包名+版本号已经存在于公共仓库里的包,因为发布的时候,sinopia 首先会去你配置的公共仓库(
可以通过配置文件指定,默认是http://registry.npmjs.org
)去check,check通过后才允许上传包到 sinopia
配置
Sinopia的特点是,你在哪个目录运行,它的就会在对应的目录下创建自己的文件。在没有指定配置文件的情况下,默认目录是安装目录 你可以通过sinopia -c path/config.yaml 来指定目录运行
目录下默认有两个文件:config.yaml和storage ,htpasswd 是添加用户之后自动创建的。
config.yaml — 配置访问权限,代理,文件存储路径等所有配置信息的
storage — 缓存npm包目录
htpasswd — 保存用户的账号密码等信息
config.yaml
:配置访问权限,代理,文件存储路径等所有配置信息的
# 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 packagesstorage: ./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 touplinks: npmjs: url: http://registry.npmjs.org/ // 默认为npm的官网packages: // 配置权限管理 '@*/*': # scoped packages access: $all 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# log settingslogs: - {type: stdout, format: pretty, level: http} #- {type: file, path: sinopia.log, level: info}# you can specify listen address (or simply a port) listen: localhost:4873 // 默认没有,只能在本机访问,把localhost改为0.0.0.0后可以通过外网访问
htpasswd 配置
config.yaml 中的 max_users: -1
表示我们将最大用户数设置为-1,表示禁用 npm adduser 命令来创建用户,不过仍然可以通过目录下的 htpasswd 文件来初始化用户, 打开 htpasswd 文件
zhangsan:{SHA}?????????????????=:autocreated 2016-02-05T15:33:46.238Zlisi:{SHA}????????????????=:autocreated 2016-02-05T15:39:19.960Zwangwu:{SHA}????????????????=:autocreated 2016-02-05T17:59:05.041Z
很明显密码被加密了,但是加密算法很简单,就是简单的 SHA1 哈稀之后再转换成 Base64,后面加上时间戳。
即使这样,我们还是很懵逼,还是不知道如何去添加用户?不要怕!! 这里给大家安利一个好用的小插件 htpasswd-for-sinopia, 没错,就是作者本人写的,大家觉得不错一定要赏颗star
啊。下面简单介绍下 htpasswd-for-sinopia 的用法:
$ npm install htpasswd-for-sinopia -g // 安装$ sinopia-adduser // 在sinopia目录下执行,按照提示输入用户名密码$ vim htpasswd // 查看一下 htpasswd 发现刚刚输入的信息已经安静的躺在里面,则证明添加成功
packages配置(之前的文章这部分已经说的很详细了,这里直接copy过来)
配置大致分为两个部分,一个是以 @weflex/* 为开头的,另一个则是通配符 *。
这个当然就是对 package.json 中的 name 字段进行匹配,比如 @weflex/app 将匹配第一个配置,而 express 则匹配第二个。
这里这么配置的意义在于:一般团队或者公司的私有项目,会采用不同的权限控制,于是这里借用了 NPM 的 scoped name 即 @company 的形式,例如 @weflex/app 即表示 WeFlex 下属的 app 项目了。
接下来,每一个命名过滤器(filter)下都有三项基本设置:
access: 表示哪一类用户可以对匹配的项目进行安装(install)
publish: 表示哪一类用户可以对匹配的项目进行发布(publish)
proxy: 如其名,这里的值是对应于 uplinks 的
对于1和2的值,我们通常有以下一些可选的配置:
$anonymous 表示只有匿名者可以进行对应操作(通常无用)
或者也可以指定对应于之前我们配置的用户表 htpasswd 中的一个或多个用户,这样就明确地指定哪些用户可以执行匹配的操作配置完成后,再运行:
$ sinopia -c config.yml
配合 sinopia 使用
pm2:进程守护管理工具
$ npm install -g pm2$ pm2 start `which sinopia`
更多操作参考 https://wohugb.gitbooks.io/pm2/content/
nrm:npm镜像地址管理工具
$ // 安装nrm$ npm install -g nrm$ // 查看列表$ nrm ls$ // 添加名字为 sinopia 的镜像$ nrm add sinopia http://localhost:4873$ // 查看列表$ nrm ls$ // 使用 sinopia 的镜像地址$ nrm use sinopia
安全性
为了保证私有npm仓库,可以在前端加一层 Nginx,然后配置 SSH 来作为双层验证
- 使用sinopia搭建私有npm服务
- 使用Sinopia搭建私有npm仓库
- 【玩转树莓派】使用 sinopia 搭建私有 npm 服务器
- 使用sinopia搭建自己的npm服务
- 使用Sinopia搭建私有npm仓库不能下载带有@符号的包
- 基于sinopia快速搭建npm私服
- CNPM搭建私有的NPM服务
- CNPM搭建私有的NPM服务
- 使用cnpm搭建企业内部私有NPM仓库
- npm本地化仓库Sinopia
- 使用CNPM搭建企业内部私有的NPM库
- 使用CNPM搭建企业内部私有的NPM库
- 搭建前端私有npm杂记
- 使用新浪云存储搭建Docker私有仓库服务
- 使用新浪云存储搭建Docker私有仓库服务
- 使用Harbor搭建Docker私有镜像仓库服务
- 使用Harbor搭建Docker私有镜像仓库服务
- 私有github搭建使用
- mybatis foreach用法
- XML 文件详解【XML元素】
- 树算法总结
- GitLab、CRLF(/r/n)、CRLF(/r/n)、CRLF(/r/n)处理
- Python3爬虫小程序——爬取各类天气信息(2)
- 使用sinopia搭建私有npm服务
- android获取当前运行Activity名字的方法
- mapbox相关资料
- 关于react用script标签引入jsx文件的问题
- lintcode python代码 488 快乐数
- 计蒜客-加一
- iOS 转让APP,变更开发商名字 —— HERO博客
- MySQL中group_concat函数深入理解
- Coderforces Chat room