Als Angular Entwickler stellt man schnell fest, dass sich viele Components / Modules / Directives / Services & Co. in mehreren Projekten wiederverwenden lassen. Da bietet sich natürlich ein eigenes privates Repository zum Hosten und Bereitstellen von NPM Packages an.
Bei Zotorn IT haben wir uns derzeit für die open source Lösung Verdaccio (https://verdaccio.org/, https://github.com/verdaccio/verdaccio) entschieden. Verdaccio kann man kinderleicht aufsetzen und konfigurieren.
Der Artikel besteht insgesamt aus 4 Teilen:
- Lokale Arbeitsplatzinstallation
- Serverinstallation mit Docker und SSL
- Handhabung Verdaccio & npm
- Verdaccio absichern
Teil 4: Verdaccio absichern
Das Problem mit der Verdaccio Standardconfig ist allerdings, dass mehr oder weniger jeder Lesezugriff auf unsere Registry hat und sich auch jeder anmelden kann. Nicht gerade optimal für eine private Registry. Also machen wir den Laden dicht.
Registrierung abschalten
Vieleicht hast du es ja schon beim Überfliegen der Default-Config gesehen. Wir setzen max_users: -1
, um weitere Benutzerregistrierungen zu verhindern.
# config.yaml
auth:
htpasswd:
...
# Maximum amount of users allowed to register, defaults to "+infinity".
# You can set this to -1 to disable registration.
max_users: -1
Lese-, Schreib- und Löschzugriff beschränken
Oder wie es in npm Therminologie heisst: Access, Publish, Unpublish
Im packages
Bereich der config.yaml lassen sich die Zugriffsberechtigungen der Packages einstellen. Wir müssen nur dafür sorgen, dass access
, publish
und unpublish
immer auf $authenticated
gesetzt sind, so können nur angemeldete Benutzer zugreifen.
packages:
'@*/*':
# scoped packages
access: $authenticated
publish: $authenticated
unpublish: $authenticated
proxy: npmjs
'**':
# allow all users (including non-authenticated users) to read and
# publish all packages
#
# you can specify usernames/groupnames (depending on your auth plugin)
# and three keywords: "$all", "$anonymous", "$authenticated"
access: $authenticated
# allow all known users to publish/publish packages
# (anyone can register by default, remember?)
publish: $authenticated
unpublish: $authenticated
# if package is not available locally, proxy requests to 'npmjs' registry
proxy: npmjs
Im packages
Bereich kannst du theoretisch für jedes Package ein eigenes Regelwerk anlegen und sehr spezifische Anpassungen vornehmen. Mehr dazu findest du in der Verdaccio Docu.
Anschließend noch mal verdaccio neustarten und fertig.
Wenn du einen weiteren Benutzer registrieren willst, stell einfach max_users
auf eine Zahl größer der aktuellen Benutzeranzahl, starte Verdaccio neu und registriere den Benutzer. Anschließend mit max_users: -1
wieder die Registrierung abschalten und den Neustart nicht vergessen.