avatar

使用 verdaccio 搭建私有npm镜像(续)

使用 verdaccio 搭建私有npm镜像(续)

背景

  1. 私有包,统一管理,方便开发和使用,自然也可以使用npm的付费服务,可惜贫穷限制了消费能力
  2. 安全性,内部开发的模块和一些内容并不希望其他无关人员能够看到,但是又希望内部能方便使用
  3. 加速,自己搭建npm 服务器,本身可以自带常用package的缓存, cnpm 有一些包存在路径问题,而npm 的速度有些感人,自建的服务器会缓存下载过的包,能节省时间

部署流程

基础安装

可以查看上一篇文章使用 verdaccio 搭建私有npm镜像

配置nginx反向代理

直接运行 verdaccio, 控制台会有提示配置文件的路径,修改一下配置文件vim xxx/config.yaml

1
2
3
listen: 0.0.0.0:4873
# 在文件末尾增加以下配置
url_prefix: /verdaccio/

修改nginx配置文件 vim xxx/verdaccio.com.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server{
listen 80;
server_name v.com;
location ~ ^/verdaccio/(.*)$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:4873/$1;
proxy_redirect off;
}
}

重新加载下nginx的配置文件 sudo /usr/local/opt/nginx/bin/nginx -s reload
即可通过 http://v.com/verdaccio/ 访问verdaccio的web管理界面

遇到问题

  1. 当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

  2. 某些新的私有包一直publish不上去,如 @pengwf/fe-test,提示404或者权限不足
    直接进入verdaccio的缓存目录,创建相关目录和文件,然后再publish就可以

    1
    2
    3
    4
    5
    cd xxx/verdaccio/storage/@pengwf
    mkdir fe-test
    cd fe-test
    cp /yyy/fe-test/package.json ./

  3. 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
2
3
4
5
6
7
nrm del localnpm
nrm add localnpm http://v.com/verdaccio/
nrm use localnpm
# 注册一个用户
npm adduser –-registry http://v.com/verdaccio/ --scope=@myOrg
# 进入具体的待发包文件夹以后执行以下命令,即可发布包到本地的镜像
npm publish
文章作者: pengweifu
文章链接: https://www.pengwf.com/2021/05/25/other/TOOL-verdaccio1/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 麦子的博客
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论