使用 Verdaccio 搭建私有 npm 仓库 
Verdaccio 是一个开源的 NPM 私有仓库软件,可用于代理 npmjs.org 的包,以及发布自己的私有包。
本机使用:
bash
pnpm add -g verdaccio
verdaccio可通过在项目下使用 .npmrc 来指定私有仓库地址:
bash
registry=http://localhost:4873/package.json 中的 publishConfig 字段:
json
{
  "publishConfig": {
    "registry": "http://localhost:4873/"
  }
}Docker 安装并测试:
bash
docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio建议自定义私有包的前缀,如 local-* 或者 @my-company/*,通过这种方法可以清楚地把公有包和私有包分开。
Docker Compose 部署 
下面是提供包含 SSL 和 htpasswd 认证的 Docker Compose 配置示例:
yaml
services:
  verdaccio:
    image: verdaccio/verdaccio
    container_name: verdaccio
    environment:
      - VERDACCIO_PORT=4873
    ports:
      - "4873:4873"
    volumes:
      - ./conf:/verdaccio/conf
      - ./storage:/verdaccio/storage
      - ./plugins:/verdaccio/plugins
    networks:
      - verdaccio-net
networks:
  verdaccio-net:
    driver: bridge需要配合以下配置文件 conf/config.yaml:
yaml
# 基础配置
storage: /verdaccio/storage
plugins: /verdaccio/plugins
# 网络设置
listen:
  - 0.0.0.0:4873
# HTTPS 配置
https:
  key: /verdaccio/conf/cert.key
  cert: /verdaccio/conf/cert.pem
  ca: /verdaccio/conf/ca.pem
# 认证配置
auth:
  htpasswd:
    file: /verdaccio/conf/htpasswd
    max_users: -1  # 禁用 npm adduser 注册,设置为正数可限制用户数量
# 上游镜像配置
uplinks:
  npmjs:
    url: https://registry.npmjs.org/
# 包访问权限配置
packages:
  '@*/*':
    access: $authenticated
    publish: $authenticated
    proxy: npmjs
  '**':
    access: $authenticated
    publish: $authenticated
    proxy: npmjs
# 日志配置
logs:
  - {type: stdout, format: pretty, level: http}使用前需要执行以下步骤:
- 准备 SSL 证书(假设证书文件已存在): - 将证书文件重命名并放入 conf目录:- cert.pem(域名证书)
- cert.key(私钥)
- ca.pem(CA 证书,可选)
 
 
- 将证书文件重命名并放入 
- 创建初始用户: bash- # 安装 htpasswd 工具(如果尚未安装) sudo apt-get install apache2-utils # 创建 htpasswd 文件(将 username 替换为你的用户名) htpasswd -c conf/htpasswd username
- 目录结构: text- ├── docker-compose.yml ├── conf/ │ ├── config.yaml │ ├── cert.pem │ ├── cert.key │ └── htpasswd ├── storage/ └── plugins/
- 启动服务: bash- docker-compose up -d
验证配置:
bash
curl -k https://example.com:4873
npm login --registry=https://example.com:4873注意事项:
- 证书需要包含完整的证书链,建议使用 Let's Encrypt 的免费证书
- 如果使用自签名证书,客户端需要添加 --strict-ssl=false参数
- 生产环境建议将 max_users 设置为正数以限制注册
- 可以使用 docker exec -it verdaccio htpasswd /verdaccio/conf/htpasswd username添加新用户
- 如果不需要 CA 证书,可以删除配置文件中的 ca 配置项
如果需要自动生成自签名证书(仅限测试环境),可以使用以下命令:
bash
openssl req -x509 -newkey rsa:4096 -keyout conf/cert.key -out conf/cert.pem -days 365 -nodes -subj "/CN=example.com"