Skip to content

部署 npm 私服

和 gitea 类似, github 虽然功能完善简单易用, 但是私有仓库和部分功能收费的 所以一些企业选择使用自己部署 gitea 私服来管理代码, npm 私服也是如此 npmjs.org 虽然也足够好用, 但是私有仓库是收费的, 如果要发布一些非开源的包, 就需要自己搭建 npm 私服

verdaccio

verdaccio 是一个轻量级的 npm 私服, 它可以快速部署, 简单易用, 功能也比较全面, 适合个人和小型团队使用

但是由于 verdaccio 没有提供 docker-compose.yaml 文件, 所以我们需要自己编写 docker-compose.yaml 来启动

拉取镜像

sh
# 注意拉取的版本
docker pull verdaccio/verdaccio:6

运行一个容器并获得默认的配置文件

sh
docker run --name verdaccio_tmp -p 4873:4873 verdaccio/verdaccio:6
docker cp verdaccio_tmp:/verdaccio ./verdaccio

# 停止并删除临时容器
docker stop verdaccio_tmp
docker rm verdaccio_tmp

容器中复制的配置文件如下:

txt
./verdaccio/
├── conf
│   └── config.yaml
├── plugins
└── storage

编写 docker-compose.yaml

映射端口, 挂载数据卷, 配置环境变量等

yaml
services:
  verdaccio:
    image: verdaccio/verdaccio:6
    container_name: verdaccio
    networks:
      - node-network
    ports:
      - "4873:4873"
    volumes:
      - "./storage:/verdaccio/storage"
      - "./conf:/verdaccio/conf"
      - "./plugins:/verdaccio/plugins"
    environment:
      # 注意部署的域名
      - VERDACCIO_PUBLIC_URL=https://verdaccio.example.com

networks:
  node-network:
    driver: bridge

volumes:
  verdaccio:
    driver: local
yaml
# 原文件有许多注释, 我删除掉了, 这里只列出关键配置项
# 源码中的默认配置文件: https://github.com/verdaccio/verdaccio/tree/6.x/conf
#
# Read about the best practices
# https://verdaccio.org/docs/best
storage: /verdaccio/storage/data
plugins: /verdaccio/plugins

# https://verdaccio.org/docs/configuration#authentication
auth:
  htpasswd:
    file: /verdaccio/storage/htpasswd
    max_users: 1000
    algorithm: bcrypt
    register: false

security:
  api:
    jwt:
      sign:
        expiresIn: 30d
        notBefore: 1
  web:
    sign:
      expiresIn: 7d

# 注意这里: 上行链路的配置, 如果在当前项目中没有找到就到上游仓库拉取
# 我这里配置了 npmjs, tencent, taobao, huawei 四个上游仓库, 具体配置可以参考官方文档
# https://verdaccio.org/docs/configuration#uplinks
uplinks:
  npmjs:
    url: https://registry.npmjs.org/
  tencent:
    url: https://mirrors.tencent.com/npm/
  taobao:
    url: https://registry.npmmirror.com/
  huawei:
    url: https://repo.huaweicloud.com/repository/npm/

# https://verdaccio.org/docs/configuration#packages
packages:
  "@*/*":
    access: $authenticated
    publish: $authenticated
    unpublish: $authenticated
    proxy: tencent

  "**":
    access: $authenticated
    publish: $authenticated
    unpublish: $authenticated
    proxy: tencent

# https://verdaccio.org/docs/configuration#server
server:
  keepAliveTimeout: 60

# https://verdaccio.org/docs/configuration#notifications
middlewares:
  audit:
    enabled: true

# log settings
log:
  - { type: stdout, format: pretty, level: trace }

启动服务

sh
cd verdaccio
docker-compose up -d
sh
docker-compose logs -f

注意常见问题

  1. 问题 1: storage 目录有权限问题导致无法发布npm包

由于默认的配置文件是从镜像中复制的, 所以要注意给予足够的权限, 否则可能会导致权限问题

sh
chmod -R 777 storage
  1. 问题 2: 输入密码/邮箱的时候一直显示转圈
txt
不用管他正常输入即可

Released under the MIT License.