Skip to content

部署 npm 私服

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

verdaccio

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

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

1.拉取镜像

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

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

sh
docker run -d --name verdaccio_tmp verdaccio/verdaccio
docker cp verdaccio_tmp:/verdaccio ./verdaccio-server

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

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

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

3.编写 docker-compose.yaml

注意要进入 verdaccio-server 目录, 然后编写 docker-compose.yaml 因为配置的路径是相对路径, 所以需要进入 verdaccio-server 目录

yaml
services:
  verdaccio:
    image: verdaccio/verdaccio
    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
# 原文件有许多注释, 我删除掉了, 这里只列出关键配置项
# 可以将原来的 config.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:
    # 需要自己生成这个文件, 默认是 bcrypt
    file: /verdaccio/conf/htpasswd
    algorithm: bcrypt
    max_users: 1000 # 最多用户数
    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 }

4. 创建账号认证文件 & 设置权限

sh
# 注意这个路径需要和配置文件中 auth -> htpasswd -> file 的值一样
# 如果配置的是 file: /verdaccio/storage/htpasswd
# 那就应该执行 touch storage/htpasswd
# 注意需要给予这个文件权限, 否则会写入失败, 导致无法注册
cd verdaccio-server
touch conf/htpasswd
chomd 777 conf/htpasswd

# 注意启动之前需要给 storage 也设置权限
chmod -R 777 storage

全部操作没有问题后, 目录结构应该是这样的:

sh
./verdaccio-server/
├── conf
│   ├── config.yaml
│   └── htpasswd
├── docker-compose.yaml
├── plugins
└── storage
    └── data

5 directories, 3 files

5.启动服务

sh
# 启动服务
docker-compose up -d

# 监控日志输出
docker-compose logs -f

6.客户端注册账号并测试登录

sh
npm adduser --registry http://your.verdaccio.com/
# 按照提示输入账号密码和邮箱

# 打开浏览器访问 http://your.verdaccio.com/
# 登录成功后, 可以看到自己的账号信息

注意常见问题

  1. htpasswd 文件没有写入权限, 会导致无法注册
sh
chmod 777 conf/htpasswd
  1. storage 目录没有写入权限, 会导致无法发布 npm 包
sh
chmod -R 777 storage
  1. 输入密码/邮箱的时候一直显示转圈
txt
不用管他正常输入即可, 输入后回车提交

部署其他语音包管理工具的私服

Released under the MIT License.