一、目录结构 verdaccio-docker/
├── docker-compose.yml
├── verdaccio/
│ ├── config.yaml
│ └── storage/ # 自动创建,存放下载的 npm 包
│ ├── htpasswd # 认证账户密码
二、配置文件 1. verdaccio/config.yaml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 storage: /verdaccio/storage uplinks: npmjs: url: https://registry.npmmirror.com/ packages: '@*/*': access: $all publish: $authenticated '**': access: $all publish: $authenticated proxy: npmjs auth: htpasswd: file: /verdaccio/htpasswd max_users: 100 listen: 0.0 .0 .0 :4873 logs: - {type: stdout , format: pretty , level: http } web: title: Verdaccio Private npm registry gravatar: true favicon: https://verdaccio.org/docs/assets/favicon.ico security: api: jwt: sign: expiresIn: 30d verify: someSecret: 'P8VlF5PmcJc' web: sign: expiresIn: 30d verify: someSecret: 'P8VlF5PmcJc'
2. docker-compose.yml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 services: verdaccio: image: verdaccio/verdaccio:latest container_name: verdaccio restart: always ports: - "4873:4873" volumes: - ./verdaccio/config.yaml:/verdaccio/conf/config.yaml - ./verdaccio/storage:/verdaccio/storage - ./verdaccio/htpasswd:/verdaccio/htpasswd environment: - VERDACCIO_PORT=4873 networks: - verdaccio-net networks: verdaccio-net: driver: bridge
三、启动步骤 1. 初始化目录 1 mkdir -p verdaccio-docker/verdaccio/ && touch verdaccio-docker/verdaccio/htpasswd
2. 创建配置文件 将上述两个文件分别保存为:
verdaccio-docker/docker-compose.yml
verdaccio-docker/verdaccio/config.yaml
3.初始化htpasswd # admin/admin@321
docker run --rm httpd:latest htpasswd -nb admin admin@321
...
admin:$apr1$FKx4Htf0$Ao1NhIyrwTlyLZ9U6gzha.
tee >verdaccio/htpasswd <<EOF
admin:$apr1$FKx4Htf0$Ao1NhIyrwTlyLZ9U6gzha.
EOF
4. 启动服务 1 2 cd verdaccio-dockerdocker-compose up -d
5. 验证运行状态 1 2 3 4 5 6 7 8 docker-compose ps docker-compose logs -f verdaccio curl http://localhost:4873
四、使用 Verdaccio 1.发布仓库 No Package Published Yet.
To publish your first package just:
1. Create user
npm adduser --registry http://127.0.0.1:4873/
2. Publish
npm publish --registry http://127.0.0.1:4873/
3. Refresh this page
2. 客户端配置 方式一:使用 npm config(推荐) 1 2 3 4 5 6 7 8 9 10 11 12 npm config set registry http://<服务器 IP>:4873/ npm login cd your-projectnpm publish
方式二:使用 .npmrc 文件 在项目根目录创建 .npmrc:
1 2 registry =http://<服务器 IP>:4873 ///<服务器 IP>:4873/:_authToken =admin_password
方式三:使用 nrm 管理多个仓库 1 2 3 4 5 6 7 8 nrm add verdaccio http://<服务器 IP>:4873 nrm use verdaccio nrm use npm
3. 测试上传与下载 1 2 3 4 5 6 7 8 9 10 mkdir -p test-verdaccio && cd test-verdaccionpm init -y npm install lodash npm publish --access public npm install lodash
五、进阶配置 1. 配置反向代理(Nginx + HTTPS) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 server { listen 80 ; server_name npm.yourdomain.com; return 301 https://$server_name $request_uri ; } server { listen 443 ssl; server_name npm.yourdomain.com; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/key.pem; location / { proxy_pass http://127.0.0.1:4873; proxy_set_header Host $host ; proxy_set_header X-Real-IP $remote_addr ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_set_header X-Forwarded-Proto $scheme ; proxy_http_version 1 .1 ; proxy_set_header Upgrade $http_upgrade ; proxy_set_header Connection "upgrade" ; } }
2. 配置 LDAP 认证 1 2 3 4 5 6 7 8 9 10 11 12 auth: htpasswd: file: /verdaccio/htpasswd max_users: 100 ldap: type: ldapjs search: base: dc=example,dc=com user: cn=admin,dc=example,dc=com password: admin_password filter: (&(objectClass=inetOrgPerson)(uid=%s))
3. 配置邮件通知 1 2 3 4 5 6 7 8 9 10 11 12 13 14 web: gravatar: true title: Verdaccio Private npm registry mail: to: admin@example.com from: no -reply@example.com smtp: host: smtp.example.com port: 465 secure: true auth: user: admin@example.com pass: password
六、常用命令速查
操作
命令
启动
docker-compose up -d
停止
docker-compose down
查看日志
docker-compose logs -f verdaccio
重启
docker-compose restart verdaccio
添加用户
docker exec -it verdaccio htpasswd -b /verdaccio/htpasswd user pass
查看容器状态
docker-compose ps
更新镜像
docker-compose pull && docker-compose up -d
七、注意事项
要点
说明
存储路径
/verdaccio/storage 持久化,删除会丢失缓存
认证文件
/verdaccio/htpasswd 持久化,用户信息不会丢失
内存限制
生产环境建议设置 deploy.resources.limits
端口冲突
确保 4873 端口未被占用
网络隔离
可通过 Docker Compose networks 限制访问
备份策略
定期备份 verdaccio/storage 和 verdaccio/htpasswd
八、备份与恢复 1 2 3 4 5 6 tar -czf verdaccio-backup-$(date +%Y%m%d).tar.gz verdaccio/ tar -xzf verdaccio-backup-20260625.tar.gz -C /path/to/verdaccio-docker/ docker-compose restart verdaccio