Español
Empezar

← 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

  1. 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.
  2. Nuevo proyecto se abre en Verdaccio. Rellenas lo que pide y haces clic en Crear proyecto: Nombre de usuario, Contraseña de administrador.
  3. 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.
  4. 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