搭建私有 npm 仓库(Verdaccio + docker)

1,961 阅读3分钟

如果使用 docker 来部署一个自己的私有仓库大概率会遇到很多坑,本文章记录下来我搭建下来的过程中所遇到的问题和解决方法。当然了,重点当搭建一个私有仓库的过程。

1、环境

服务器:CentOS Linux release 7.6.1810 (Core)

docker 19.03.8

2、 认识/安装 Verdaccio

认识

Verdaccio: 一个轻量级的Node.js私有代理注册表

官网: verdaccio.org/

安装

docker pull verdaccio/verdaccio

ps: 我安装时最新版为 verdaccio 5.4.0

3、 创建项目结构和文件

-warehouse
  -docker-compose.yml   #docker-compose 配置文件
  -plugins              
  -config
      -config.yaml      #verdaccio 配置文件
  -storage

4、 编辑 docker-compose 配置文件

文件 warehouse/docker-compose.yml

version: '3.4'

services:
  verdaccio:
    image: verdaccio/verdaccio
    container_name: "verdaccio"
    networks:
      - node-network
    environment:
      # VERDACCIO 服务端口
      - VERDACCIO_PORT=3005
      # 当前登录 linux 服务器的用户名
      - VERDACCIO_USER_NAME="root" 
    ports:
      # 宿主和容器的端口
      - "3005:3005"
    volumes:
      - "./storage:/verdaccio/storage"
      - "./config:/verdaccio/conf"
      - "./plugins:/verdaccio/plugins"
networks:
  node-network:
    driver: bridge

上面配置需要注意:VERDACCIO_USER_NAME。 如果未配置或者配置错误,在后面的操作中可能会报错(后面再说)。

5、 编辑 verdaccio 配置文件

文件 warehouse/config/config.yaml

storage: /verdaccio/storage
auth:
  htpasswd:
    file: /verdaccio/conf/htpasswd
uplinks:
  npmjs:
   url: https://registry.npmjs.org/
  server2:
    url: https://registry.npm.taobao.org/
packages:
  '@*/*':
    access: $all
    publish: $authenticated
    proxy: npmjs server2
  '**':
    # 这里如果不设置在使用 npm i xxx、 npm publish 时将会提示包不存在,为了方便这里直接设置上如下两行
    access: $all
    publish: $authenticated
    proxy: npmjs
logs:
  - {type: stdout, format: pretty, level: http}
listen:
  # 这个端口务必对应上
  - 0.0.0.0:3005

6、 启动容器

执行下面命令即可

docker-compose up -d --build

在浏览器打开 服务器网址:端口(3005) 将会出现如下页面

image.png

这里如果按照上面的配置来,应该不会出错的。到这里就结束了。接下来是测试是否可用阶段。


接下来的所有操作都在本地电脑执行即可,没有必要再到服务器折腾。

接下来的所有操作都在本地电脑执行即可,没有必要再到服务器折腾。

接下来的所有操作都在本地电脑执行即可,没有必要再到服务器折腾。

7、 切换 npm 代理

使用 nrm 来操作即可。 为什么 nrm 使用的一篇文章 juejin.cn/post/684490…

安装 nrm :

npm i -g nrm

添加代理

nrm add test <你的服务器地址:3005>

切换到添加的代理

 nrm use test

8、 新增仓库账户

npm adduser

新增完毕后默认会切换到那个用户,可以使用命令确认下是否切换到了新增的这个用户,不然下面的操作可能会出问题。

npm who am i

执行上面命令后会输入当前 npm 用户名

9、 发布包

发布你已经写好的包(这个应该不用介绍吧,毕竟都看这篇文章了)

 npm publish

然后会让你输入账号、密码、邮箱。如果顺利那就回提示成功。

如果遇到如下错误:

npm ERR! 500 Internal Server Error

那应该是服务器读写文件权限问题,排查文件 warehouse/docker-compose.yml 中的 VERDACCIO_USER_NAME 是否和服务器登录用户一致。

image.png

除了用户权限不一致外,还有一个问题也会导致这个错误: 就是手欠在 config/ 目录下建立了一个 htpasswd 的文件夹

image.png

发布成功后刷新仓库页面将会看到发布的包

image.png

10、 安装包

 npm i xxx

这里安装如果提示错误 403 Forbidden

image.png

那就是 warehouse/config/config.yaml 文件中,以下代码配置不对

packages:
 '**':
    # 这里如果不设置在使用 npm i xxx、 npm publish 时将会提示包不存在,为了方便这里直接设置上如下两行
    access: $all
    publish: $authenticated
    proxy: npmjs

到这里就结束了😬