← Alle Vorlagen · Entwickler-Tools
Verdaccio mit einem Klick deployen
Eine private npm-Registry für deine eigenen Pakete, die auch die von npm cacht
Eine selbst gehostete Alternative zu npm Teams, GitHub Packages und JFrog Artifactory.
Was ist Verdaccio?
Verdaccio ist eine leichte private npm-Registry, die Teams ebenso wie Leute, die allein entwickeln, statt der kostenpflichtigen privaten Pakete von npm, GitHub Packages oder JFrog Artifactory betreiben. Du veröffentlichst Pakete darauf mit npm publish und installierst sie mit npm, yarn oder pnpm wie von npmjs. Eine Datenbank braucht Verdaccio nicht: Pakete und ihre Metadaten sind Dateien auf seiner Disk.
Außerdem ist Verdaccio ein Proxy für die öffentliche Registry: Ein Paket, das es nicht hat, kommt über seinen Uplink von npmjs und wird aufbewahrt, sodass spätere Installationen von Verdaccio statt von npmjs kommen, und ein Scope wie @deinname kann privat bleiben, während alles andere von npm kommt. Die Weboberfläche zeigt für jedes Paket das Readme, die Versionen und die Abhängigkeiten.
Diese Vorlage betreibt Verdaccio mit dem Speicher in einem Volume und einem einzigen Konto aus dem Benutzernamen und dem Passwort, die du festlegst und die bei jedem Start in die htpasswd-Datei geschrieben werden. Die Registrierung ist aus, und Pakete, deine eigenen wie die von npm, kann nur lesen und installieren, wer angemeldet ist, sodass die Registry kein offener Mirror für Fremde ist.
Verdaccio-Hosting auf Pethost
- Du meldest dich bei Pethost an, mit Passkey, GitHub oder Google. Noch keine Maschine? Du wählst einen Tarif, und der Link wartet, bis sie bereit ist.
- „Neues Projekt“ öffnet sich bei Verdaccio. Du füllst aus, was die App braucht, und klickst auf „Projekt erstellen“: Benutzername, Admin-Passwort.
- In ein, zwei Minuten läuft Verdaccio unter eigener Adresse mit HTTPS. Die Secrets werden zufällig erzeugt, und die Daten sind im nächtlichen Backup.
- Es ist ein Projekt wie jedes andere: Du oder dein Agent könnt es ändern, zurückrollen oder wiederherstellen.
Fragen zu Verdaccio
Ist Verdaccio kostenlos?
Ja. Verdaccio ist Open Source unter der MIT-Lizenz, ohne kostenpflichtige Edition, und selbst betrieben kostet es nur die Maschine.
Wie veröffentliche ich ein Paket in Verdaccio?
Führ npm login --registry https://deine-adresse/ mit deinem Benutzernamen und Passwort aus, dann npm publish --registry https://deine-adresse/ im Ordner des Pakets. Wenn du publishConfig.registry in der package.json oder registry in der .npmrc setzt, musst du die Adresse nicht jedes Mal tippen.
Kann Verdaccio auch öffentliche Pakete installieren?
Ja. Ein Paket, das nicht in Verdaccio liegt, wird über den Uplink von npmjs geholt und gecacht, sodass du npm, yarn oder pnpm allein auf Verdaccio zeigen lassen kannst und sowohl deine Pakete als auch öffentliche bekommst. In dieser Vorlage muss man auch zum Installieren angemeldet sein.
Funktioniert Verdaccio mit yarn und pnpm?
Ja. Verdaccio spricht das Protokoll der npm-Registry, also veröffentlichen npm, yarn und pnpm darauf und installieren davon, sobald ihre Registry-Einstellung auf seine Adresse zeigt und sie sein Token haben.
Wie viel RAM und Speicherplatz braucht Verdaccio?
Verdaccio ist leicht: etwa 100 MB RAM; auf der Disk liegen deine Pakete und die öffentlichen, die darüber installiert wurden, je ein paar Megabyte. Auf Pethost reicht dafür der Tarif Starter, mit Platz für weitere Apps daneben.
Verdaccio: die Docker-Compose-Datei
Die Vorlage ist diese compose.yaml und die Variablen, die beim Erstellen in die .env des Projekts geschrieben werden. Pethost führt die Datei so aus, wie sie geschrieben ist.
Container: verdaccio (verdaccio/verdaccio:6).
Volumes, im nächtlichen Backup: storage.
services:
verdaccio:
image: verdaccio/verdaccio:6
restart: unless-stopped
environment:
VERDACCIO_PUBLIC_URL: ${URL}
ADMIN_USERNAME: ${ADMIN_USERNAME}
ADMIN_PASSWORD: ${ADMIN_PASSWORD}
# The administrator's line of the htpasswd file is written from the username and password
# given at every start, so its password is the one in the project's .env; the other lines,
# users the administrator added, stay as they are.
command:
- /bin/sh
- -c
- |
node -e '
const fs = require("node:fs");
const bcrypt = require("/usr/local/lib/node_modules/verdaccio/node_modules/bcryptjs");
const file = "/verdaccio/storage/htpasswd";
const { ADMIN_USERNAME: name, ADMIN_PASSWORD: password } = process.env;
const lines = fs.existsSync(file) ? fs.readFileSync(file, "utf8").split("\n") : [];
const others = lines.filter((line) => line && !line.startsWith(name + ":"));
fs.writeFileSync(file, [...others, name + ":" + bcrypt.hashSync(password, 10)].join("\n") + "\n", { mode: 0o600 });
' || exit 1
unset ADMIN_PASSWORD
exec verdaccio --config /verdaccio/conf/config.yaml --listen http://0.0.0.0:4873
configs:
- source: config
target: /verdaccio/conf/config.yaml
volumes:
- storage:/verdaccio/storage
configs:
config:
content: |
storage: /verdaccio/storage/data
plugins: /verdaccio/plugins
web:
title: Verdaccio
auth:
htpasswd:
file: /verdaccio/storage/htpasswd
# Nobody signs up with npm adduser: users are lines of the file, which the administrator adds.
max_users: -1
uplinks:
npmjs:
url: https://registry.npmjs.org/
# Only users who signed in install or publish, so the registry is no open mirror of npm.
packages:
'@*/*':
access: $$authenticated
publish: $$authenticated
unpublish: $$authenticated
proxy: npmjs
'**':
access: $$authenticated
publish: $$authenticated
unpublish: $$authenticated
proxy: npmjs
server:
keepAliveTimeout: 60
middlewares:
audit:
enabled: true
log:
type: stdout
format: pretty
level: http
volumes:
storage:
Mehr in Entwickler-Tools
- GiteaGit-Hosting mit Pull-Requests und Issues
- code-serverVS Code im Browser
- KrokiDiagramme aus Text: PlantUML, Mermaid, Graphviz und mehr
- CoderEntfernte Entwicklungsumgebungen aus Terraform-Vorlagen, geöffnet in VS Code, JetBrains, im Browser oder per SSH
- HasuraSofortige GraphQL- und REST-APIs über einer Postgres-Datenbank, mit Berechtigungen, Events und einer Web-Konsole
- InsForgeEin Backend für Apps, die Coding-Agenten bauen: Postgres, Auth, Speicher und Edge Functions