使用sinopia搭建私有npm服务

原文地址 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 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.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 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: 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.238Z
lisi:{SHA}????????????????=:autocreated 2016-02-05T15:39:19.960Z
wangwu:{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的值,我们通常有以下一些可选的配置:

all authenticated 表示只有通过验证的人可以执行对应操作
$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 来作为双层验证

  • 0
    点赞
  • 1
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值