配置文件
此文件是 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
高级设置
离线发布
By default Verdaccio does not allow you to publish packages when the client is offline. 可以通过将此值设置为 true 来覆盖此设置。
publish:
allow_offline: false
verdaccio@2.3.6
due #223
Checking Package Ownership
默认情况下,package access定义允许谁发布和取消发布程序包。 通过将 check_owners
设置为 true,仅允许程序包所有者对程序包进行更改。 包的第一所有者是发布第一个版本的用户。 可以使用 npm owner
添加或删除更多所有者。 您可以使用 npm owner list
或通过检查包清单下的 maintainers
来查找当前所有者的列表。
publish:
check_owners: false
Keep Readmes
By default, Verdaccio stores only the readme markdown of the latest version for each package. Setting keep_readmes
to 'tagged'
keeps the readmes of versions with dist-tags
(for example, latest
, next
, and major branches). Using the 'all'
setting will retain the complete history of readme versions. Note that 'all'
can significantly increase the required storage space for packages published to Verdaccio!
publish:
keep_readmes: 'tagged'
URL 前缀
该前缀用于服务器在代理之后运行时使用,如果在没有反向代理的情况下使用,则无法正常工作,请查看 反向代理设置 页面了解更多详细信息。
内部逻辑正确构建了公共 URL,验证了 host
标头和错误的 url_prefix
。
例如:url_prefix: /verdaccio
, url_prefix: verdaccio/
, url_prefix: verdaccio
将转换为 /verdaccio/
url_prefix: /verdaccio/
新的 VERDACCIO_PUBLIC_URL
用于代理后,该变量将用于:
- 用作提供 UI 资源(js、favicon 等)的基本路径
- 用于返回元数据
dist
基本路径