使用verdaccio搭建npm私服仓库
为什么需要搭建私有 npm
-搭建公司内部中台做铺垫,代码属于公司资产
-团队内部使用一些待完善package半成品
-内部使用更安全
-下载package更快,权限可配置
包管理的私服工具选型
maven:更偏向后台使用
cnpm: 需要安装MySQL,配置比较麻烦
Verdaccio 是一个 Node.js创建的轻量的私有 npm proxy registry, forked 于 sinopia@1.4.0
1.与 yarn, npm 和 pnpm 100% 兼容
2.提供 Docker 和 Kubernetes 支持,相当容易安装和使用
3.发布的包是私有的并且访问权限可配置
4.Verdaccio 按需要缓存所有相关项,并在当地或私有网络下可以加速安装
服务器搭建
1.安装node
2.安装verdaccio
npm install -g verdaccio --unsafe-perm
加上--unsafe-perm选项是为了防止gyp ERR! permission denied权限问题报错
3.启动verdaccio
verdaccio
执行结果如下:
[root@webserver ~]# verdaccio
*** WARNING: Verdaccio doesn't need superuser privileges. Don't run it under root! ***
warn --- config file - /root/.config/verdaccio/config.yaml
warn --- Verdaccio started
warn --- Plugin successfully loaded: verdaccio-htpasswd
warn --- Plugin successfully loaded: verdaccio-audit
warn --- http address - http://localhost:4873/ - verdaccio/4.10.0
从控制台的输出,我们可以看到:
verdaccio的配置文件路径在/root/.config/verdaccio/config.yaml和默认访问地址http://localhost:4873/
在配置文件末尾增加listen: 0.0.0.0:4873保存
# you can specify listen address (or simply a port)
listen: 0.0.0.0:4873
查看修改配置文件
// 进入verdaccio目录
[root@webserver ~]# cd /root/.config/verdaccio/
[root@webserver verdaccio]# ls
config.yaml storage
-- 查看该目录下的文件,该目录下默认有两个文件:config.yaml和storage,添加用户之后会自动创建htpasswd
// 查看配置文件
[root@webserver ~]# vim config.yaml
storage: ./storage
auth:
htpasswd:
file: ./htpasswd
uplinks:
npmjs:
url: https://registry.npmjs.org/
packages:
'@*/*':
access: $all
publish: $authenticated
proxy: npmjs
'**':
proxy: npmjs
logs:
- {type: stdout, format: pretty, level: http}
在配置文件config.yaml末尾加入代码:
# you can specify listen address (or simply a port)
listen: 0.0.0.0:4873
配置
在当前用户的 .config/verdaccio 下默认有两个文件:config.yaml 和 htpasswd。这里介绍两个比较重要的配置项,其他的可以官网上查询。
- htpasswd
这个文件需要创建了账号才会出现在当前目录
npm adduser --registry http://localhost:4873
Username: xxx
Password:
Email: (this IS public) xxx@xxx.com
Logged in as slweb on http://localhost:4873/. #看到这个代表成功了
[root@webserver verdaccio]# ls
config.yaml htpasswd storage
#这时就出现了htpasswd。然后修改vim config.yaml
[root@webserver verdaccio]# vim config.yaml
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: 1000
max_users: -1 # 禁止注册
下面将使用插件注册
[root@webserver verdaccio]# sinopia-adduser
username:
注册成功
[root@webserver verdaccio]# cat htpasswd
slweb:xxxOkg:autocreated 2020-12-23T08:36:36.974Z
slweb:{SHA}xxxqUE=:autocreated 2020-12-23T08:37:50.637Z
- url可以配置成淘宝镜像地址:https://registry.npmjs.org/
- 权限配置(一般团队或者公司的私有项目,会采用不同的权限控制。)
操作权限: - access 表示哪一类用户可以对匹配的项目进行安装(install)
- publish 表示哪一类用户可以对匹配的项目进行发布(publish)
- proxy 如其名,这里的值是对应于 uplinks 的
组权限: - all 表示所有人都可以执行对应的操作
- authenticated 表示只有通过验证的人可以执行对应操作
- anonymous 表示只有匿名者可以进行对应操作(通常无用)
例子:
packages:
# scoped 包
'@scope/*':
access: $all
publish: $all
proxy: server2
'supersecret-*':
# 添加多个组
access: secret super-secret-area ultra-secret-area
publish: secret ultra-secret-area
proxy: server1
'private-*':
# private-xxx 允许所有的用户安装、认证的用户发布
access: $all
publish: $authenticated
proxy: uplink1
'old-*': # 不设置 `access`、`publish` 阻止对一组包的访问(不设置proxy阻止代理一组特定包)
'**':
# 允许所有用户 (包括为验证的用户) 安装和发布
access: $all
publish: $all
proxy: uplink2
设置权限账号(安装插件完成)
npm install htpasswd-for-sinopia -g
4.使用pm2启动verdaccio
安装pm2
npm install -g pm2 --unsafe-perm
使用pm2启动verdaccio,以保证进程一直处于打开状态
pm2 start verdaccio
5、访问搭建好的私有仓库
在浏览器中打开http://47.107.60.51:4873 链接
注意:在阿里云服务器添加安全组,开放 4873 端口号,如果没有添加该端口安全组则不能在浏览器正常访问http://47.107.60.51:4873