Nexus 搭建私有镜像仓库

Nexus 搭建私有镜像仓库

说明

国内网络环境下直接使用默认的 npm 下载资源过慢,所以很多文章中都建议将 npm 的 registry 切换为 淘宝的 npm 镜像,如下

npm config set registry https://registry.npm.taobao.org

registry 被译为“登记处”,这里指的是镜像仓库,无论 npm 默认的仓库还是淘宝的仓库都是公有的,在一些场景下,我们需要一个私有仓库来托管我们自己的包

针对 npm,Nexus可以提供如下方案

  1. 官方镜像通过代理存储库实现:你可以通过代理存储库来使用 npm 官方镜像仓库或者其他的公有镜像仓库,这些资源已经被存储库代理后就不会出现导致重复下载 package 的情况了
  2. 私有镜像托管:可以在组内共享开发的私有包
  3. 通过“聚合”实现将公有镜像仓库以及私有镜像仓库的聚合,最终对外公开为一个镜像仓库

创建步骤详解

0. 下载并安装 Nexus

  1. MAC 下载地址 下载
  2. 解压文件到 ~/ 下得到两个文件夹 nexus-<version>sonatype-work
  3. 转到应用程序目录 cd ./nexus-<version> & ./bin/nexus run 开启应用
  4. 等到打印出 Started Sonatype Nexus OSS 3.14.0-04 字样
  5. 浏览器打开 http://localhost:8081/
  6. 界面中点击 Sign In, 输入账户密码
  7. 默认凭据admin / admin123 进入后修改密码

1. 创建公有镜像的代理存储库

  1. 点击顶部配置按钮
  2. 左侧 Menu 选择 Respository
  3. 首先创建 Blob Stores Create blob store => input Name => click to create
  4. 再创建一个 Respository Create repository => select npm(proxy) option
  5. 镜像仓库中输入
    • Name 仓库名称
    • Remote storage 要代理的镜像地址,一般写 npm 默认镜像
    • 选择一个 Blob store,选择我们刚才创建的 store
    • 最后填写 http 的身份验证 后保存即可

Nexus 搭建私有镜像仓库

2. 创建私有镜像托管仓库

  1. 点击顶部配置按钮
  2. 左侧 Menu 选择 Respository
  3. 首先创建 Blob Stores Create blob store => input Name => click to create
  4. 再创建一个 Respository Create repository => select npm(hosted) option
  5. 镜像仓库中输入
    • Name 仓库名称
    • 选择一个 Blob store,选择我们刚才创建的 store
    • Deployment policy 设置部署策略为 Allow redeploy 允许部署

Nexus 搭建私有镜像仓库

3. 创建聚合仓库

  1. 点击顶部配置按钮
  2. 左侧 Menu 选择 Respository
  3. 首先创建 Blob Stores Create blob store => input Name => click to create
  4. 再创建一个 Respository Create repository => select npm(group) option
  5. 镜像仓库中输入
    • Name 仓库名称
    • online 接收传入的请求
    • 选择一个 Blob store,选择我们刚才创建的 store
    • Strict Content Type Validation 验证上传内容格式
    • Group 中选择组中关联的存储库

Nexus 搭建私有镜像仓库

4. 设置 Realms 管理活动安全领域及其顺序

主要是需要将 npm Bearer Token Realm 设置到 Active 中,否则执行 npm publish 会报 401 无权限错误

Nexus 搭建私有镜像仓库

5. 创建新用户

  1. 点击顶部配置按钮
  2. 左侧 Menu 选择 Users => create User 进入创建
    • ID 也是用户名
    • Email 邮件
    • Password 密码
    • Roles 选择权限模板

权限模板

  1. 点击顶部配置按钮
  2. 左侧 Menu 选择 Roles => create role 进入创建
    • ID
    • name 用户名
    • Privileges 每一项权限
    • Roles 可以继承的别的权限模板的权限

6. 用户使用配置

  1. 拿到聚合仓库的 URL
  2. 配置用户 npm 镜像
# 直接运行如下命令 最后的地址即为 聚合仓库地址
npm config set registry http://localhost:8081/repository/npm-group/

# 可以在 ~/.npmrc 文件中查看当前镜像仓库的地址

7. 镜像仓库的读写权限

默认情况下,任意访客都可以有‘读’ 的权限,但是在某些情况下或者 用户有 ‘写’的需求时需要用户认证

# 如下方式登录后,会得到一个身份令牌,最终会被存储到 ~/.npmrc _authToken=xxxx...
npm login
# 也可以按照如下方式设置聚合仓库以及私有仓库的登录token
npm adduser --registry=http://localhost:8081/repository/npm-group/
npm adduser --registry=http://localhost:8081/repository/npm-privite/

# 根据提示输入账户名密码(username 包含大写字母不可以)

8. 私有组件上传

在需要上传的包的 package.json 中设置 publishConfig

# 将上传的地址设置为私有仓库地址
{
    "publishConfig": {
        "registry": "http://localhost:8081/repository/npm-privite/"
    }
}

这样执行 npm publish 上传的地址就是私有仓库的地址了,而由于聚合仓库中聚合了私有仓库,因此,私有仓库的更新,也会使从聚合仓库获取的内容变成最新的