From 58d4a57aaeb19d7953df2dfa3571106029b132e2 Mon Sep 17 00:00:00 2001 From: Wladi Date: Thu, 5 Mar 2026 08:40:58 +0100 Subject: [PATCH] feat(blueprint): add Verdaccio - private node.js package registry (#735) --- blueprints/verdaccio/docker-compose.yml | 17 ++ blueprints/verdaccio/template.toml | 259 ++++++++++++++++++++++++ blueprints/verdaccio/verdaccio.svg | 38 ++++ meta.json | 17 ++ 4 files changed, 331 insertions(+) create mode 100644 blueprints/verdaccio/docker-compose.yml create mode 100644 blueprints/verdaccio/template.toml create mode 100644 blueprints/verdaccio/verdaccio.svg diff --git a/blueprints/verdaccio/docker-compose.yml b/blueprints/verdaccio/docker-compose.yml new file mode 100644 index 00000000..091f3d15 --- /dev/null +++ b/blueprints/verdaccio/docker-compose.yml @@ -0,0 +1,17 @@ +version: "3.8" + +services: + verdaccio: + image: verdaccio/verdaccio:6 + environment: + - VERDACCIO_PORT=4873 + ports: + - 4873 + volumes: + - verdaccio_storage:/verdaccio/storage + - verdaccio_plugins:/verdaccio/plugins + - ../files/conf:/verdaccio/conf + +volumes: + verdaccio_storage: + verdaccio_plugins: \ No newline at end of file diff --git a/blueprints/verdaccio/template.toml b/blueprints/verdaccio/template.toml new file mode 100644 index 00000000..996bbd54 --- /dev/null +++ b/blueprints/verdaccio/template.toml @@ -0,0 +1,259 @@ +[variables] +main_domain = "${domain}" + +[config] +[[config.domains]] +serviceName = "verdaccio" +port = 4873 +host = "${main_domain}" + +[[config.mounts]] +filePath = "/conf/config.yaml" +content = """ +# +# This is the default configuration file. It allows all users to do anything, +# please read carefully the documentation and best practices to +# improve security. +# +# Look here for more config file examples: +# https://github.com/verdaccio/verdaccio/blob/master/docker-examples/README.md +# +# Read about the best practices +# https://verdaccio.org/docs/best + +# Path to a directory with all packages +storage: /verdaccio/storage/data + +# Path to a directory with plugins to include, the plugins folder has the higher priority for loading plugins +# Disable this folder to avoid warnings if is not used +plugins: /verdaccio/plugins + +# Web UI settings +# https://verdaccio.org/docs/webui +web: + title: Verdaccio + # Disable complete web UI + # enabled: false + # Custom colors for header background and font + # primaryColor: "#4b5e40" + # Custom logos and favicon + # logo: ./path/to/logo.png + # logoDark: ./path/to/logoDark.png + # favicon: ./path/to/favicon.ico + # Disable gravatar support + # gravatar: false + # By default, packages are ordered ascending + # sort_packages: asc | desc + # Convert your UI to the dark side + # darkMode: true + # html_cache: true + # By default, all features are displayed + # login: true + # showInfo: true + # showSettings: true + # In combination with darkMode you can force specific theme + # showThemeSwitch: true + # showFooter: true + # showSearch: true + # showRaw: true + # showDownloadTarball: true + # showUplinks: true + # + # HTML tags injected before ends + # metaScripts: + # - '' + # - '' + # - '' + # + # HTML tags injected as first child in + # scriptsBodyBefore: + # - '
html before webpack scripts
' + # + # HTML tags injected as last child in + # scriptsBodyAfter: + # - '' + # + # Public path for template manifest scripts (only manifest) + # publicPath: http://somedomain.org/ + +# Settings for authentication plugin +# https://verdaccio.org/docs/configuration#authentication +auth: + htpasswd: + file: /verdaccio/storage/htpasswd + # Maximum amount of users allowed to register, defaults to "+inf". + # You can set this to -1 to disable registration. + max_users: 1 + +# A list of other known repositories we can talk to +# https://verdaccio.org/docs/configuration#uplinks +uplinks: + npmjs: + url: https://registry.npmjs.org/ + +# Learn how to protect your packages +# https://verdaccio.org/docs/protect-your-dependencies/ +# https://verdaccio.org/docs/configuration#packages +packages: + '@*/*': + # scoped packages + access: $all + 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: $all + + # allow all known users to publish/unpublish packages + # (anyone can register by default, remember?) + publish: $authenticated + unpublish: $authenticated + + # if package is not available locally, proxy requests to 'npmjs' registry + proxy: npmjs + +# To improve your security configuration and avoid dependency confusion +# consider removing the proxy property for private packages +# https://verdaccio.org/docs/best#remove-proxy-to-increase-security-at-private-packages + +# https://verdaccio.org/docs/configuration#server +# You can specify HTTP/1.1 server keep alive timeout in seconds for incoming connections. +# A value of 0 makes the http server behave similarly to Node.js versions prior to 8.0.0, which did not have a keep-alive timeout. +# WORKAROUND: Through given configuration you can workaround following issue https://github.com/verdaccio/verdaccio/issues/301. Set to 0 in case 60 is not enough. +server: + keepAliveTimeout: 60 + # The pluginPrefix replaces the default plugins prefix which is `verdaccio`. Please don't include `-`. If `something` is provided + # the resolved package will be `something-xxxx`. + # pluginPrefix: something + # A regex for the password validation /.{3}$/ (3 characters min) + # An example to limit to 10 characters minimum + # passwordValidationRegex: /.{10}$/ + # Allow `req.ip` to resolve properly when Verdaccio is behind a proxy or load-balancer + # https://expressjs.com/en/guide/behind-proxies.html + # trustProxy: '127.0.0.1' + +# https://verdaccio.org/docs/configuration#offline-publish +# publish: +# allow_offline: false +# check_owners: false +# keep_readmes: 'latest' | 'tagged' | 'all' + +# Define public URL of registry in combination with VERDACCIO_PUBLIC_URL environment variable +# https://verdaccio.org/docs/configuration#url-prefix +# url_prefix: /verdaccio/ +# +# Examples: +# VERDACCIO_PUBLIC_URL='https://somedomain.org' +# url_prefix: '/my_prefix' +# // url -> https://somedomain.org/my_prefix/ +# +# VERDACCIO_PUBLIC_URL='https://somedomain.org' +# url_prefix: '/' +# // url -> https://somedomain.org/ +# +# VERDACCIO_PUBLIC_URL='https://somedomain.org/first_prefix' +# url_prefix: '/second_prefix' +# // url -> https://somedomain.org/second_prefix/ + +# Security settings +# https://verdaccio.org/docs/configuration#security +# security: +# api: +# legacy: true +# jwt: +# sign: +# expiresIn: 29d +# verify: +# someProp: [value] +# web: +# sign: +# expiresIn: 1h # 1 hour by default +# verify: +# someProp: [value] + +# https://verdaccio.org/docs/configuration#user-rate-limit +# userRateLimit: +# windowMs: 50000 +# max: 1000 + +# https://verdaccio.org/docs/configuration#max-body-size +# max_body_size: 10mb + +# https://verdaccio.org/docs/configuration#listen-port +# listen: +# - localhost:4873 # default value +# - http://localhost:4873 # same thing +# - 0.0.0.0:4873 # listen on all addresses (INADDR_ANY) +# - https://example.org:4873 # if you want to use https +# - "[::1]:4873" # ipv6 +# - unix:/tmp/verdaccio.sock # unix socket + +# The HTTPS configuration is useful if you do not consider use a HTTP Proxy +# https://verdaccio.org/docs/configuration#https +# https: +# key: ./path/verdaccio-key.pem +# cert: ./path/verdaccio-cert.pem +# ca: ./path/verdaccio-csr.pem + +# https://verdaccio.org/docs/configuration#proxy +# http_proxy: http://something.local/ +# https_proxy: https://something.local/ +# no_proxy: localhost,127.0.0.1,server.local + +# https://verdaccio.org/docs/configuration#notifications +# notify: +# method: 'POST' +# headers: '[{ "Content-Type": "application/json" }]' +# endpoint: 'https://usagge.hipchat.com/v2/room/3729485/notification?auth_token=mySecretToken' +# content: '{"color":"green","message":"New package published: * {{ name }}*","notify":true,"message_format":"text"}' + +# Settings for middleware plugins +# https://verdaccio.org/docs/plugins#middleware-configuration +middlewares: + audit: + enabled: true + # timeout: 10000 + +# Log settings +# https://verdaccio.org/docs/logger +# Redaction: https://getpino.io/#/docs/redaction +# Synchronous logging: https://getpino.io/#/docs/asynchronous +log: + type: stdout + format: pretty + level: http +# redact: +# paths: ['req.header.authorization','req.header.cookie','req.remoteAddress','req.remotePort','ip','remoteIP','user','msg'] +# censor: '' +# sync: true + +# Feature flags (experimental settings that can be changed or removed in the future) +# https://verdaccio.org/docs/configuration#experiments +# experiments: +# # Support for npm token command +# token: false +# # Enable tarball URL redirect for hosting tarball with a different server. +# # The tarball_url_redirect can be a template string +# tarball_url_redirect: 'https://mycdn.com/verdaccio/${packageName}/${filename}' +# # The tarball_url_redirect can be a function, takes packageName and filename and returns the url, +# # when working with a js configuration file +# tarball_url_redirect(packageName, filename) { +# const signedUrl = // generate a signed url +# return signedUrl; +# } +# Renamed from "experiments" to "flags" in next major release +# flags: +# changePassword: true +# searchRemote: true + +# Translate your registry, API and web UI +# List of the available translations https://github.com/verdaccio/verdaccio/blob/master/packages/plugins/ui-theme/src/i18n/ABOUT_TRANSLATIONS.md +i18n: + web: en-US +""" \ No newline at end of file diff --git a/blueprints/verdaccio/verdaccio.svg b/blueprints/verdaccio/verdaccio.svg new file mode 100644 index 00000000..a9e07b29 --- /dev/null +++ b/blueprints/verdaccio/verdaccio.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/meta.json b/meta.json index b761f094..f3ec429e 100644 --- a/meta.json +++ b/meta.json @@ -6405,6 +6405,23 @@ "open-source" ] }, + { + "id": "verdaccio", + "name": "Verdaccio", + "version": "6", + "description": "A lightweight Node.js private proxy registry", + "logo": "verdaccio.svg", + "links": { + "github": "https://github.com/verdaccio/verdaccio", + "website": "https://www.verdaccio.org/", + "docs": "https://www.verdaccio.org/docs/what-is-verdaccio" + }, + "tags": [ + "node.js", + "package-repository", + "npm" + ] + }, { "id": "vikunja", "name": "Vikunja",