7 KiB
id | title |
---|---|
mellor | Mellores prácticas |
A seguinte guía é unha lista das mellores prácticas recollidas e que normalmente recomendamos a todos os usuarios. Non tome esta guía como obrigatorio, pode escoller algúns deles segundo as súas necesidades.
Non dubide en suxerir as súas mellores prácticas á comunidade Verdaccio.
Rexistro Privado
Podes engadir usuarios e xestionar que usuarios poden acceder a que paquetes.
Recoméndase que defina un prefixo para os seus paquetes privados, por exemplo local- *
ou con alcance @ my-company/*
, polo que todas as súas cousas privadas terán este aspecto: local-foo
. Deste xeito pode separar claramente os paquetes públicos dos privados.
packages:
'@my-company/*':
access: $all
publish: $authenticated
'local-*':
access: $all
publish: $authenticated
'@*/*':
access: $all
publish: $authenticated
'**':
access: $all
publish: $authenticated
Lembre sempre, a orde de acceso aos paquetes é importante, os paquetes coinciden sempre de arriba a abaixo.
Usando paquetes públicos de npmjs.org
Se non existe un paquete no almacenamento, o servidor tentará buscalo en npmjs.org. Se npmjs.org está desactivado, serve paquetes da caché simulando que non existen outros paquetes. Verdaccio descargará só o necesario (solicitado polos clientes) e esta información gardarase na memoria caché, polo que se o cliente solicita o mesmo por segunda vez pódese servir sen pedilo a npmjs.org.
Exemplo:
Se solicita con éxito express@4.0.1
ao servidor unha vez, poderá facelo de novo (con todas as súas dependencias) en calquera momento, aínda que npmjs.org estea inactivo. Aínda que teña en conta que express@4.0.0
non se descargará ata que alguén o precise. E se npmjs.org está fóra de liña, o servidor dirá que só se publica express@4.0.1
(o que hai na caché), pero nada máis.
Anular os paquetes públicos
Se desexa usar unha versión modificada dalgún paquete público foo
, só pode publicala no seu servidor local, polo que cando o seu tipo npm instale foo
, **Consideraremos instalar a súa versión **.
Aquí hai dúas opcións:
-
Queres crear un fork separado e deixar de sincronizar coa versión pública.
Se queres facelo, debes modificar o ficheiro de configuración para que Verdaccio xa non realice solicitudes relativas a este paquete a npmjs. Engade unha entrada separada para este paquete a
config.yaml
e eliminanpmjs
da listaproxy
e reinicia o servidor.packages: "@my-company/*": access: $all publish: $authenticated # comment it out or leave it empty # proxy:
Cando publique o seu paquete localmente, probablemente debería comezar cunha cadea de versión superior á do paquete existente polo que non entrará en conflito con ese paquete na caché.
-
Quere usar a súa versión temporalmente, pero volva á pública en canto se actualice.
Para evitar conflitos de versións, debes usar un sufixo personalizado de pre-lanzamento da seguinte versión de parche. Por exemplo, se un paquete público ten a versión 0.1.2, pode cargar
0.1.3-my-temp-fix
.npm version 0.1.3-my-temp-fix npm publish --tag fix --registry http://localhost:4873
This way your package will be used until its original maintainer updates his public package to
0.1.3
.
Security
Security starts in your environment.
Additonal reading:
- 10 npm Security Best Practices and following the steps outlined there.
- Avoiding npm substitution attacks
- Dependency Confusion: When Are Your npm Packages Vulnerable?
- Practical Mitigations For Dependency Confusion Attack > Feel free to attach here new useful articles to improve the security.
Strong package access with $authenticated
By default all packages you publish in Verdaccio are accessible for all users. We recommend protecting your registry from external non-authorized users by updating the access
property of your packages to $authenticated
.
packages:
"@my-company/*":
access: $authenticated
publish: $authenticated
"@*/*":
access: $authenticated
publish: $authenticated
"**":
access: $authenticated
publish: $authenticated
That way, nobody can access your registry unless they are authorized, and private packages won't be displayed in the web interface.
Remove proxy
to increase security at private packages
After a clean installation, by default all packages will be resolved to the default uplink (the public registry npmjs
).
packages:
"@*/*":
access: $authenticated
publish: $authenticated
proxy: npmjs
"**":
access: $authenticated
publish: $authenticated
proxy: npmjs
This means, if a private packaged eg: @my-company/auth
is published locally, the registry will look up at the public registry. If your intention is fully protection, remove the proxy
property from your configuration, for instance:
packages:
"@my-company/*":
access: $authenticated
publish: $authenticated
unpublish: $authenticated
"@*/*":
access: $authenticated
publish: $authenticated
proxy: npmjs
"**":
access: $authenticated
publish: $authenticated
proxy: npmjs
This configuration will avoid downloading needlessly to external registries, merging external metadata and download external tarballs.
Servidor
Secured Connections
Using HTTPS is a common recommendation. For this reason we recommend reading the SSL section to make Verdaccio secure, or alternatively using an HTTPS reverse proxy on top of Verdaccio.
Expiring Tokens
Since verdaccio@3.x
the tokens have no expiration date. For such reason we introduced in the next verdaccio@4.x
the JWT feature PR#896
security:
api:
jwt:
sign:
expiresIn: 15d
notBefore: 0
web:
sign:
expiresIn: 7d
Using this configuration will override the current system and you will be able to control how long the token will live.
Using JWT also improves the performance with authentication plugins. The old system will perform an unpackage and validate the credentials on every request, while JWT will rely on the token signature instead, avoiding the overhead for the plugin.
As a side note, be aware at npmjs and the legacy verdaccio token never expires** unless you invalidate manually.