0

The verdaccio configuration doesn't change much, only below modifications.

storage: /dat/verdaccio
listen:
  - 0.0.0.0:4873

The server is deployed in remote server with a domain, like https://verdaccio.x.com

The issue is: If I publish simple scoped package like @x/abc, and this package doesn't have dependencies with scope like @types/node, then it will be published success. But if the package @x/abc contains scoped dependencies, then it will get 405 Not Allowed http error.


edits: just found out @types/node dependency will affect publishing.

demo package with single package.json only, it can be published on my machine verdaccio, but has 405 error when publish it to remote server through https domain. If I remove the @typesss/abc dependency, it will be published success.

{
  "name": "@x/u3i-ejlement-v-test2323246",
  "version": "1.0.0",
  "description": "",
  "private": false,
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "license": "ISC",
  "devDependencies": {
    "@typessssss/2node": "latest"
  }
}

The verdaccio config.yaml on remote server:

#
# 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/tree/5.x/conf
#
# Read about the best practices
# https://verdaccio.org/docs/best

# path to a directory with all packages
storage: /dat/verdaccio
# path to a directory with plugins to include
plugins: ./plugins

# https://verdaccio.org/docs/webui
web:
  enable: false
  title: Verdaccio
  logo: logo.png
  scope:
  # comment out to disable gravatar support
  # gravatar: false
  # by default packages are ordercer ascendant (asc|desc)
  # sort_packages: asc
  # 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
  #  HTML tags injected after manifest <scripts/>
  # scriptsBodyAfter:
  #    - '<script type="text/javascript" src="https://my.company.com/customJS.min.js"></script>'
  #  HTML tags injected before ends </head>
  #  metaScripts:
  #    - '<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>'
  #    - '<script type="text/javascript" src="https://browser.sentry-cdn.com/5.15.5/bundle.min.js"></script>'
  #    - '<meta name="robots" content="noindex" />'
  #  HTML tags injected first child at <body/>
  #  bodyBefore:
  #    - '<div id="myId">html before webpack scripts</div>'
  #  Public path for template manifest scripts (only manifest)
  #  publicPath: http://somedomain.org/

# https://verdaccio.org/docs/configuration#authentication
auth:
  htpasswd:
    file: ./htpasswd
    # Maximum amount of users allowed to register, defaults to "+inf".
    # You can set this to -1 to disable registration.
    # Hash algorithm, possible options are: "bcrypt", "md5", "sha1", "crypt".
    # algorithm: bcrypt # by default is crypt, but is recommended use bcrypt for new installations
    # Rounds number for "bcrypt", will be ignored for other algorithms.
    # rounds: 10

# https://verdaccio.org/docs/configuration#uplinks
# a list of other known repositories we can talk to
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:
  '@x/*':
    # 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/publish 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: 0
  # Allow `req.ip` to resolve properly when Verdaccio is behind a proxy or load-balancer
  # See: https://expressjs.com/en/guide/behind-proxies.html
  # trustProxy: '127.0.0.1'
# https://verdaccio.org/docs/configuration#offline-publish
# publish:
#   allow_offline: false

# https://verdaccio.org/docs/configuration#url-prefix
# 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/'

# 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
# - localhost:4873            # default value
# - http://localhost:4873     # same thing
listen:
  0.0.0.0:4873
# - 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://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"}'

middlewares:
  audit:
    enabled: true

# https://verdaccio.org/docs/logger
# log settings
log: { type: stdout, format: pretty, level: http }
#experiments:
#  # support for npm token command
#  token: false
#  # disable writing body size to logs, read more on ticket 1912
#  bytesin_off: 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;
#  }

# translate your registry, api i18n not available yet
# i18n:
# list of the available translations https://github.com/verdaccio/verdaccio/blob/master/packages/plugins/ui-theme/src/i18n/ABOUT_TRANSLATIONS.md
#   web: en-US

When 405 error happened, the verdaccio log doesn't show any information about this 405.


Answer: Some server config blocked this request

towry
  • 4,131
  • 1
  • 18
  • 25
  • Can you provide the full `package.json` that you are trying to publish? In addition, can you also provide the output of the terminal? Thanks! – AngYC Apr 27 '23 at 01:46
  • In addition, is it possible that it is related to your server config? If this is IIS related, maybe this question can answer it? https://stackoverflow.com/questions/57653725/npm-adduser-returns-error-405-iis-7-webdav-module – AngYC Apr 27 '23 at 01:52
  • @AngYC, Hi, just updated the post with demo package.json and config file. the verdaccio is installed on linux server. – towry Apr 27 '23 at 01:57
  • @AngYC and it is strange, because only `@type\w*/abcd` (like @types/node) dependency will cause this 405 error. – towry Apr 27 '23 at 01:58
  • This is weird, I am running Verdaccio in production for years but never encountered this issue before. Since there's no logs on the server side, you might want to check the load balancer in between (eg. nginx), it might even be something like `PUT` request is not allowed – AngYC Apr 27 '23 at 02:02
  • @AngYC, but remove the @types/node dependency, the package can be published. – towry Apr 27 '23 at 02:04
  • Is `@types/node` dependency the only dependency? Does other scoped `dependencies` have similar issue? (eg. `@lerna/core`). I am suspecting it might even be related to the content length of your package to be published (eg. Some config in your load balancer disallow body length to be too long) – AngYC Apr 27 '23 at 02:07
  • @AngYC only `@types/node` or `@typessss/node`etc is not fine. `@typ/node` is fine and `@typs/node` is fine too. – towry Apr 27 '23 at 02:17
  • That sounds like there's potential a length limit here, what happens if you do `@towry123/abc`? (The hypothesis here is length, but `@typ/node` and `@typs/node` are shorter than those invalid cases) – AngYC Apr 27 '23 at 02:19
  • @AngYC `@towry123/abc` is fine, `type` is fine, only dependency starts with `@type.....` is not fine, no matter the length. `@type/kajdjldjlfjdklfjsjf` is not fine. – towry Apr 27 '23 at 02:23

0 Answers0