Guía de despliegue

Alojar Verdaccio en un VPS: registro npm/yarn/pnpm privado

Desplegar en un VPS Cloud →

Tutorial

Alojar Verdaccio en un VPS: registro npm/yarn/pnpm privado

Autoalojamiento7 min de lectura5 pasos

Verdaccio es un registro npm privado ligero de código abierto (MIT) escrito en Node.js. Actúa simultáneamente como proxy de npmjs.org y servidor de alojamiento para tus paquetes JavaScript internos. En un VPS ServOrbit, un único contenedor Docker es suficiente — menos de 128 MB de RAM, sin base de datos externa y sin dominio necesario para empezar.

Contenido· Por qué alojar un registro npm privado en tu VPS1/7
  1. 01Por qué alojar un registro npm privado en tu VPS
  2. 02Qué ganas con Verdaccio autoalojado
  3. 03Requisitos
  4. 04Desplegar Verdaccio en tu VPS ServOrbit
  5. 05Configurar scopes y reglas de proxy
  6. 06Integración en pipelines CI/CD
  7. 07Seguridad y control de acceso

Por qué alojar un registro npm privado en tu VPS

Tres situaciones hacen indispensable un registro npm privado. La primera es gestionar librerías JavaScript internas: si desarrollas un design system, utilidades de negocio o clientes de API específicos de tu organización, publicarlos en npmjs.org los expone a todo internet. Un registro privado los mantiene detrás de tu infraestructura, versionados y accesibles solo a tus desarrolladores y pipelines.

La segunda es la resiliencia de CI: npmjs.org experimenta cortes varias veces al año, y cada uno puede bloquear tus despliegues durante horas. Verdaccio cachea cada paquete descargado: el segundo npm install — en CI o en local — nunca vuelve a tocar la red. Tus builds se aceleran y se independizan de la disponibilidad del registro público.

La tercera es el trabajo offline o en entornos sin acceso a internet. Una vez calentada la caché, Verdaccio sirve todos los paquetes vistos previamente sin conexión — útil para entornos de cumplimiento estricto, pipelines on-premise o demos sin Wi-Fi. Todo en un único contenedor Docker ligero (menos de 128 MB RAM), sin base de datos externa y sin configuración compleja.

Qué ganas con Verdaccio autoalojado

  • Paquetes privados bajo tu namespace — publica librerías internas sin exponerlas al registro público.
  • Caché local de npmjs.org — tus builds de CI siguen funcionando aunque el registro público esté caído.
  • Cero dependencias externas — un contenedor Docker, un volumen, sin base de datos.
  • Menos de 128 MB de RAM — funciona en el VPS más modesto sin impacto en otros servicios.
  • Compatible con npm, Yarn y pnpm — sin cambios en los clientes, solo actualiza la URL del registro.
  • Modo sin conexión — calienta la caché una vez y desconéctate: tus builds siguen siendo reproducibles.

Requisitos

Verdaccio es uno de los servicios más ligeros que puedes desplegar en un VPS. La lista de requisitos es intencionalmente corta: un VPS con 1 vCPU, 512 MB de RAM (Verdaccio usa menos de 128 MB en funcionamiento normal) y Docker instalado. No se necesita dominio para empezar — accedes al registro mediante un túnel SSH desde tu workstation o desde un runner CI.

Para acceso permanente del equipo o CI externos, adjunta un dominio desde tu panel de ServOrbit: nginx lo proxificará sobre HTTPS automáticamente, y el certificado TLS es gestionado por ServOrbit sin ninguna acción de tu parte. Para almacenamiento, planifica espacio en disco proporcional a tu uso: los paquetes públicos cacheados y tus paquetes privados se acumulan en un volumen Docker persistente — unos pocos gigabytes son suficientes para la mayoría de proyectos con un equipo de 5 a 10 desarrolladores.

Desplegar Verdaccio en tu VPS ServOrbit

  1. Pedir desde el Marketplace de ServOrbit

    Desde tu área de cliente ServOrbit, instala Verdaccio en un clic desde el Marketplace: selecciona la categoría Desarrollo, elige Verdaccio y confirma tu pedido. El contenedor Docker arranca automáticamente con un healthcheck integrado.

  2. Conectar mediante túnel SSH

    Abre un túnel SSH: ssh -L 4873:127.0.0.1:<port> root@<vps-ip>. Luego apunta npm al túnel: npm set registry http://localhost:4873. Para Yarn 2+: añade npmRegistryServer: "http://localhost:4873" en .yarnrc.yml.

  3. Crear tu primera cuenta

    Ejecuta npm adduser --registry http://localhost:4873. Introduce un nombre de usuario, contraseña y correo. Este primer usuario se convierte en administrador del registro con derechos completos de lectura y publicación.

  4. Publicar tu primer paquete privado

    En el directorio de tu paquete, ejecuta npm publish --registry http://localhost:4873. Asegúrate de que package.json incluye tu scope privado en el campo name (p. ej. @tu-org/mi-paquete). Verifica la publicación en http://localhost:4873.

  5. Adjuntar un dominio para acceso permanente

    Desde tu área de cliente ServOrbit, adjunta un dominio o subdominio a tu VPS. nginx proxificará Verdaccio automáticamente en HTTPS. Actualiza tu .npmrc global o la variable NPM_CONFIG_REGISTRY en tus pipelines CI.

Para acceso permanente del equipo, adjunta un dominio desde tu panel de ServOrbit. nginx proxificará Verdaccio automáticamente en HTTPS — configura tu .npmrc global (registry=https://verdaccio.tu-dominio.com) o define NPM_CONFIG_REGISTRY en tus variables CI.

Configurar scopes y reglas de proxy

Por defecto, Verdaccio aplica una única regla: cada paquete se busca primero en local y luego se proxifica a npmjs.org si está ausente. Esta regla funciona para empezar, pero la mayoría de equipos quieren refinar el comportamiento por namespace.

La configuración vive en config.yaml, accesible desde el volumen Docker (verdaccio-storage). La sección packages: define reglas por patrón de nombre. Para un namespace privado (@acme/*), puedes desactivar el proxy a npmjs.org y permitir solo usuarios autenticados:

packages:
  '@acme/*':
    access: $authenticated
    publish: $authenticated
  '**':
    access: $all
    proxy: npmjs

Después de la modificación, reinicia el contenedor: docker compose restart verdaccio. Esta configuración garantiza que tus paquetes privados nunca lleguen a npmjs.org.

Integración en pipelines CI/CD

Para GitHub Actions, define NPM_CONFIG_REGISTRY y el token de autenticación ${{ secrets.VERDACCIO_TOKEN }} en las variables de entorno del workflow:

jobs:
  build:
    env:
      NPM_CONFIG_REGISTRY: https://verdaccio.tu-dominio.com
      NPM_CONFIG_//verdaccio.tu-dominio.com/:_authToken: ${{ secrets.VERDACCIO_TOKEN }}

Obtén el token con npm token create --registry https://verdaccio.tu-dominio.com desde cualquier cuenta de usuario Verdaccio. Almacena el token en los secretos de CI, no en archivos del repositorio. Para GitLab CI, la sintaxis equivalente va en la sección variables: de tu .gitlab-ci.yml.

El cacheo de paquetes reduce el tiempo de instalación de node_modules de 30–60 segundos a 2–5 segundos en builds repetidas, ya que los paquetes públicos se sirven desde la caché de Verdaccio en lugar de descargarse de npmjs.org. Para maximizar el beneficio en CI, ejecuta una etapa de pre-calentamiento antes de los builds de ramas de funcionalidades.

Seguridad y control de acceso

Verdaccio usa por defecto autenticación htpasswd con hash bcrypt. Para los equipos que necesitan integración con sistemas de identidad existentes, Verdaccio soporta plugins de autenticación de terceros: LDAP, GitLab, GitHub OAuth, Keycloak y otros.

Para tokens CI, usa npm token create --registry https://verdaccio.tu-dominio.com en lugar de contraseñas en texto plano. Almacénalos como secretos de CI (${{ secrets.VERDACCIO_TOKEN }} en GitHub Actions). Los tokens se pueden revocar individualmente sin afectar a otros usuarios.

En ServOrbit, Verdaccio está vinculado a 127.0.0.1 y expuesto solo a través del proxy inverso nginx — el puerto 4873 nunca es directamente accesible desde internet. Para máxima seguridad, habilita la autenticación obligatoria de lectura (access: $authenticated en config.yaml) si tu registro contiene paquetes sensibles o propietarios.

Despliega Verdaccio en un VPS ServOrbit

Un VPS ServOrbit con Docker preconfigurado, IPv4 dedicada y nginx incluido — despliega tu registro npm privado en minutos, sin configuración de servidor.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva