从一滴水开始 的个人博客

纵有疾风起,人生不言弃

Open Source, Open Mind,
Open Sight, Open Future!
  menu
19 文章
8821 浏览
0 当前访客
ღゝ◡╹)ノ❤️

NPM私服搭建-Verdaccio

一、私服搭建架构示意图

img

二、安装步骤

2.1. 安装node环境

2.1.1. 上传node安装包,解压并重命名

cd /usr/local/lib
#将下载好的node-v12.4.0-linux-x64.tar.xz 上传到上面路径下。
#解压并重命名
tar -xvf node-v12.4.0-linux-x64.tar.xz
mv node-v12.4.0-linux-x64/ nodejs

2.1.2. 建立软连接

ln -s /usr/local/nodejs/bin/node /usr/local/bin

ln -s /usr/local/nodejs/bin/npm /usr/local/bin

2.1.3. 测试nodenpm是否安装成功

node -v
npm -v
# 设置默认仓库为淘宝镜像
npm config set registry https://registry.npm.taobao.org
# 设置代理地址 echo $http_proxy
npm config set proxy http://ip:port
# 取消ssl校验
npm config set strict-ssl false

2.2. 安装verdacciopm2

2.2.1. 安装verdaccio

npm i -g verdaccio

2.2.2. 安装pm2,用来守护node进程

npm i -g pm2

#建立软连接
ln -s /usr/local/nodejs/bin/pm2 /usr/local/bin

2.2.3. 使用pm2启动verdaccio

pm2 start verdaccio

##pm2命令
# pm2 start verdaccio //启动;
# pm2 reload verdaccio //重启;
# pm2 logs verdaccio //查看日志;

2.2.4. 修改verdaccio配置文件

verdaccio 默认只能本机访问。需要在配置文件最后面添加 其他ip可访问的配置。

# 进入配置文件
vi /root/.config/verdaccio/config.yaml
# 找到 uplinks 节点 修改url 为 https://registry.npm.taobao.org/

image.png

# verdaccio默认只能在本机访问,需要在文件最后一行添加如下配置,才能在其他机器上访问。
listen: 0.0.0.0:4873

三、Verdaccio使用

verdaccio允许任何人创建账号,若没有配置verdaccio的配置文件config.yaml,则默认任何注册了verdaccio的开发都有publish权限。

  1. 添加一个用户:npm adduser --registry http://ip:4873
  2. 给要添加到服务的工程添加源信息,在工程根目录下新建.npmrc文件,添加以下内容
registry=http://ip:4873
  1. package.json中设置好版本,执行npm publish
  2. 查看http://ip:4873。可在网站上看到已有列表

客户端使用:设置npm源为私服地址

npm set registry http://ip:4873

四、进阶

向上面这样,肯定是不能满足我们的需求的。我们需要权限可控(添加用户,请求、发布、撤销包),UI 可配置。先看看verdaccio提供的配置。

4.1 verdaccio 默认配置

#包缓存路径
storage: ./storage

# 网站配置
web:
#网站标题
  title: verddico
#网站logo
  logo: /root/.config/verdaccio/logo.png
#网站导航栏背景色
  primary_color: "#3894ff"
#权限配置
auth:
# 内置的htpasswd权限插件
  htpasswd:
# 用户列表文件
    file: ./htpasswd
# 用户最大数目。-1表示不能在随意注册。
    max_users: -1
# 外部包管理仓库地址
uplinks:
  npmjs:
    url: https://registry.npmjs.org/
packages:
  '@*/*':
    access: $all
    publish: $authenticated
    proxy: npmjs
  '**':
    proxy: npmjs
logs:
  - {type: stdout, format: pretty, level: http}

4.2 外网访问配置

如果外网需要访问,那么必须在config.yaml增加以下配置

listen: 0.0.0.0:4873

4.3 用户管理

按照默认配置,我们可以通过npm adduser --registry=http://ip:4873添加用户。这样可以随意的注册用户。但是对于公司私服来说,通常不希望这样。因此我们可以通过以下配置来禁止随意注册用户。

auth:
  htpasswd:
    file: ./htpasswd
    max_users: -1

问题来了,这样以后,我们如何增加用户呢?可以有以下两种方式:

  1. 手动编辑./htpasswd文件。

  2. 使用第三方插件,以命令的形式增加用户。

    npm install sinopia-adduser -g
    

    安装好该插件,在./htpasswd目录下,运行以下命令

    sinopia-adduser
    

4.4 权限设置

verdaccio 默认引入了htpasswd插件。但是这个插件只能以user的角度去设置权限。而实际中,我们通常想通过分组来设置权限。由于第三方权限组件都有权限服务器,而我们仅仅只想有个按分组来设置权限的功能即可。

npm install verdaccio-simplegroup -g

config.yaml配置文件中,增加相应的配置

auth:
  htpasswd:
    file: ./htpasswd
    max_users: -1
  simplegroup:
    admin_group: Jack Lucy
    base_group: Jack

packages:
  '@company/*':
    access: $authenticated
    publish: admin_group
    unpublish: admin_group
    proxy: npmjs

  '@base/*':
    access: $authenticated
    publish: base_group
    unpublish: base_group
    proxy: npmjs
  '**':
    access: $all
    publish:
    unpublish:
    proxy: npmjs

五、补充

5.1 统计缓存包信息

cd /root/.config/verdaccio/storage/
# 查看(包)文件夹数量

ls -l|grep "^d"| wc -l

# 查看当前目录下的文件数量(不包含子目录中的文件)

ls -l|grep "^-"| wc -l

# 查看当前目录下的文件数量(包含子目录中的文件) 注意:R,代表子目录

ls -lR|grep "^-"| wc -l

# 查看当前目录下的文件夹目录个数(不包含子目录中的目录),同上述理,如果需要查看子目录的,加上R

ls -l|grep "^d"| wc -l

# 查询当前路径下的指定前缀名的目录下的所有文件数量
# 例如:统计所有以“20161124”开头的目录下的全部文件数量

ls -lR 20161124*/|grep "^-"| wc -l

5.2 清空本地 npm 缓存

npm cache clean --force

标题:NPM私服搭建-Verdaccio
作者:从一滴水开始
地址:http://blog.lizhenhua.fun/articles/2020/10/11/1602397111199.html