Polski
Zacznij

← Wszystkie szablony · Narzędzia dla programistów

Wdróż Verdaccio jednym kliknięciem

Prywatny rejestr npm na twoje własne pakiety, który przechowuje też w cache pakiety z npm

Alternatywa dla npm Teams, GitHub Packages i JFrog Artifactory, hostowana u siebie.

Czym jest Verdaccio?

Verdaccio to lekki prywatny rejestr npm, który zespoły i programiści działający w pojedynkę uruchamiają zamiast płatnych prywatnych pakietów npm, GitHub Packages albo JFrog Artifactory. Publikujesz w nim pakiety przez npm publish i instalujesz je przez npm, yarn albo pnpm tak samo jak z npmjs. Nie potrzebuje bazy danych: pakiety i ich metadane to pliki na jego dysku.

To także proxy publicznego rejestru: pakiet, którego nie ma, przychodzi z npmjs przez jego uplink i zostaje zachowany, więc kolejne instalacje idą z Verdaccio, a nie z npmjs, a scope taki jak @twojanazwa może zostać prywatny, podczas gdy cała reszta przychodzi z npm. Jego strona pokazuje readme, wersje i zależności każdego pakietu.

Ten szablon uruchamia Verdaccio z magazynem na wolumenie i jednym kontem z nazwy użytkownika i hasła, które podajesz, zapisywanym do pliku htpasswd przy każdym starcie. Rejestracja jest wyłączona, a pakiety, zarówno twoje, jak i te z npm, może czytać i instalować tylko zalogowany użytkownik, więc rejestr nie jest otwartym mirrorem dla obcych.

Hosting Verdaccio na Pethost

  1. Logujesz się do Pethost kluczem dostępu, przez GitHub albo Google. Nie masz jeszcze maszyny? Wybierasz plan, a link czeka, aż będzie gotowa.
  2. Okno „Nowy projekt” otwiera się na aplikacji Verdaccio. Wypełniasz to, o co prosi, i klikasz „Utwórz projekt”: Nazwa użytkownika, Hasło administratora.
  3. Za minutę czy dwie aplikacja Verdaccio działa pod własnym adresem z HTTPS. Jej sekrety są tworzone losowo, a dane trafiają do nocnego backupu.
  4. To projekt jak każdy inny: ty albo twój agent możecie go zmienić, cofnąć do wcześniejszej wersji albo przywrócić.

Pytania o Verdaccio

Czy Verdaccio jest darmowy?

Tak. Verdaccio to open source na licencji MIT, bez płatnej edycji, a uruchomienie go u siebie kosztuje tylko maszynę.

Jak opublikować pakiet w Verdaccio?

Uruchom npm login --registry https://twoj-adres/ ze swoją nazwą użytkownika i hasłem, a potem npm publish --registry https://twoj-adres/ w katalogu pakietu. Ustawienie publishConfig.registry w package.json albo registry w .npmrc oszczędza wpisywania adresu za każdym razem.

Czy Verdaccio zainstaluje też pakiety publiczne?

Tak. Pakiet, którego nie ma w Verdaccio, jest pobierany z npmjs przez jego uplink i trafia do cache, więc możesz skierować npm, yarn albo pnpm wyłącznie na Verdaccio i dostać zarówno swoje pakiety, jak i publiczne. W tym szablonie instalowanie też wymaga zalogowanego użytkownika.

Czy Verdaccio działa z yarn i pnpm?

Tak. Verdaccio mówi protokołem rejestru npm, więc npm, yarn i pnpm publikują do niego i instalują z niego, gdy tylko ich ustawienie rejestru wskazuje na jego adres i mają jego token.

Ile pamięci i miejsca na dysku potrzebuje Verdaccio?

Verdaccio ma małe wymagania: około 100 MB pamięci; na dysku trzyma twoje pakiety i pakiety publiczne zainstalowane przez niego, po kilka megabajtów każdy. Na Pethost wystarczy mu plan Starter, z miejscem na inne aplikacje obok.

Verdaccio: plik Docker Compose

Szablon to ten compose.yaml i zmienne zapisywane do .env projektu przy jego tworzeniu. Pethost uruchamia plik dokładnie tak, jak jest napisany.

Kontenery: verdaccio (verdaccio/verdaccio:6).

Wolumeny, w nocnym backupie: 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:

Więcej w kategorii Narzędzia dla programistów