← Todas las plantillas · Herramientas de desarrollo
Despliega Verdaccio en un clic
Un registro npm privado para tus propios paquetes, que también guarda en caché los de npm
Una alternativa autoalojada a npm Teams, GitHub Packages y JFrog Artifactory.
¿Qué es Verdaccio?
Verdaccio es un registro npm privado y ligero que equipos y desarrolladores independientes usan en lugar de los paquetes privados de pago de npm, GitHub Packages o JFrog Artifactory. Publicas paquetes en él con npm publish y los instalas con npm, yarn o pnpm como si vinieran de npmjs. No necesita base de datos: los paquetes y sus metadatos son archivos en su disco.
También es un proxy del registro público: un paquete que no tiene llega de npmjs a través de su uplink y se guarda, así que las instalaciones siguientes salen de Verdaccio y no de npmjs, y un scope como @tunombre puede seguir siendo privado mientras todo lo demás viene de npm. Su página web muestra el readme, las versiones y las dependencias de cada paquete.
Esta plantilla ejecuta Verdaccio con su almacenamiento en un volumen y una sola cuenta, el nombre de usuario y la contraseña que indicas, que se escriben en su archivo htpasswd en cada arranque. No se pueden crear cuentas nuevas, y los paquetes, tanto los tuyos como los de npm, solo los lee e instala un usuario que inició sesión, así que el registro no es un espejo abierto para extraños.
Hosting de Verdaccio en Pethost
- Inicias sesión en Pethost con una passkey, GitHub o Google. ¿Aún no tienes máquina? Eliges un plan, y el enlace espera hasta que esté lista.
- Nuevo proyecto se abre en Verdaccio. Rellenas lo que pide y haces clic en Crear proyecto: Nombre de usuario, Contraseña de administrador.
- En un par de minutos Verdaccio está en marcha en su propia dirección con HTTPS. Sus secretos se generan al azar, y sus datos entran en el backup de cada noche.
- Es un proyecto como cualquier otro: tú o tu agente lo pueden cambiar, volver a una versión anterior o restaurar.
Preguntas sobre Verdaccio
¿Verdaccio es gratis?
Sí. Verdaccio es de código abierto bajo la licencia MIT, sin edición de pago, y ejecutarlo tú mismo solo cuesta la máquina.
¿Cómo publico un paquete en Verdaccio?
Ejecuta npm login --registry https://tu-direccion/ con tu nombre de usuario y contraseña, y luego npm publish --registry https://tu-direccion/ en la carpeta del paquete. Si defines publishConfig.registry en package.json o registry en .npmrc, no tienes que escribir la dirección cada vez.
¿Verdaccio también puede instalar paquetes públicos?
Sí. Un paquete que no está en Verdaccio se descarga de npmjs a través de su uplink y se guarda en caché, así que puedes apuntar npm, yarn o pnpm solo a Verdaccio y obtener tanto tus paquetes como los públicos. En esta plantilla, instalar también requiere un usuario con sesión iniciada.
¿Verdaccio funciona con yarn y pnpm?
Sí. Verdaccio habla el protocolo del registro de npm, así que npm, yarn y pnpm publican en él e instalan desde él en cuanto su ajuste de registro apunta a su dirección y tienen su token.
¿Cuánta memoria y disco necesita Verdaccio?
Verdaccio es ligero: unos 100 MB de memoria; su disco guarda tus paquetes y los públicos instalados a través de él, de unos pocos megabytes cada uno. En Pethost le basta el plan Starter, y queda sitio para otras apps a su lado.
El archivo Docker Compose de Verdaccio
La plantilla es este compose.yaml y las variables que se escriben en el .env del proyecto al crearlo. Pethost ejecuta el archivo tal como está escrito.
Contenedores: verdaccio (verdaccio/verdaccio:6).
Volúmenes, en el backup de cada noche: storage.
services:
verdaccio:
image: verdaccio/verdaccio:6
restart: unless-stopped
environment:
VERDACCIO_PUBLIC_URL: ${URL}
ADMIN_USERNAME: ${ADMIN_USERNAME}
ADMIN_PASSWORD: ${ADMIN_PASSWORD}
# The administrator's line of the htpasswd file is written from the username and password
# given at every start, so its password is the one in the project's .env; the other lines,
# users the administrator added, stay as they are.
command:
- /bin/sh
- -c
- |
node -e '
const fs = require("node:fs");
const bcrypt = require("/usr/local/lib/node_modules/verdaccio/node_modules/bcryptjs");
const file = "/verdaccio/storage/htpasswd";
const { ADMIN_USERNAME: name, ADMIN_PASSWORD: password } = process.env;
const lines = fs.existsSync(file) ? fs.readFileSync(file, "utf8").split("\n") : [];
const others = lines.filter((line) => line && !line.startsWith(name + ":"));
fs.writeFileSync(file, [...others, name + ":" + bcrypt.hashSync(password, 10)].join("\n") + "\n", { mode: 0o600 });
' || exit 1
unset ADMIN_PASSWORD
exec verdaccio --config /verdaccio/conf/config.yaml --listen http://0.0.0.0:4873
configs:
- source: config
target: /verdaccio/conf/config.yaml
volumes:
- storage:/verdaccio/storage
configs:
config:
content: |
storage: /verdaccio/storage/data
plugins: /verdaccio/plugins
web:
title: Verdaccio
auth:
htpasswd:
file: /verdaccio/storage/htpasswd
# Nobody signs up with npm adduser: users are lines of the file, which the administrator adds.
max_users: -1
uplinks:
npmjs:
url: https://registry.npmjs.org/
# Only users who signed in install or publish, so the registry is no open mirror of npm.
packages:
'@*/*':
access: $$authenticated
publish: $$authenticated
unpublish: $$authenticated
proxy: npmjs
'**':
access: $$authenticated
publish: $$authenticated
unpublish: $$authenticated
proxy: npmjs
server:
keepAliveTimeout: 60
middlewares:
audit:
enabled: true
log:
type: stdout
format: pretty
level: http
volumes:
storage:
Más en Herramientas de desarrollo
- GiteaHosting de Git con pull requests e issues
- code-serverVS Code en el navegador
- KrokiDiagramas a partir de texto: PlantUML, Mermaid, Graphviz y más
- CoderEntornos de desarrollo remotos a partir de plantillas de Terraform, abiertos en VS Code, JetBrains, el navegador o por SSH
- HasuraAPIs GraphQL y REST al instante sobre una base de datos Postgres, con permisos, eventos y una consola web
- InsForgeUn backend para apps que construyen agentes de código: Postgres, autenticación, almacenamiento y edge functions