Skip to content

使用 Docker 运行 Verdaccio 搭建私有 npm 仓库

Verdaccio 是一个轻量级的私有 npm 代理仓库,适合企业内部或离线环境下使用。

为什么需要私有 npm 仓库

场景说明
离线环境内网开发,无法访问公网 npm registry
私有包管理公司内部组件库不适宜发布到 npm 公网
代理加速缓存公网包,减少重复下载
安全审计控制可用的包版本,扫描漏洞

快速启动

Docker 命令

bash
docker run -d --name verdaccio \
  -p 4873:4873 \
  --restart=always \
  -v /your-path/verdaccio/conf:/verdaccio/conf \
  -v /your-path/verdaccio/storage:/verdaccio/storage \
  verdaccio/verdaccio

参数说明:

参数含义
-d后台运行容器
-p 4873:4873端口映射(宿主机:容器)
--restart=always容器退出时自动重启
-v /conf挂载配置文件目录
-v /storage挂载包存储目录

Docker Compose 方式 (推荐)

yaml
# docker-compose.yml
version: '3.8'
services:
  verdaccio:
    image: verdaccio/verdaccio
    container_name: verdaccio
    ports:
      - "4873:4873"
    volumes:
      - ./verdaccio/conf:/verdaccio/conf
      - ./verdaccio/storage:/verdaccio/storage
    restart: always
bash
docker compose up -d

客户端配置

设置 npm registry

bash
# 设置为私有仓库
npm config set registry http://your-server:4873

# 或仅在当前项目使用
npm config set registry http://your-server:4873 --location project

# 查看当前 registry
npm config get registry

pnpm 配置

bash
pnpm config set registry http://your-server:4873

发布私有包

bash
# 登录
npm login --registry http://your-server:4873

# 发布
npm publish --registry http://your-server:4873

常用配置

创建 conf/config.yaml 自定义 Verdaccio 行为:

yaml
storage: /verdaccio/storage

# 上游代理(缓存 npm 公网包)
uplinks:
  npmjs:
    url: https://registry.npmjs.org/

# 包访问规则
packages:
  '@scope/*':
    access: $all
    publish: $authenticated
  '**':
    access: $all
    proxy: npmjs

# 监听配置
server:
  keepAliveTimeout: 60

# Web 管理界面
web:
  enable: true
  title: '私有 npm 仓库'

访问 http://your-server:4873 即可看到 Web 管理界面,支持搜索包、查看版本等操作。

离线环境注意事项

  • 首次使用前需要联网同步所需的 npm 包
  • 可以使用 npm packpnpm pack 手动导入离线包
  • Verdaccio 存储目录可以直接迁移到离线服务器