Русский
Начать

← Все шаблоны · Инструменты разработчика

Задеплойте 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 — с passkey, через 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:

Еще в категории «Инструменты разработчика»