私有NPM仓库Verdaccio轻量级持续集成部署方案有哪些?

2026-05-25 13:131阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1409个文字,预计阅读时间需要6分钟。

私有NPM仓库Verdaccio轻量级持续集成部署方案有哪些?

提示:本系列笔记全部存于Github,可直接在Github查看全部笔记。对于个人来说,私有NPM仓库功能基本不大,但对于企业,私有NPM仓库可保护代码,意义重大。

提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记

对于个人来说,私有NPM仓库 作用性基本很小,但是对于企业,私有NPM仓库 可以保护代码暴露,具有很大的意义。

也是为了学习搭建 私有NPM仓库,就在持续部署中集成了私有仓库。

开源社区,有两个广泛使用的 私有NPM仓库 项目:

  1. Sinopia
  2. Verdaccio

Sinopia 项目官方于2019年已经不再维护,也就是现在已经不在推荐使用此项目。

Verdaccio 项目是从 Sinopia项目 fork 出来的,官方声称 100% 向后兼容 Sinopia

Verdaccio 目前也就成了最普遍的 私有NPM仓库 的解决方案。

Verdaccio Verdaccio 概述

Verdaccio 是一个 Node 创建的轻量的私有 npm proxy registry

Verdaccio 中最强大的两个功能是 上行链路包身份权限

Verdaccio 部署 Docker Compose 文件

VerdaccioDocker Compose 文件比较简单,主要是配置数据挂载

version: '3.9' services: verdaccio: image: verdaccio/verdaccio:5.5 container_name: verdaccio restart: always ports: - '4873:4873' volumes: - /volumes/verdaccio/conf:/verdaccio/conf - /volumes/verdaccio/storage:/verdaccio/storage - /volumes/verdaccio/plugins:/verdaccio/plugins config.yaml

Verdaccio 项目提供了一个配置文件: config.yaml

默认情况下 Verdaccio 会在首次运行时创建此文件。

私有NPM仓库Verdaccio轻量级持续集成部署方案有哪些?

但因为使用了 宿主目录 挂载数据,所以需要预先创建此文件。

# 包存储地址 storage: /verdaccio/storage # 插件存储地址 plugins: /verdaccio/plugins # UI相关信息 web: enable: true # 开启 Web 页面 title: Verdaccio # Web 页面标题 # 身份认证 auth: htpasswd: # 默认情况下使用的 htpasswd 插件作为身份认证 file: /verdaccio/conf/htpasswd # htpasswd 文件为加密认证信息文件 max_users: -1 # 最大用户数量, -1 表示禁用新用户注册 # 上行链路 uplinks: npmjs: # 上行名称,随便定义 url: registry.npmjs.org/ # 上行地址 timeout: 30s # 超时时间 taobao: # 上行名称 url: registry.npm.taobao.org/ # 上行地址 timeout: 30s # 包访问设置, 可以根据名称对包做不同权限设置 packages: '@*/*': access: $authenticated # 登录用户才允许访问 publish: $authenticated # 登录用户才允许发布 proxy: taobao # 代理上行链路地址 '**': access: $authenticated # 登录用户才允许访问 publish: $authenticated # 登录用户才允许发布 proxy: taobao # 代理上行链路地址 server: keepAliveTimeout: 30 # 服务器保持活动链接的时间,较大的包可能会消耗一定时间,此属性就是设置活动链接时间 middlewares: audit: enabled: true # 日志 logs: { type: stdout, format: pretty, level: registry.npmjs.org/ # 上行地址 timeout: 30s # 超时时间 taobao: # 上行名称 url: registry.npm.taobao.org/ # 上行地址 timeout: 30s # 包访问设置, 可以根据名称对包做不同权限设置 packages: '@*/*': access: $authenticated # 登录用户才允许访问 publish: $authenticated # 登录用户才允许发布 proxy: taobao # 代理上行链路地址 '**': access: $authenticated # 登录用户才允许访问 publish: $authenticated # 登录用户才允许发布 proxy: taobao # 代理上行链路地址 server: keepAliveTimeout: 30 # 服务器保持活动链接的时间,较大的包可能会消耗一定时间,此属性就是设置活动链接时间 middlewares: audit: enabled: true # 日志 logs: { type: stdout, format: pretty, level: 10.0.24.12:4873; } location ~ ^/verdaccio/(.*)$ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_set_header X-NginX-Proxy true; proxy_redirect off; proxy_pass 10.0.24.12:4873/$1; } }

重启 网关服务 和 Verdaccio 容器

docker exec -it gateway nginx -s reload

Drone 配置私有 NPM 仓库

Drone 持续部署中集成 Verdaccio 仓库,需要在执行时登录 仓库。

NPM 会将登录凭证存储在 .npmrc 文件中。

也就是需要一个插件执行登录操作,并将登录凭证写入 .npmrc 文件

Drone 社区中提供了一个这样的镜像插件:robertstettner/drone-npm-auth

kind: pipeline # 定义一个管道 type: docker # 定义管道类型 name: build # 定义管道名称 volumes: # 声明数据卷 - name: node_modules # 数据卷名称 host: # Host Volume path: /volumes/drone/volumes/web/node_modules # 宿主机目录 clone: disable: false # 启用代码拉取 steps: # 生成版本号标签 - name: build-tags image: yxs970707/drone-web-tags # 使用镜像 depends_on: [clone] # 依赖的步骤, settings: tags: - latest # 私有 NPM 仓库登录 - name: npm-login image: robertstettner/drone-npm-auth settings: registry: npm.mwjz.live/ username: from_secret: npm_username password: from_secret: npm_password email: from_secret: npm_email # 编译项目 - name: build-project # 步骤名称 image: node:16.13.2 # 使用镜像 depends_on: [npm-login] # 依赖的步骤, volumes: # 挂载数据卷 - name: node_modules # 数据卷名称 path: /drone/src/node_modules # 容器内目录 commands: # 执行命令 - npm config set registry npm.mwjz.live/ - npm config get - npm install # 安装node_modules包 - npm run build # 执行编译 # 打包Docker镜像 - name: build-image # 步骤名称 image: plugins/docker # 使用镜像 depends_on: [build-tags, build-project] # 依赖步骤 settings: # 当前设置 username: # 账号名称 from_secret: docker_username password: # 账号密码 from_secret: docker_password dockerfile: deploy/Dockerfile # Dockerfile地址, 注意是相对地址 registry: docker.mwjz.live # 私有镜像仓库地址 repo: docker.mwjz.live/mwjz/deploy-web-demo # 镜像名称

可以将Dronenode_modules 缓存清除,然后提交测试

本文共计1409个文字,预计阅读时间需要6分钟。

私有NPM仓库Verdaccio轻量级持续集成部署方案有哪些?

提示:本系列笔记全部存于Github,可直接在Github查看全部笔记。对于个人来说,私有NPM仓库功能基本不大,但对于企业,私有NPM仓库可保护代码,意义重大。

提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记

对于个人来说,私有NPM仓库 作用性基本很小,但是对于企业,私有NPM仓库 可以保护代码暴露,具有很大的意义。

也是为了学习搭建 私有NPM仓库,就在持续部署中集成了私有仓库。

开源社区,有两个广泛使用的 私有NPM仓库 项目:

  1. Sinopia
  2. Verdaccio

Sinopia 项目官方于2019年已经不再维护,也就是现在已经不在推荐使用此项目。

Verdaccio 项目是从 Sinopia项目 fork 出来的,官方声称 100% 向后兼容 Sinopia

Verdaccio 目前也就成了最普遍的 私有NPM仓库 的解决方案。

Verdaccio Verdaccio 概述

Verdaccio 是一个 Node 创建的轻量的私有 npm proxy registry

Verdaccio 中最强大的两个功能是 上行链路包身份权限

Verdaccio 部署 Docker Compose 文件

VerdaccioDocker Compose 文件比较简单,主要是配置数据挂载

version: '3.9' services: verdaccio: image: verdaccio/verdaccio:5.5 container_name: verdaccio restart: always ports: - '4873:4873' volumes: - /volumes/verdaccio/conf:/verdaccio/conf - /volumes/verdaccio/storage:/verdaccio/storage - /volumes/verdaccio/plugins:/verdaccio/plugins config.yaml

Verdaccio 项目提供了一个配置文件: config.yaml

默认情况下 Verdaccio 会在首次运行时创建此文件。

私有NPM仓库Verdaccio轻量级持续集成部署方案有哪些?

但因为使用了 宿主目录 挂载数据,所以需要预先创建此文件。

# 包存储地址 storage: /verdaccio/storage # 插件存储地址 plugins: /verdaccio/plugins # UI相关信息 web: enable: true # 开启 Web 页面 title: Verdaccio # Web 页面标题 # 身份认证 auth: htpasswd: # 默认情况下使用的 htpasswd 插件作为身份认证 file: /verdaccio/conf/htpasswd # htpasswd 文件为加密认证信息文件 max_users: -1 # 最大用户数量, -1 表示禁用新用户注册 # 上行链路 uplinks: npmjs: # 上行名称,随便定义 url: registry.npmjs.org/ # 上行地址 timeout: 30s # 超时时间 taobao: # 上行名称 url: registry.npm.taobao.org/ # 上行地址 timeout: 30s # 包访问设置, 可以根据名称对包做不同权限设置 packages: '@*/*': access: $authenticated # 登录用户才允许访问 publish: $authenticated # 登录用户才允许发布 proxy: taobao # 代理上行链路地址 '**': access: $authenticated # 登录用户才允许访问 publish: $authenticated # 登录用户才允许发布 proxy: taobao # 代理上行链路地址 server: keepAliveTimeout: 30 # 服务器保持活动链接的时间,较大的包可能会消耗一定时间,此属性就是设置活动链接时间 middlewares: audit: enabled: true # 日志 logs: { type: stdout, format: pretty, level: registry.npmjs.org/ # 上行地址 timeout: 30s # 超时时间 taobao: # 上行名称 url: registry.npm.taobao.org/ # 上行地址 timeout: 30s # 包访问设置, 可以根据名称对包做不同权限设置 packages: '@*/*': access: $authenticated # 登录用户才允许访问 publish: $authenticated # 登录用户才允许发布 proxy: taobao # 代理上行链路地址 '**': access: $authenticated # 登录用户才允许访问 publish: $authenticated # 登录用户才允许发布 proxy: taobao # 代理上行链路地址 server: keepAliveTimeout: 30 # 服务器保持活动链接的时间,较大的包可能会消耗一定时间,此属性就是设置活动链接时间 middlewares: audit: enabled: true # 日志 logs: { type: stdout, format: pretty, level: 10.0.24.12:4873; } location ~ ^/verdaccio/(.*)$ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_set_header X-NginX-Proxy true; proxy_redirect off; proxy_pass 10.0.24.12:4873/$1; } }

重启 网关服务 和 Verdaccio 容器

docker exec -it gateway nginx -s reload

Drone 配置私有 NPM 仓库

Drone 持续部署中集成 Verdaccio 仓库,需要在执行时登录 仓库。

NPM 会将登录凭证存储在 .npmrc 文件中。

也就是需要一个插件执行登录操作,并将登录凭证写入 .npmrc 文件

Drone 社区中提供了一个这样的镜像插件:robertstettner/drone-npm-auth

kind: pipeline # 定义一个管道 type: docker # 定义管道类型 name: build # 定义管道名称 volumes: # 声明数据卷 - name: node_modules # 数据卷名称 host: # Host Volume path: /volumes/drone/volumes/web/node_modules # 宿主机目录 clone: disable: false # 启用代码拉取 steps: # 生成版本号标签 - name: build-tags image: yxs970707/drone-web-tags # 使用镜像 depends_on: [clone] # 依赖的步骤, settings: tags: - latest # 私有 NPM 仓库登录 - name: npm-login image: robertstettner/drone-npm-auth settings: registry: npm.mwjz.live/ username: from_secret: npm_username password: from_secret: npm_password email: from_secret: npm_email # 编译项目 - name: build-project # 步骤名称 image: node:16.13.2 # 使用镜像 depends_on: [npm-login] # 依赖的步骤, volumes: # 挂载数据卷 - name: node_modules # 数据卷名称 path: /drone/src/node_modules # 容器内目录 commands: # 执行命令 - npm config set registry npm.mwjz.live/ - npm config get - npm install # 安装node_modules包 - npm run build # 执行编译 # 打包Docker镜像 - name: build-image # 步骤名称 image: plugins/docker # 使用镜像 depends_on: [build-tags, build-project] # 依赖步骤 settings: # 当前设置 username: # 账号名称 from_secret: docker_username password: # 账号密码 from_secret: docker_password dockerfile: deploy/Dockerfile # Dockerfile地址, 注意是相对地址 registry: docker.mwjz.live # 私有镜像仓库地址 repo: docker.mwjz.live/mwjz/deploy-web-demo # 镜像名称

可以将Dronenode_modules 缓存清除,然后提交测试