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