Українська
Почати

← Усі шаблони · Інструменти розробника

Задеплойте Verdaccio в один клік

Приватний npm-реєстр для ваших власних пакетів, який заодно кешує пакети з npm

Альтернатива npm Teams, GitHub Packages і JFrog Artifactory на вашій машині.

Що таке Verdaccio?

Verdaccio — легкий приватний npm-реєстр, який команди й розробники-одинаки запускають замість платних приватних пакетів npm, GitHub Packages або JFrog Artifactory. Ви публікуєте в нього пакети через npm publish і встановлюєте їх через npm, yarn або pnpm так само, як із npmjs. База даних йому не потрібна: пакети та їхні метадані — це файли на його диску.

А ще він працює як проксі публічного реєстру: пакет, якого в нього немає, приходить із npmjs через його uplink і зберігається, тож наступні встановлення йдуть із Verdaccio, а не з npmjs, а скоуп на кшталт @yourname може лишатися приватним, поки все інше приходить із npm. Його вебсторінка показує readme, версії й залежності кожного пакета.

Цей шаблон запускає Verdaccio зі сховищем у томі й одним акаунтом — іменем користувача й паролем, які ви вказуєте; вони записуються в його файл htpasswd під час кожного запуску. Реєстрацію вимкнено, а пакети, і ваші, і з npm, читати й встановлювати може лише користувач, який увійшов, тож реєстр не стане відкритим дзеркалом для сторонніх.

Хостинг Verdaccio на Pethost

  1. Ви входите в Pethost — з ключем доступу, через GitHub або Google. Машини ще немає? Ви обираєте тариф, і посилання чекає, доки машина не буде готова.
  2. Вікно «Новий проєкт» відкривається на застосунку Verdaccio. Ви заповнюєте те, що він просить, і натискаєте «Створити проєкт»: Ім’я користувача, Пароль адміністратора.
  3. За хвилину-дві Verdaccio працює за власною адресою з HTTPS. Секрети створюються випадково, а дані потрапляють у щонічний бекап.
  4. Це проєкт як будь-який інший: ви або ваш агент можете його змінити, відкотити або відновити.

Питання про Verdaccio

Verdaccio безкоштовний?

Так. Verdaccio має відкритий код за ліцензією MIT, платної редакції в нього немає, і якщо запускати його самому, платити доведеться лише за машину.

Як опублікувати пакет у Verdaccio?

Виконайте npm login --registry https://your-address/ зі своїм іменем користувача й паролем, потім npm publish --registry https://your-address/ у каталозі пакета. Якщо задати publishConfig.registry у package.json або registry у .npmrc, адресу не доведеться набирати щоразу.

Чи може Verdaccio встановлювати й публічні пакети?

Так. Пакет, якого немає у Verdaccio, стягується з npmjs через його uplink і кешується, тож npm, yarn або pnpm можна спрямувати лише на Verdaccio й отримувати і свої пакети, і публічні. У цьому шаблоні для встановлення теж треба ввійти.

Чи працює Verdaccio з yarn і pnpm?

Так. Verdaccio розмовляє протоколом npm-реєстру, тому npm, yarn і pnpm публікують у нього й встановлюють із нього, щойно в їхньому налаштуванні реєстру вказано його адресу і в них є його токен.

Скільки пам’яті й диска потрібно Verdaccio?

Verdaccio має скромні вимоги: близько 100 MB пам’яті; на диску лежать ваші пакети й публічні пакети, встановлені через нього, по кілька мегабайтів кожен. На Pethost йому вистачить тарифу Starter, і поруч залишиться місце для інших застосунків.

Verdaccio: файл Docker Compose

Шаблон — це цей compose.yaml і змінні, які записуються в .env проєкту під час його створення. Pethost запускає файл так, як його написано.

Контейнери: verdaccio (verdaccio/verdaccio:6).

Томи, у щонічному бекапі: 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:

Ще в категорії «Інструменти розробника»