Repositorio NPM Privado – Verdaccio

Se nos ha solicitado la instalación y configuración de Verdaccio. Verdaccio es un gestor de paquetes NPM de ámbito privado, es decir que será interno o privada para la propia empresa.

En este manual aprenderemos a su configuración desde un VPS desde 0 hasta dejarlo en completo funcionamiento.

REQUISITOS

Vamos a tener en cuenta que el entorno se compone de:

  • Ubuntu 18.04
  • NodeJS

Antes de ello vamos a dividir el proceso en:

  • Instalación de los paquetes necesarios
  • Configuración Final

INSTALACIÓN Y CONFIGURACIÓN

NODEJS

Instalamos la versión 12.x según la documentación oficial ya que es la LTS del momento:

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
apt-get install -y nodejs

INSTALAR PM2

PM2 es un programa que nos permite controlar los procesos NodeJS de una manera más friendly y práctica. Por lo tanto es el programa de gestión que tenemos:

npm install pm2@latest -g

Nos puede dar un par de warnings al final de la instalación pero es por el tipo de sistema operativo.


INSTALAR VERDACCIO

A día de hoy (05/03/2020) nos instalará la versión 4.4.4.

npm install -g verdaccio

Como por defecto lo instalamos con el usuario de root, lo que haremos será copiar la configuración sobre el usuario que hemos creado para su ejecución.

# Creamos el usuario que ejecutará verdaccio
useradd -m usuario1

# Copiamos la configuración
cp -ra /root/.config/verdaccio /home/usuario1/.config

# Damos los permisos
chown -R usuario1:usuario1 /home/usuario1/.config

INICIANDO VERDACCIO

Hasta ahora lo que hemos hecho es dejar configurado nuestro Verdaccio ahora el verdadero punto está en levantarlo, que arranque bien y además que al reiniciar el servidor se inicie automáticamente.

# Desde el home del usuario1
su - usuario1

# Lo dejamos levantado con la configuración en el home
pm2 start `which verdaccio` && pm2 logs

# Guardamos
pm2 save

# Servicio de arranque (al reiniciar)
pm2 startup

El comando startup os habrá sacado unas líneas que debéis ejecutar como root o como sudo. Tal que:

pm2 startup systemd -u usuario1 --hp /home/usuario1

El ejemplo que he creado es sabiendo que mi usuario se llama «usuario1» y su home es «/home/usuario1».


USANDO VERDACCIO

Creando Usuarios
Entorno: usuario1

Lo primero que debemos hacer es crear un usuario para que pueda usar nuestro repositorio privado de NPM. Para ello:

npm adduser --registry http://127.0.0.1:4873

Nos solicitará Usuario, Contraseña y un Email.

Como veis por esa URL lo hemos dejado con la configuración por defecto ya que este puerto está escuchando en local.

Instalando Paquetes

Por defecto NPM cogerá el de por defecto, para poder usar otro repositorio (en nuestro caso el privado) debemos realizarlo de la siguiente manera:

npm install --registry https://xxx.ejemplo.com

Publicando un Paquete

Para publicar un paquete primero debemos realizar un login y después usar el siguiente comando:

npm publish --registry https://xxx.ejemplo.com

CONFIGURANDO NGINX – PROXY INVERSO

Por defecto la configuración de verdaccio escucha por localhost en el puerto 4873. Es decir que para nosotros es mayor seguridad ya que podemos cambiar el mismo.

Ahora bien lo que hacemos es ocultar bajo un dominio y además con un certificado que ya disponemos del tipo wildcard.

server {
    listen 80;
    server_name xxx.ejemplo.com;
 
    return 301 https://$host$request_uri;
}
 
server {
        listen 443 ssl;
 
        server_name xxx.ejemplo.com;
 
        ssl_certificate             /etc/certificados/ejemplocert-bundle.pem;
        ssl_certificate_key         /etc/certificados/ejemplocert.key;
 
        location / {
         proxy_set_header    Host $host;
         proxy_set_header    X-Real-IP $remote_addr;
         proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header    X-Forwarded-Proto $scheme;
         proxy_pass          http://127.0.0.1:4873;
         proxy_read_timeout  600;
         proxy_redirect off;
        }
 
        location ~ ^/verdaccio/(.*)$ {
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header Host $host;
         proxy_set_header X-NginX-Proxy true;
         proxy_pass http://127.0.0.1:4873/$1;
         proxy_redirect off;
        }
 
    }
}

Reiniciamos nuestro Nginx y ya lo tenemos listo.

Si todo ha ido bien accederemos a la web: https://xxx.ejemplo.com


BIBLIOGRAFÍA

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *