Nexus 搭建私有镜像仓库
说明
国内网络环境下直接使用默认的 npm 下载资源过慢,所以很多文章中都建议将 npm 的 registry 切换为 淘宝的 npm 镜像,如下
npm config set registry https://registry.npm.taobao.org
registry 被译为“登记处”,这里指的是镜像仓库,无论 npm 默认的仓库还是淘宝的仓库都是公有的,在一些场景下,我们需要一个私有仓库来托管我们自己的包
针对 npm,Nexus可以提供如下方案
- 官方镜像通过代理存储库实现:你可以通过代理存储库来使用 npm 官方镜像仓库或者其他的公有镜像仓库,这些资源已经被存储库代理后就不会出现导致重复下载 package 的情况了
- 私有镜像托管:可以在组内共享开发的私有包
- 通过“聚合”实现将公有镜像仓库以及私有镜像仓库的聚合,最终对外公开为一个镜像仓库
创建步骤详解
0. 下载并安装 Nexus
- MAC 下载地址 下载
- 解压文件到
~/
下得到两个文件夹nexus-<version>
和sonatype-work
- 转到应用程序目录
cd ./nexus-<version>
&./bin/nexus run
开启应用 - 等到打印出
Started Sonatype Nexus OSS 3.14.0-04
字样 - 浏览器打开
http://localhost:8081/
- 界面中点击 Sign In, 输入账户密码
- 默认凭据admin / admin123 进入后修改密码
1. 创建公有镜像的代理存储库
- 点击顶部配置按钮
- 左侧 Menu 选择 Respository
- 首先创建
Blob Stores
Create blob store => input Name => click to create
- 再创建一个
Respository
Create repository => select npm(proxy) option
- 镜像仓库中输入
- Name 仓库名称
- Remote storage 要代理的镜像地址,一般写 npm 默认镜像
- 选择一个 Blob store,选择我们刚才创建的 store
- 最后填写 http 的身份验证 后保存即可
2. 创建私有镜像托管仓库
- 点击顶部配置按钮
- 左侧 Menu 选择 Respository
- 首先创建
Blob Stores
Create blob store => input Name => click to create
- 再创建一个
Respository
Create repository => select npm(hosted) option
- 镜像仓库中输入
- Name 仓库名称
- 选择一个 Blob store,选择我们刚才创建的 store
- Deployment policy 设置部署策略为 Allow redeploy 允许部署
3. 创建聚合仓库
- 点击顶部配置按钮
- 左侧 Menu 选择 Respository
- 首先创建
Blob Stores
Create blob store => input Name => click to create
- 再创建一个
Respository
Create repository => select npm(group) option
- 镜像仓库中输入
- Name 仓库名称
- online 接收传入的请求
- 选择一个 Blob store,选择我们刚才创建的 store
- Strict Content Type Validation 验证上传内容格式
- Group 中选择组中关联的存储库
4. 设置 Realms 管理活动安全领域及其顺序
主要是需要将
npm Bearer Token Realm
设置到 Active 中,否则执行npm publish
会报 401 无权限错误
5. 创建新用户
- 点击顶部配置按钮
- 左侧 Menu 选择 Users => create User 进入创建
- ID 也是用户名
- Email 邮件
- Password 密码
- Roles 选择权限模板
权限模板
- 点击顶部配置按钮
- 左侧 Menu 选择 Roles => create role 进入创建
- ID
- name 用户名
- Privileges 每一项权限
- Roles 可以继承的别的权限模板的权限
6. 用户使用配置
- 拿到聚合仓库的 URL
- 配置用户 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
上传的地址就是私有仓库的地址了,而由于聚合仓库中聚合了私有仓库,因此,私有仓库的更新,也会使从聚合仓库获取的内容变成最新的