侧边栏壁纸
  • 累计撰写 211 篇文章
  • 累计创建 16 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

【Ubuntu】部署Verdaccio 进行npm包私有化管理

Wake
2024-11-06 / 0 评论 / 0 点赞 / 884 阅读 / 1,942 字

前言:

在日常的工作开发中,我们常常会遇到这样的场景:

公司或团队内部,需要开发和共享一些 逻辑/UI 组件等等的代码,

但是这些代码里面,可能包含一些敏感信息或专有功能,我们不想发布到公开的 npmjs 上去。

这时候我们就需要去搭建 npm 私有源,让这些包只在我们公司内部分享。

那这时候 Verdaccio 就是一个方便的选择。

什么是Verdaccio

Verdaccio 是一个轻量级的私有 npm 仓库管理工具,它可以帮助我们搭建自己的私有 npm 源。

在这种情况下,使用 Verdaccio 搭建私有 npm 源可以提供以下优势:

  • 安全性:通过搭建私有 npm 源,您可以更好地控制和保护自己的代码。只有授权用户能够访问您的私有源,防止未经授权的人员获取敏感信息或篡改包。

  • 灵活性:通过自定义配置 Verdaccio,您可以根据团队或公司的需求来管理包和版本发布。您可以设置访问权限、存储路径等参数,以满足特定项目的要求。

  • 提高效率:拥有一个专门为团队开发定制的私有 npm 源意味着团队成员之间能够更快速地共享和管理代码。不需要依赖公共 npm 仓库下载、安装包,节省了时间和带宽消耗。

  • 自定义功能:Verdaccio 支持插件机制,允许您扩展其功能,并集成其他服务(如 LDAP 或 GitHub )进行身份验证。这样就可以与现有系统集成,并实现更多定制化功能。

总而言之,在团队开发或者公司内部项目中使用 Verdaccio 私有化 npm 源是一种有效且灵活的方式来管理自定义包,并确保代码安全性与可靠性。通过搭建私有源, 团队能够更好地协作并加快项目进度。

部署 Verdaccio

Verdaccio 的部署方式很多,都非常的简单,5 分钟内快速上手.
这里建议用宿主机安装的方式来部署verdaccio,用docker-compose的方式还需要考虑配置文件的存放问题,没有配置好在配置用户名密码的时候就会陷入麻烦,我这里也没有过多去研究,转向了npm安装的方式。
Nodejs 部署
安装好 lts 的 nodejs 之后,直接全局安装:

# npm
npm i -g verdaccio
# yarn
yarn global add verdaccio
# pnpm
pnpm i -g verdaccio

image
这时候,一个 verdaccio 的命令会被注册在全局

执行 verdaccio -v 查看版本,显示版本号,代表你安装成功!
image-1730883020581
拉取verdaccio的代码仓库,进入到代码仓库目录,然后执行 verdaccio,你的私有源就在本地顺利启动了

git clone https://github.com/icebreaker-trash/npm-proxy-verdaccio.git
cd npm-proxy-verdaccio
verdaccio

启动日志如下所示:
image-1730883099324

使用supervisor进行守护进程的管理

使用verdaccio命令启动的服务只能在前台运行,一旦关闭命令终端,服务自然就中断了。为此可以直接使用supervisor进行守护进程的管理,服务异常关闭可以自动的拉起来。

[program:verdaccio]
command=verdaccio ; 运行程序的命令
directory=/home/ubuntu/npm-proxy-verdaccio ; 命令执行的目录
autorestart=true ; 程序意外退出是否自动重启
stderr_logfile=/data/verdaccio/log/verdaccio.err.log ; 错误日志文件
stdout_logfile=/data/verdaccio/log/verdaccio.out.log ; 输出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
user=root ; 进程执行的用户身份


stopsignal=INT

image-1730883831631

从启动日志中可以提取出几个重要信息:

  1. 加载配置的位置,默认情况下会在全局用户文件夹里,初始化一个 config 文件
  2. 用户名密码 hash 的存储文件 htpasswd 的位置
  3. 加载的插件信息
  4. 监听的 ip 和端口,默认是 localhost:4873,所以这时候是无法被其他机器访问到的

想要被其他机器访问到,需要去修改 config.yaml 这样反注释修改端口:

listen:
  - 0.0.0.0:4873

这样就能被内网里的其他机器访问到了,当然前提你要先开放(添加)你机器的端口出入规则

注册用户

部署完了之后我们开始注册用户,打开本机的 http://0.0.0.0:4873/ 可以看到页面
image-1730883220171
我们本地执行 npm adduser --registry http://0.0.0.0:4873/

按照顺序,输入我们的用户名密码邮箱

完成之后, verdaccio 目录下会出现一个 htpasswd 文件

里面格式如下:

icebreaker:xxxxxx:autocreated 2024-04-08T14:23:03.152Z

同时你全局的 .npmrc 里面出现:

//0.0.0.0:4873/:_authToken="xxxxxxx"

发布私有 npm 包

发布私有 npm 包可以很简单,也可以很复杂(各种编译)

这里我们按照简单的来, 创建一个 test-pkg 文件夹,初始化 package.json

{
  "name": "test-pkg",
  "version": "0.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {},
  "keywords": [],
  "files": ["index.js"],
  "author": "",
  "license": "ISC",
  "publishConfig": {
    "access": "public",
    "registry": "http://0.0.0.0:4873/"
  }
}

然后随便创建个 index.js 写点啥,就可以直接在项目里执行 npm publish 了

发布成功之后可以看到,我们的包已经上传上去了!
image-1730883314373
点击进入详情:
image-1730883329305
可以看到,界面元素和 npmjs 也差不多,也是可以查看 README.md 和各种版本依赖的。

管理 npm 包

此时我们上传 npm 包后,相关的文件就被上传到 config.yaml 里配置的 storage 里去了

这里我们配置的是 storage: ./storage,所以所有包的位置都在这
image-1730883361991
在这里我们就能对包进行删除等等操作了,比如想让某个包在列表里看不见,直接把它在 .verdaccio-db.json 文件里删去即可。

项目使用私有源

默认情况下,Verdaccio 是开启 proxy npmjs 模式的

这个意思就是,你向它请求安装的包,假如 Verdaccio 里面没有的话,会去 npmjs 上找,然后返回给用户,同时也放在 Verdaccio 服务器本地缓存下来,这样下次同样的包就会命中缓存。

但是同样,这也会带来一些问题,比如全量代理之后,服务器 SSD 容量够不够大,需不需要定期清理那些用不上的 npm 包的问题。这种看各个团队/运维的需求和能力,所以项目里一般也是分为 2 种方式去使用它。

全量切换

顾名思义,全部的 npm 包都从 Verdaccio 服务器获取。

方式也很简单,只需要在 .npmrc 里添加:

registry=http://0.0.0.0:4873/

然后删掉 lock 文件,重新安装即可

部分切换

显式指明我们自己的包,在 Verdaccio npm 私有仓库中的的完整路径。(指明 tgz 包的版本)

// package.json
{
  "dependencies": {
    "xxx": "http://xxxx"
  }
}

或者,可以在在 .npmrc 里显式指定特定包的特定注册源

xxxx:registry=http://xxxx
# @scoped/xxx
@xxx:registry=http://xxxx

这样我们 package.json 里面就不会出现这种不和谐( http: / npm: / git:)的版本号了。

0

评论区