配置文件
此文件是 Verdaccio 的重要部分, 您可以在其中修改默认行为, 启用插件并扩展功能。
首次运行 Verdaccio
时会自动生成默认的配置文件 config.yaml
。
默认配置
默认配置支持 私有(scoped) 包,并允许所有用户 访问 所有包,但只有已登陆用户才能 发布。
storage: ./storage
auth:
htpasswd:
file: ./htpasswd
uplinks:
npmjs:
url: https://registry.npmjs.org/
packages:
'@*/*':
access: $all
publish: $authenticated
proxy: npmjs
'**':
proxy: npmjs
log: { type: stdout, format: pretty, level: http }
章节
以下各章节解释了每个属性的含义以及不同的选项。
存储
是默认的存储方式。 Verdaccio 默认使用内置本地文件模式存储 。
storage: ./storage
V5.6.0 发布:环境变量
VERDACCIO_STORAGE_PATH
可用于替换存储的位置(仅适用于默认存储,不适用于插件,除非它独立实现)。
.verdaccio-db
数据库
微型数据库用于存储用户发布的私有包。 该数据库基于 JSON 文件,其中包含已发布的私有包列表以及用于令牌签名的秘密令牌。 首次启动应用程序时会自动创建。
数据库的位置基于 config.yaml
文件夹位置,例如:
如果 config.yaml
位于 /some_local_path/config.yaml
,则数据库将在 /some_local_path/storage/.verdaccio-db
中创建。
.verdaccio-db
文件数据库只有在用户不使用自定义存储时可用,默认情况下,verdaccio 使用一个小型数据库来存储私有软件包,storage
属性定义在 config.yaml
文件中。 根据操作系统的不同,位置可能会有所变化。 阅读 CLI 部分 以获取有关文件位置的更多详细信息。
数据库的结构基于 JSON 文件,例如:
{
"list": ["package1", "@scope/pkg2"],
"secret": "secret_token_32_characters_long"
}
list
: 是一个数组,包含已发布的私有包的列表,这个列表上的任何项目都被认为是由用户发布的。secret
:secret 字段用于令牌签名和验证,适用于 JWT 或 legacy 令牌签名。
插件
插件目录的位置。 对于基于 Docker/Kubernetes 的部署很有用。
plugins: ./plugins
认证
在这里进行身份验证设置。 默认认证基于 htpasswd
,并且是内置的。 你可以通过插件来修改这一行为。 有关此部分的更多信息,请阅读授权页面。
auth:
htpasswd:
file: ./htpasswd
max_users: 1000
Token 签名
默认令牌签名基于高级加密标准 (AES),其算法为 aes-256-ctr
,称为legacy。 值得注意的是,legacy 的 token 没有设计过期机制。 如果需要过期功能,建议使用 JSON Web Tokens (JWT)。
安全
安全配置允许使用两个选项自定义令牌签名。 配置分为两个部分:api
和 web
。 api
上使用 JWT 时,(api)必须定义;否则,将使用 legacy 令牌签名 (aes-256-ctr
)。
token 是如何生成的?
令牌签名需要由创建 .verdaccio-db
数据库的自定义插件生成的秘密令牌,或者在使用自定义存储的情况下,秘密令牌是从插件实现本身获取的。 无论如何,启动应用程序都需要秘密令牌。
Legacy 令牌签名
legacy
属性用于启用旧令牌签名。 默认情况下启用。 Legacy 功能仅应用于 API,Web UI 默认使用 JWT。
security:
api:
legacy: true # 默认情况下为 true,即使此部分未定义
JWT 令牌签名
要启用新的 JWT(JSON Web令牌) 签名,需要将 jwt
块添加到 api
部分; web
中默认使用 jwt
。
通过使用 JWT 签名,还可以使用自己的属性来自定义签名和令牌验证。
security:
api:
jwt:
sign:
expiresIn: 29d
verify:
someProp: [value]
web:
sign:
expiresIn: 1h # 1 hour by default
verify:
someProp: [value]
服务器
一组用于修改服务器应用程序行为的属性,特别是 API(Express.js)。
你可以为传入连接指定 HTTP/1.1 服务器 Keep-Alive 超时时间(以秒为单位)。 值 0 使 http 服务器的行为与 8.0.0 之前的 Node.js 版本类似,后者没有 Keep-Alive 超时时间。 解决方法:通过给定的配置,您可以解决以下问题 https://github.com/verdaccio/verdaccio/issues/301。 如果 60 不够,则设置为 0。
server:
keepAliveTimeout: 60
Web UI
此属性允许您修改 Web UI 的外观。 有关本节的更多信息,请阅读 web UI 页面。
web:
enable: true
title: Verdaccio
logo: logo.png
scope:
上行链路
当这些包在本地不可用时,上行链路增加了从远程注册表获取包的功能。 有关本节的更多信息,请阅读上行链接页面。
uplinks:
npmjs:
url: https://registry.npmjs.org/
软件包
本部分允许您控制软件包的访问方式。 有关本部分的更多信息,请阅读 软件包页面。
packages:
'@*/*':
access: $all
publish: $authenticated
proxy: npmjs
高级设置
离线发布
默认情况下,verdaccio
不允许你在客户端离线时发布软件包。 可以通过将此值设置为 true 来覆盖此设置。
publish:
allow_offline: false
检查包所有权
默认情况下,package access定义允许谁发布和取消发布程序包。 通过将 check_owners
设置为 true,仅允许程序包所有者对程序包进行更改。 包的第一所有者是发布第一个版本的用户。 可以使用 npm owner
添加或删除更多所有者。 您可以使用 npm owner list
或通过检查包清单下的 maintainers
来查找当前所有者的列表。
publish:
check_owners: false
verdaccio@2.3.6
due #223URL 前缀
该前缀用于服务器在代理之后运行时使用,如果在没有反向代理的情况下使用,则无法正常工作,请查看 反向代理设置 页面了解更多详细信息。
内部逻辑正确构建了公共 URL,验证了 host
标头和错误的 url_prefix
。
例如:url_prefix: /verdaccio
, url_prefix: verdaccio/
, url_prefix: verdaccio
将转换为 /verdaccio/
url_prefix: /verdaccio/
新的 VERDACCIO_PUBLIC_URL
用于代理后,该变量将用于:
- 用作提供 UI 资源(js、favicon 等)的基本路径
- 用于返回元数据
dist
基本路径 - 忽略
host
和X-Forwarded-Proto
请求头 - 如果定义了
url_prefix
,则会将其附加到环境变量中。
VERDACCIO_PUBLIC_URL='https://somedomain.org';
url_prefix: '/my_prefix'
// url -> https://somedomain.org/my_prefix/
VERDACCIO_PUBLIC_URL='https://somedomain.org';
url_prefix: '/'
// url -> https://somedomain.org/
VERDACCIO_PUBLIC_URL='https://somedomain.org/first_prefix';
url_prefix: '/second_prefix'
// url -> https://somedomain.org/second_prefix/'
User Agent
自 verdaccio@5.4.0`默认情况下,用户代理是禁用的,作为交换,用户代理客户端信息(包管理器、浏览器等)被直接透传到远程服务器。 要启用以前的行为,请使用布尔值。
user_agent: true
user_agent: false
user_agent: 'custom user agent'
用户速率限制
自: `verdaccio@5.4.0` [#](https://github.com/verdaccio/verdaccio/releases/tag/v5.4.0)为用户端 npm token
、npm profile
、npm login/adduser
和登录网站设置默认请求速率限制,以每 15 分钟限制 100 个请求为例,可通过以下方式定制:
userRateLimit:
windowMs: 50000
max: 1000
还可以通过中间件文档进行其他配置(仅限功能标志)。
最大请求体大小
默认情况下,JSON 文档的最大请求体大小为 10mb
,如果遇到提示"request entity too large"
的错误,你可以增加该值的大小。
max_body_size: 10mb
监听端口
verdaccio
默认在端口 4873
上运行。 可以通过 CLI 或在配置文件中更改端口。 以下选项是有效的:
listen:
# - localhost:4873 # default value
# - http://localhost:4873 # same thing
# - 0.0.0.0:4873 # listen on all addresses (INADDR_ANY)
# - https://example.org:4873 # if you want to use https
# - "[::1]:4873" # ipv6
# - unix:/tmp/verdaccio.sock # unix socket
HTTPS
要在 verdaccio
启用 https
,只要用 https:// 协议来设置 listen
标志。 如需了解更多信息,请阅读文档中的 SSL 部分
https:
key: ./path/verdaccio-key.pem
cert: ./path/verdaccio-cert.pem
ca: ./path/verdaccio-csr.pem
代理
代理是特殊用途的 HTTP 服务器,用于将数据从远程服务器传输到本地客户机。
http_proxy 和 https_proxy
如果你的网络中有一个代理,你可以使用以下属性设置 X-Forwarded-For
报头:
http_proxy: http://something.local/
https_proxy: https://something.local/
no_proxy
此变量应包含一个逗号分隔的不应用于代理的域扩展列表。
no_proxy: localhost,127.0.0.1
通知
通过 webhook 启用对第三方工具的通知相当容易。 有关此部分的更多信息,请阅读通知页面。
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"}'
如需了解更详细的配置设置,请查看源代码。
日志
支持两种记录器类型,您可以只选择其中一种:
控制台输出 (默认)
log: { type: stdout, format: pretty, level: http }
文件输出
log: { type: file, path: verdaccio.log, level: info }
有关完整信息-请参阅此处:Features/logger
Audit
自 verdaccio@3.0.0`npm audit
是随 npm 6.x 发布的一项新命令。 Verdaccio 包含一个内置中间件插件来处理此命令。
使用新的安装方式会默认包含这个中间件,否则你需要添加下面这些属性到你的配置文件中
middlewares:
audit:
enabled: true
# timeout: 10000
实验性
此版本包含一个名为 experiments
的新属性,可以放置在 config.yaml
中,并且完全是可选的
我们希望能够在不影响生产环境的情况下发布新特性。 此标志允许我们添加新功能并从决定使用它们的社区获得反馈。
此标志下的功能可能不稳定或者可能会在未来的版本中被删除。
以下是一个例子:
experiments:
changePassword: false
要禁用控制台中的实验警告,你必须注释掉整个
实验
部分。
配置生成器 API
在v5.23.1
版本之后,新的高级配置构建器 API 可用。 该 API 是一种灵活的方式,可以使用构建器模式以 JSON 或 YAML 形式以编程方式生成配置输出,例如:
import { ConfigBuilder } from 'verdaccio';
const config = ConfigBuilder.build();
config
.addUplink('upstream', { url: 'https://registry.upstream.local' })
.addUplink('upstream2', { url: 'https://registry.upstream2.local' })
.addPackageAccess('upstream/*', {
access: 'public',
publish: 'foo, bar',
unpublish: 'foo, bar',
proxy: 'some',
})
.addLogger({ level: 'info', type: 'stdout', format: 'json' })
.addStorage('/tmp/verdaccio')
.addSecurity({ api: { legacy: true } });
// generate JSON object as output
config.getConfig();
// generate output as yaml
config.getAsYaml();