NPM Private Registry : VERDACCIO

NPM PRIVATE REGISTRY : VERDACCIO
1. C'est quoi un private registry npm ?
Dans le monde du développement informatique, on ne recrée pas la roue à chaque projet. On fait appel souvent à des librairies ou des groupe de librairies, que l'on appelle des packages.
En nodeJS, l'installation des packages sont gérés par des outils dont les plus populaires sont yarn et surtout NPM pour Node Package Manager.
Ces outils se connectent à un registry pour installer/publier des packages. Le registry est le serveur qui héberge effectivement les packages. S'il existe beaucoup d’herbergement de package ouvertes et gratuites, il arrive parfois que vous ne souhaitez publier des packages acessibles à la terre entière, mais juste pour aux collaborateurs de votre projet. Il vous faut alors un registre privé ou private registry.
Il existe quelques fournisseurs de registres privés tel que Myget (myget.org) ou npmorg (npmjs.com) mais c'est payant.
Si vous êtes radin, je vous propose ici de découvrir un registre privé gratuit à monter soi-même : VERDDACCIO
2. Installation
Pré-requis : installer d'abord node et npm , puis
$> npm install --global verdaccio
Démarrer le service :
$> verdaccio
Par défaut le service sur le port 4873
3. Configuration :
Le fichier de config se trouve par défaut dans ~/.config/verdaccio/config.yaml (~ représente votre home directory )
A. Uplinks :
Les uplinks sert de « proxy » de packages, cela permet de forwarder les requetes de packages qui ne sont hebergés en local vers d’autres registries.
Anisi on ne déclare qu'un seul registry dans le npm local , dans .npmrc
registry = "http://registry.mondomaine.com:4873/"
Puis dans ~/.config/verdaccio/config.yaml, mettez :
uplinks: |
Par exemple si vous installez les packages « mypackages » et React-dom, votre npm se connecte uniquement à verdaccio . « mypackages » sera téléchargé à partir de votre npm privé et React-dom proviendra du registry officiel de React.
B. Création de compte :
L’intérêt du registre privé est de pouvoir filtrer les accès à votre registre.
Pour cela il existe des groupes prédéfinis : '$all', '$anonymous', '$authenticated'. Dans l’état actuel de l’outils il n’est pas possible de définir des groupes. Mais on peut déclarer un fichier htpasswd (vide) pour l’authentification au registry via le fichier de config :
auth: |
Ensuite pour créer des users, utiliser le client npm :
$> npm adduser --registry http:/registry.mondomaine.com:4873/ Username: achung Password : ********* Email: (this IS public) andre.chung@omnilog.fr |
Ce faisant, le user/password sera ajouté dans le fichier htpasswd que vous avez déclaré plus haut.
Dans votre .npmrc local un token sera aussi créé :
//registry.mondomaine.com:4873/:_authToken=**************
Vous pouvez sauvegarder ce token pour vous authentifier sur un autre ordinateur si besoin.
Une fois les ayant droit définis, bloquer la création des users avec max_users à -1 :
auth: |
C. Control d'accés:
Maintenant vous pouvez définir qui a accès à quoi.
Le control d'accès se fait par packages, voici quelques exemples de configuration à l’aide regex:
packages: |
# les packages commençant par private- est en lecture pour user 1 et user2, la publication n'est autorisé q'au user1 |
# tous les scope-packages sont en accès libre pour tous, de plus si un scope-package n'est pas disponible localement la requête est transmise au uplink npmjs défini plus haut |
# tous les packages qui ne match pas avec les 2 règles précédentes sont en accès libre |
Rappel : il n’est pas possible en l’état actuel de regrouper les utilisateurs sous des noms de groupes. Les seuls groupes existants sont les groupes par défaut définis plus haut.
4. Reverse Proxy
Dans la vraie vie, vous n’allez pas exposer votre registry directement sur internet mais via un proxy http voire https. https://registry.mondomaine.com/ est plus sexy que http://registry.mondomaine.com:4873/
Le cas classique est un serveur HTTP type Apache ou NGINX qui sert de reverse proxy, les requêtes seront forwardées dans un LAN démilitarisé (ou même en localhost) au regitry. Un avantage supplémentaire est que le certificat du HTTPS sera centralisé par le reverse proxy.
Ci-dessous , un exemple de config pour un reverse proxy NGINX :
location / { } |
5. Démarrage en tant que service
Une fois que tout marche comme vous voulez, il serait bien pratique que Verdaccio soit un service monitoré au sens du système, c’est à dire qu’il soit démarré et supervisé par l’OS.
La littérature de Verdaccio nous présente l’utilitaire « forever » pour répondre à ce besoin. Je vous conseillerai un autre utilitaire appelé PM2 plus simple à configurer.
$> npm install --global pm2
Ensuite :
$> pm2 start <path>/verdaccio
NB : il est nécessaire fournir le chemin vers l’exécutable verdaccio.
Pour finir il suffit de sauvegarder l’état :
$> pm2 save
pm2 générera le démarrage automatique dans votre système et supervisera le process, s’il tombe il sera automatiquement redémarré.
6. Conclusions
Verdaccio est une solution de registre privé simple à mettre en place. En plus il est gratuit ! ou plus exactement il est en open source.
Pour plus d’information faites une tour sur https://verdaccio.org/
André C.
Ajouter un commentaire