前语

跟着公司的不断发展,公司内部项目前端架构不断的发展壮大, 为了优化前端架构、降低模块间耦合度、别离公共库, 构建npm私仓进行独立保护就显得分外重要。

本文介绍如何在 Windows 系统下装置 Docker ,布置本地前端私仓 Verdaccio,旨在了解私仓 verdaccio 的建立以及 Docker 的根本运用。本地私仓建立完结后也能够当作研讨前端工程化的工具,比方 npm 包发布、办理等。

环境准备

详细请看WSL装置根据自己实际情况挑选

  1. 启用适用于 Linux 的 Windows 子系统,办理员身份翻开 PowerShell,并履行以下指令
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
  1. 履行以下指令启用虚拟机功用,然后重新发动计算机,以完结 WSL 装置并更新到 WSL 2
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  1. 下载 适用于 x64 计算机的 WSL2 Linux 内核更新包并装置
  2. 将 WSL 2 设置为默许版别(非有必要,假如不成功能够疏忽)
wsl --set-default-version 2
  1. 经过 Microsoft Store 装置Ubuntu 18.04 on Windows,也能够在Microsoft Store挑选你偏好的 Linux 分发版。可能下载不下来,也能够挑选挑选一个版别直接下载
  2. 假如根据Microsoft Store的装置完结后发动 Ubuntu 报 服务尚未发动,能够找个地方解压直接运转 .exe 文件

装置 Docker

下载适用于 Windows的 Docker 桌面装置即可,详细的请参考 在 Windows 上装置 Docker 桌面

Mac 用户看这篇在 Mac 上装置 Docker 桌面

装置完结后点击图标即可运转客户端,可履行以下指令后台运转一个容器

docker run -d -p 80:80 docker/getting-started
参数 说明
-d 以别离模式(在后台)运转容器。
-p 80:80 将主机的 80 端口映射到容器中的 80 端口
docker/getting-started 指定要运用的镜像

Verdaccio

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

详细介绍请移步查看Verdaccio 文档

装置 Verdaccio

Verdaccio 能够运用 npm 装置运用,Node版别要12+,办法如下:

# npm装置 verdaccio
$ npm install -g verdaccio
# 发动 verdaccio
$ verdaccio or pm2 start verdaccio

Verdaccio 默许端口号是4873,运用浏览器拜访http://127.0.0.1:4873,成功即可。

在 Docker 中运用 Verdaccio

# 装置 Verdaccio,:latest表示下载最新版镜像
$ docker pull verdaccio/verdaccio:latest
# 运转 verdaccio 容器
$ docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio

同样运用浏览器拜访http://127.0.0.1:4873,成功即可,成功页面如下:

Docker 部署npm私仓 Verdaccio

此刻翻开Docker客户端,images列表里现已有 verdaccio/verdaccio 镜像,Containers 列表则会有发动好的 verdaccio 容器,也能够在客户端发动容器。

Verdaccio 装备

Verdaccio装备攻略

常用装备详解

# 包的保存路径
storage: /verdaccio/storage/data
# 插件保存路径
plugins: /verdaccio/plugins
# verdaccio网页装备,https://verdaccio.org/docs/webui
web:
  title: 网页标题
# verdaccio默许是中文,能够装备为中文
i18n:
   web: zh-CN
# 用户装备, 
auth:
  htpasswd:
    file: /verdaccio/storage/htpasswd
    # 允许用户注册数量。默许1000,设置-1时,禁用 npm adduser 注册,只能修正 file 文件增加用户,一般用来办理私仓权限的。
    max_users:1000 
# npm包对应源装备
uplinks:
  npmjs:
    url: https://registry.npmjs.org/
  yarn: 
    url: https://registry.yarnpkg.com/
  taobao:
    url: https://registry.npm.taobao.org/
# 包的相关装备
packages:
  # 匹配包名正则,默许有两个 */* 和 @*/*
  '*/*':
    # 拜访权限, 权限分为"$all"(所有用户), "$anonymous"(匿名用户), "$authenticated"(认证用户),指定 htpasswd 用户(多个用户用空格隔开)
    access: $all
    # 发布权限
    publish: $authenticated
    # 删去权限
    unpublish: $authenticated
    # 署理,当本地没有对应资源时,拜访署理地址拉取并缓存到本地
    proxy: taobao
# 服务端相关的装备
server:
  keepAliveTimeout: 60
# 中间件相关装备,默许有`auit`中间件以支撑`npm audit`指令
middlewares:
  audit:
    enabled: true
# log 装备
logs: { type: stdout, format: pretty, level: http }
# 通知, https://verdaccio.org/docs/configuration#notifications
# notify:
#   method: POST
#   headers: [{ "Content-Type": "application/json" }]
#   endpoint: https://usagge.hipchat.com/v2/room/3729485/notification?auth_token=mySecretToken
#   content: '{"color":"green","message":"New package published: * {{ name }}*","notify":true,"message_format":"text"}'

修正了装备文件后,可运转以下指令使装备收效

verdaccio -c config.yml

用户办理

运用 npm adduser 指令注册新用户,根据提示输入用户名、暗码和邮箱即可

npm adduser --registry http://127.0.0.1:4873

当需要操控发布权限时,可能需要制止 npm adduser 指令注册新用户,由私仓办理者手动修正用户装备文件直接修正或新增用户,暗码能够经过 htpasswd 网站生成格局如下,多个每个用户一行

user_name1:{SHA}m8NFSdVl2VBbKH3gzSCsd74dPyw=
user_name2:{SHA}cizaB/pF+lQDdssrMoTEL/nA3Lc=

假如有 LDAP 需求能够运用 verdaccio-ldap 插件

宿主机目录映射

为了防止意外(容器内容无法找回),以及修正装备(新增用户等)的方便能够将容器内 Verdaccio 的工作目录映射到宿主机上

比方映射到 D盘的 /docker-data/verdaccio 目录下,先在D盘新建 /docker-data/verdaccio 文件夹,然后在verdaccio文件夹下新建如下文件夹(其他目录如有需要也能够装备):

  • storage,这儿寄存npm包
  • plugins,这儿寄存插件
  • conf,预设 config.yaml 文件
  • auth,预设用户 htpasswd 文件

然后运用以下指令

# 发动容器 verdaccio
docker run -it --name verdaccio -v /D/docker-data/verdaccio:/verdaccio -p 4873:4873 verdaccio/verdaccio:latest
# --rm 相当于在容器退出后,履行docker rm -v
docker run -it --rm --name verdaccio -v /D/docker-data/verdaccio:/verdaccio -p 4873:4873 verdaccio/verdaccio:latest
# 假如包和插件也需要映射的化需要增加映射目录
docker run -it --name verdaccio -v /D/docker-data/verdaccio:/verdaccio -v /D/docker-data/verdaccio/storage:/verdaccio/storage -v /D/docker-data/verdaccio/plugins:/verdaccio/plugins -p 4873:4873 verdaccio/verdaccio:latest

是否运用 –rm 根据需要挑选

此刻拜访 http://localhost:4873/,页面显示如下

Docker 部署npm私仓 Verdaccio

发布测试

  • 新建一个test项目,初始化 package.json,新增一项 “lib”: “index.js”
  • 设置 .npmrc 内容 registry=http://127.0.0.1:4873
  • 运用 npm login ,运用预设的用户admin,邮箱随意填
  • 履行 npm publish

刷新 http://localhost:4873/ 页面能够看到 test 现已发布到私仓了

Docker 部署npm私仓 Verdaccio

预设的 htpasswd

admin:{SHA}fEqNCco3Yq9h5ZUglD3CZJT4lBs=
test:{SHA}fEqNCco3Yq9h5ZUglD3CZJT4lBs=

预设了 admin 和 test 两个用户,暗码是加密后的 123456

预设的 config.yaml

storage: /verdaccio/storage
plugins: /verdaccio/plugins
web:
  title: 私仓
auth:
  htpasswd:
    file: /verdaccio/auth/htpasswd
    max_users: -1
uplinks:
  cnpmjs:
    url: http://registry.npm.taobao.org/
  npmjs:
    url: https://registry.npmjs.org/
packages:
  "@*/*":
    access: $all
    publish: admin
    unpublish: admin
    proxy: cnpmjs
  "**":
    access: $all
    publish: admin
    unpublish: admin
    proxy: cnpmjs
server:
  keepAliveTimeout: 60
middlewares:
  audit:
    enabled: true
logs: { type: stdout, format: pretty, level: http }
i18n:
  web: zh-CN

windows下域名装备

首先发动指令需要增加域名信息,一般来讲运用域名的话用80端口,所以发动指令改为如下,ip替换为你的即可

docker run --rm -it --name test --add-host=verdaccio.docker.com:ip -v /D/docker-data/verdaccio:/verdaccio -p 80:4873 verdaccio/verdaccio:latest

要在 C:\Windows\System32\drivers\etc 下hosts文件增加

127.0.0.1 verdaccio.docker.com

运转发动指令,网页输入 http://verdaccio.docker.com/ 即可拜访成功

Docker 部署npm私仓 Verdaccio