基于 Docker + Verdaccio 搭建 Npm 私有库,实现在私有库上发布、下载npm包

公司内部前端组件或库的共享等,搭建一个npm私有库就很方便,现在中大型公司也基本都有自己的npm私有库,这篇文章,和大家一起共同搭建一个npm私有库,共同学习~

大家需要一台服务器,npm私有库要求的配置不高,1核2G即可,但是我们会把上传的包映射到服务器本地,推荐硬盘大些。

一、安装 Docker

linux服务器使用curl下载快速安装的shell脚本

curl -fsSL get.docker.com -o get-docker.sh
复制代码

下载完成后,可以ls命令查看一下。已经存在的话,使用sh命令执行这个脚本

sh get-docker.sh
复制代码

注意如果不是root用户,需要使用sudo su获取超级管理员权限。

安装完成后启动一下Docker Server

systemctl start docker
复制代码

使用docker version命令能看到ClientServer就启动成功了。

二、基于 Docker 安装 Verdaccio

1. 配置文件准备

mkdir /home/verdaccio
cd /home/verdaccio
mkdir conf && mkdir storage && mkdir plugins
cd conf
touch htpasswd
vi config.yaml
复制代码

上面的命令,每行都要依次执行下,然后在config.yaml写入配置

# 存放软件所有软件包的目录
storage: ../storage
# 存放所有插件的目录
plugins: ../plugins

web:
  # 网站Title
  title: Verdaccio
  # 禁用Gravatar头像
  # gravatar: false
  # 排序方式 asc|desc
  # sort_packages: asc
  # 是否启用暗黑模式
  # darkMode: true
  # logo地址
  # logo: http://somedomain/somelogo.png
  # favicon地址
  # favicon: http://somedomain/favicon.ico | /path/favicon.ico

# i18n翻译配置
# i18n:
# 可用列表见:https://github.com/verdaccio/ui/tree/master/i18n/translations
#   web: en-US

auth:
  htpasswd:
    file: ./htpasswd
    # 最大注册用户数,默认为 "+inf".
    # 可用通过设置为-1禁止注册
    # max_users: 1000

# 上游npm库,这里可用设置为淘宝
uplinks:
  npmjs:
    url: https://registry.npmjs.org/

packages:
	# 作用域包
  '@*/*':  
    # 允许所有人访问
    access: $all
    # 注册用户可访问
    publish: $authenticated
    # 注册用户可访问
    unpublish: $authenticated
    proxy: npmjs

  '**':
    # 默认情况下所有用户 (包括未授权用户) 都可以查看和发布任意包
    # 你可以指定 用户名/分组名 (取决于你使用什么授权插件,默认的授权插件是内置的 htpasswd)
    # 访问权限有三个关键词: "$all", "$anonymous", "$authenticated"
    # $all 表示不限制,任何人可访问;
    # $anonymous 表示未注册用户可访问;
    # $authenticated 表示只有注册用户可访问
    access: $all

    # 允许所有注册用户发布/撤销已发布的软件包
    # (注意:默认情况下任何人都可以注册)
    publish: $authenticated
    unpublish: $authenticated

    # 如果私有包服务不可用在本地,则会代理请求到'npmjs'
    proxy: npmjs

# 您可以指定传入连接的HTTP /1.1服务器保持活动超时(以秒为单位)。
# 值为0会使http服务器的行为类似于8.0.0之前的Node.js版本,后者没有保持活动超时。
# 解决方法:通过给定的配置可以解决以下问题
server:
  keepAliveTimeout: 60
# 中间件
middlewares:
  audit:
    enabled: true

# 日志设置
logs: { type: stdout, format: pretty, level: http }

# 开放远程访问,允许所有IP
listen:
  - 0.0.0.0:4873
复制代码

2. 一键安装运行 verdaccio

V_PATH=/home/verdaccio; docker run -d -it --name verdaccio \
  -p 4873:4873 \
  -v $V_PATH/conf:/verdaccio/conf \
  -v $V_PATH/storage:/verdaccio/storage \
  -v $V_PATH/plugins:/verdaccio/plugins \
  verdaccio/verdaccio
复制代码

运行成功后就可以通过http://服务器ip:4873访问npm私有库了。

3. 给软件包目录和用户记录文件目录授予权限

这一步必须要做,不然不能新增用户和上传软件包。

chown 10001:65533 /home/verdaccio/conf/htpasswd
chown 10001:65533 /home/verdaccio/storage
chown 10001:65533 /home/verdaccio/plugins
复制代码

三、管理 npm 源、注册用户、发布包

1. npm 源替换为私有库源

$ npm config set registry http://127.0.0.1:4873
复制代码

直接把默认的npm源替换为我们私有库,但是多个源的时候不太好管理。所以推荐使用nrm来管理我们的npm源。

2. nrm 管理 npm 源

# 全局安装nrm
$ npm install -g nrm

# 添加私有库
$ nrm add verdaccio http://{服务器ip}:4873

# 查看现有的npm源
$ nrm ls
* npm -------- https://registry.npmjs.org/
  yarn ------- https://registry.yarnpkg.com/
  cnpm ------- http://r.cnpmjs.org/
  taobao ----- https://registry.npm.taobao.org/
  nj --------- https://registry.nodejitsu.com/
  npmMirror -- https://skimdb.npmjs.com/registry/
  edunpm ----- http://registry.enpmjs.org/
  verdaccio -- http://{服务器ip}:4873/
# 设置npm源
$ nrm use verdaccio
复制代码

3. 注册私有库用户

# 注册用户
$ npm adduser
复制代码

4. 登陆私有库用户

# 登录用户
$ npm login

# 查看当前登录用户
$ npm who am i
复制代码

5. 在私有库发布包

# 发布当前包 
$ npm publish
复制代码

到此,所有的安装,注册用户,发布包流程都已经完成了,各位小伙伴如果有什么问题可以私聊我,或者评论区留言哈。

最后推荐一下我的前端工程相关的其他文章

基于 Docker ( Gitlab、Gitlab Runner ) 搭建一整套自动化CI、CD流程,完成从代码提交到自动打包编译到自动部署运行

前端搭建自己的脚手架(cli),实现公司内部前端工程化

前端工程化之用commintlint + husky实现git提交规范化

猜你喜欢

转载自juejin.im/post/7055478418204262436