使用 verdaccio 搭建私有npm镜像(续)
背景
- 私有包,统一管理,方便开发和使用,自然也可以使用npm的付费服务,可惜贫穷限制了消费能力
- 安全性,内部开发的模块和一些内容并不希望其他无关人员能够看到,但是又希望内部能方便使用
- 加速,自己搭建npm 服务器,本身可以自带常用package的缓存, cnpm 有一些包存在路径问题,而npm 的速度有些感人,自建的服务器会缓存下载过的包,能节省时间
部署流程
基础安装
可以查看上一篇文章使用 verdaccio 搭建私有npm镜像
配置nginx反向代理
直接运行 verdaccio, 控制台会有提示配置文件的路径,修改一下配置文件vim xxx/config.yaml
1 | listen: 0.0.0.0:4873 |
修改nginx配置文件 vim xxx/verdaccio.com.conf
1 | server{ |
重新加载下nginx的配置文件 sudo /usr/local/opt/nginx/bin/nginx -s reload
即可通过 http://v.com/verdaccio/
访问verdaccio的web管理界面
遇到问题
当verdaccio和nginx部署在不同的机器上,访问的时候提示
it violates the following Content Security Policy directive: "connect-src 'self' **
,可以修改verdaccio的中间件文件,将connect-src设为正确的值,头铁的话,可以注释掉相关代码:1
2
3
4
5
6
7
8
9
10
11
12
13// verdaccio安装目录/build/api/middleware.js
function setSecurityWebHeaders(req, res, next) {
// disable loading in frames (clickjacking, etc.)
res.header(_constants.HEADERS.FRAMES_OPTIONS, 'deny'); // avoid stablish connections outside of domain
// 修改以下这行代码
// res.header(_constants.HEADERS.CSP, "connect-src 'self'"); // https://stackoverflow.com/questions/18337630/what-is-x-content-type-options-nosniff
res.header(_constants.HEADERS.CTO, 'nosniff'); // https://stackoverflow.com/questions/9090577/what-is-the-http-header-x-xss-protection
res.header(_constants.HEADERS.XSS, '1; mode=block');
next();
}改好以后重启verdaccio
pm2 restart verdaccio
某些新的私有包一直publish不上去,如
@pengwf/fe-test
,提示404或者权限不足
直接进入verdaccio的缓存目录,创建相关目录和文件,然后再publish就可以1
2
3
4
5cd xxx/verdaccio/storage/@pengwf
mkdir fe-test
cd fe-test
cp /yyy/fe-test/package.json ./publish上去的某些包无法安装,提示127.0.0.1连接超时
之前通过127.0.0.1:4873发布的包,外网无法访问,修改下verdaccio缓存目录响应包的package.json里面tarball值,IP改为外网可以访问的域名1
2
3
4// "tarball": "http://127.0.0.1:4873/@pengwf/fe-test/-/@zvalley/zvalley-cli-2.0.8.tgz"
"tarball": "http://v.com/verdaccio/@pengwf/fe-test/-/@pengwf/fe-test-2.0.8.tgz"
使用 verdaccio
结束掉 verdaccio以后, 使用pm2来后台运行 verdaccio,然后通过nrm修改本地所使用的镜像地址
1 | nrm del localnpm |