使用docker verdaccio搭建前端NPM私服
东北小麦客 2024-03-16 DockerVerdaccioNPM私服
参考资料
# docker-compose.yaml
version: '3'
services:
verdaccio:
image: verdaccio/verdaccio
container_name: "verdaccio"
environment:
- VERDACCIO_PORT=4873
ports:
- "4873:4873"
volumes:
- "/var/verdaccio/conf:/verdaccio/conf"
- "/var/verdaccio/storage:/verdaccio/storage"
- "/var/verdaccio/plugins:/verdaccio/plugins"
# Tips:
verdaccio/verdaccio
镜像版本6.1.2
, 镜像版本tagb98c7fd42246
由于私仓管理者可以通过手动修改用户配置文件直接修改或新增用户,密码格式可以通过 htpasswd 网站生成,一行表示一个用户
# 需要先创建的文件夹及文件
verdaccio
- conf 文件夹
config.yaml
htpasswd
(touch htpasswd
)
- storage 文件夹
- plugins 文件夹
# config.yaml
#
# This is the config file used for the docker images.
# It allows all users to do anything, so don't use it on production systems.
# path to a directory with all packages
# 包存放的位置,包括从上游下载的和私有上传的
storage: /verdaccio/storage
# 存放所有插件的目录
plugins: /verdaccio/plugins
web:
# 网站Title
title: xmk私服 # 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: /verdaccio/conf/htpasswd
# 允许用户注册的数量,默认1000,设为-1时,不允许用户通过npm adduser注册。但是可以通过直接编写htpasswd file内容的方式添加用户
max_users: 100 # 最多可以注册 100 个用户
# hash 算法,选项可以是 "bcrypt", "md5", "sha1", "crypt",默认 crypt
# algorithm: bcrypt
# “bcrypt”的轮数,对于其他算法将被忽略,值设的越高,验证所需时间越久,大于 10 时 CPU 使用率显著增加,并在处理请求时产生额外的延迟
# rounds: 10
# 如果密码的验证时间超过此持续时间(以毫秒为单位),则记录警告
# slow_verify_ms: 200
# 上游npm库,可以设置多个
uplinks:
npmjs:
url: https://registry.npmjs.org/
taobao:
url: https://registry.npmmirror.com/
packages:
# 作用域包
'@*/*':
# 允许所有人访问
access: $all
# 注册用户可访问
publish: $authenticated
# 注册用户可删除
unpublish: $authenticated
proxy: npmjs
'**':
# 默认情况下所有用户 (包括未授权用户) 都可以查看和发布任意包
# 你可以指定 用户名/分组名 (取决于你使用什么授权插件,默认的授权插件是内置的 htpasswd)
# 访问权限有三个关键词: "$all", "$anonymous", "$authenticated"
# $all 表示不限制,任何人可访问;
# $anonymous 表示未注册用户可访问;
# $authenticated 表示只有注册用户可访问
access: $all
# 允许所有注册用户发布/撤销已发布的软件包
# (注意:默认情况下任何人都可以注册)
publish: $authenticated
unpublish: $authenticated
# 如果私有包服务不可用在本地,则会代理请求到'npmjs'
# proxy 可以有多个值,多个值用空格分开
proxy: taobao 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 }
# 调整宿主机verdaccio下相关文件夹及文件的权限
用户在新增 npm 用户的时候会写入 htpasswd 文件,由于该文件是在宿主机中,默认是 root 用户建立的,但是在 verdaccio 容器中拥有自己的用户名,名字就叫 verdaccio,所以无法写入 root 用户拥有的文件。
同样在用户上传组件时, storage 的文件夹默认是 root 用户建立的,verdaccio,所以无法对storage 的文件夹成功写入、创建相关文件及文件夹
参考资料
# 在 verdaccio/conf 目录下运行
chown 10001:65533 htpasswd
# 在verdaccio 目录下运行
chown -R 10001:65533 storage
# 效果
# 项目demo附件
# 关于npm
私库的相关操作
# 添加 npm 私库的账号
pnpm adduser --registry http://xiaomaike.space:4873/
# 登录 npm 私库
pnpm login --registry http://xiaomaike.space:4873/
# 退出 npm 私库
pnpm logout --registry http://xiaomaike.space:4873/
# 发布相关组件到 npm 私库
npm publish --registry http://xiaomaike.space:4873/
# 将 npm 私库中某个组件版本设置为弃用
npm deprecate @xmk/component@0.0.1 "启用 0.0.1版本" --registry http://xiaomaike.space:4873/
# !!!删除 npm 私库中某个组件(慎用!!!)
npm unpublish @xmk/component --force --registry http://xiaomaike.space:4873/
# 安装 npm 私库的某个组件
npm install @xmk/component --registry http://xiaomaike.space:4873/