前言
随着公司的不断发展,公司内部项目前端架构不断的发展壮大, 为了优化前端架构、降低模块间耦合度、分离公共库, 构建npm私仓进行独立维护就显得格外重要。
本文介绍如何在 Windows 系统下安装 Docker ,部署本地前端私仓 Verdaccio,旨在了解私仓 verdaccio 的搭建以及 Docker 的基本使用。本地私仓搭建完成后也可以当作研究前端工程化的工具,比如 npm 包发布、管理等。
环境准备
详细请看WSL安装根据自己实际情况选择
- 启用适用于 Linux 的 Windows 子系统,管理员身份打开 PowerShell,并执行以下命令
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
- 执行以下命令启用虚拟机功能,然后重新启动计算机,以完成 WSL 安装并更新到 WSL 2
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- 下载 适用于 x64 计算机的 WSL2 Linux 内核更新包并安装
- 将 WSL 2 设置为默认版本(非必须,如果不成功可以忽略)
wsl --set-default-version 2
- 通过 Microsoft Store 安装Ubuntu 18.04 on Windows,也可以在 Microsoft Store选择你偏好的 Linux 分发版。可能下载不下来,也可以选择选择一个版本直接下载
- 如果基于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 | 指定要使用的镜像 |
设置镜像存储地址
docker pull
默认下载在C
盘,如果需要改为其他盘可以按照以下设置
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
,成功即可。
# 安装 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客户端,images列表里已经有 verdaccio/verdaccio 镜像,Containers 列表则会有启动好的 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/
,页面显示如下
发布测试
- 新建一个test项目,初始化 package.json,新增一项 "lib": "index.js"
- 设置 .npmrc 内容 registry=http://127.0.0.1:4873
- 使用 npm login ,使用预设的用户admin,邮箱随便填
- 执行 npm publish
刷新 http://localhost:4873/
页面可以看到 test 已经发布到私仓了
预设的 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/
即可访问成功