一、私服搭建架构示意图
二、安装步骤
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. 测试node
和npm
是否安装成功
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. 安装verdaccio
和pm2
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/
# verdaccio默认只能在本机访问,需要在文件最后一行添加如下配置,才能在其他机器上访问。
listen: 0.0.0.0:4873
三、Verdaccio使用
verdaccio
允许任何人创建账号,若没有配置verdaccio
的配置文件config.yaml
,则默认任何注册了verdaccio
的开发都有publish
权限。
- 添加一个用户:
npm adduser --registry http://ip:4873
- 给要添加到服务的工程添加源信息,在工程根目录下新建
.npmrc
文件,添加以下内容
registry=http://ip:4873
- package.json
中设置好版本,执行
npm publish - 查看
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
问题来了,这样以后,我们如何增加用户呢?可以有以下两种方式:
-
手动编辑
./htpasswd
文件。 -
使用第三方插件,以命令的形式增加用户。
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