---
title: "Verdaccio con Docker Compose y hosting en un clic"
description: "Autoaloja Verdaccio, el registro npm privado, ligero y de código abierto: publica tus propios paquetes y guarda npmjs en caché, con npm, yarn y pnpm."
---

[← Todas las plantillas](https://pethost.dev/es/templates/) · [Herramientas de desarrollo](https://pethost.dev/es/templates/developer-tools/)

# 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.

[Desplegar en Pethost](https://console.pethost.dev/?template=verdaccio)

## ¿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:
```

[compose.yaml](https://pethost.dev/templates/verdaccio/compose.yaml)[Verla en GitHub](https://github.com/pethost-dev/templates/tree/main/verdaccio)

## [Más en Herramientas de desarrollo](https://pethost.dev/es/templates/developer-tools/)

- [**Gitea**Hosting de Git con pull requests e issues](https://pethost.dev/es/templates/gitea/)
- [**code-server**VS Code en el navegador](https://pethost.dev/es/templates/code-server/)
- [**Kroki**Diagramas a partir de texto: PlantUML, Mermaid, Graphviz y más](https://pethost.dev/es/templates/kroki/)
- [**Coder**Entornos de desarrollo remotos a partir de plantillas de Terraform, abiertos en VS Code, JetBrains, el navegador o por SSH](https://pethost.dev/es/templates/coder/)
- [**Hasura**APIs GraphQL y REST al instante sobre una base de datos Postgres, con permisos, eventos y una consola web](https://pethost.dev/es/templates/hasura/)
- [**InsForge**Un backend para apps que construyen agentes de código: Postgres, autenticación, almacenamiento y edge functions](https://pethost.dev/es/templates/insforge/)

Pethost · Stephan Gomer · NIP 1133096755

Pethost

- [Plantillas](https://pethost.dev/es/templates/)
- [Sobre nosotros](https://pethost.dev/about/)
- [Docs](https://pethost.dev/docs/)
- [Blog](https://pethost.dev/es/blog/)
- [API](https://pethost.dev/docs/api/)
- [CLI](https://pethost.dev/docs/cli/)
- [Plugin](https://github.com/pethost-dev/plugin)
- [Términos](https://pethost.dev/terms/)
- [Privacidad](https://pethost.dev/privacy/)
- [Reembolsos](https://pethost.dev/refunds/)
- [support@pethost.dev](mailto:support@pethost.dev)

Bases de datos

- [Postgres](https://pethost.dev/es/postgres/)

Comparativas

- [Coolify vs Dokploy vs CapRover vs Dokku](https://pethost.dev/es/blog/coolify-vs-dokploy-vs-caprover-vs-dokku/)
- [Coolify Cloud vs Dokploy Cloud](https://pethost.dev/es/blog/coolify-cloud-vs-dokploy-cloud/)
- [Precios de Railway vs Render vs Fly.io](https://pethost.dev/es/blog/railway-vs-render-vs-fly-io-pricing/)
- [Hosting gestionado para Docker Compose](https://pethost.dev/es/blog/managed-docker-compose-hosting/)

Alternativas

- [Alternativas a Railway](https://pethost.dev/es/blog/railway-alternatives/)
- [Alternativas a Heroku](https://pethost.dev/es/blog/heroku-alternatives/)
- [Alternativas a Dokploy](https://pethost.dev/es/blog/dokploy-alternatives/)
- [Alternativas a Coolify](https://pethost.dev/es/blog/coolify-alternatives/)
- [Alternativas a Render](https://pethost.dev/es/blog/render-alternatives/)
- [Alternativas a Sliplane](https://pethost.dev/es/blog/sliplane-alternatives/)
