nexus布署私有npm仓库

# 布署

基于 docker布署 nexus3。

docker pull sonatype/nexus3
# docker volume create --name nexus-data
docker run  --restart=always -d -p 8081:8081 --name nexus -v /data/nexus:/nexus-data sonatype/nexus3
1
2
3

镜像详情:https://hub.docker.com/r/sonatype/nexus3

将IP和端口发布到外网,或直接使用内网IP和端口,以下用 http://172.21.64.2x:8081 为例。

修改密码

# 进入容器: 
docker exec -it nexus3 sh 
# 查看默认密码:
cat /nexus-data/admin.password 
# 再登入后会提示修改密码;或者点击头像修改密码即可
1
2
3
4
5

# 仓库概念说明

  • npm(proxy): 可配置代理的仓库,当此仓库没有相应包时 会从配置的第三方仓库拉取 并缓存到本地proxy仓库;
  • npm(hosted):开发自己的包推送到此仓库,需登录才能推送;
  • npm(group): 可配置包含上面两种仓库,这样用户只需要配置npm(group) 这个地址即可 ,避免配置npm(proxy) 和npm(hosted) 两个地址

# 权限

# Roles

创建新组 publishPrivlleges 选择 nx-repository-view-*-*-*

# Users

创建新用户 npmRoles 选择 publish

# Realms

Active 添加 npm Bearer Token Realm

# 仓库

# Blob Stores (可选)

新增存储,TypeFileNamenpm

# Repositories

  1. proxy 仓库
    1. 新增仓库,Recipenpm(proxy)
    2. Namenpm-proxyRemote storagehttps://registry.npm.taobao.orgBlob storenpm ,其他默认
  2. hosted 仓库
    1. 新增仓库,Recipenpm(hosted)
    2. Namenpm-privateBlob storenpm ,其他默认
    3. 保存后生成的 URLhttp://172.21.64.2x:8081/repository/npm-private/
  3. group 仓库
    1. 新增仓库,Recipenpm(group)
    2. NamenpmBlob storenpmMember repositoriesMembersnpm-proxynpm-private ,其他默认
    3. 保存后生成的 URLhttp://172.21.64.2x:8081/repository/npm/

# 图文过程【要点】

在这里插入图片描述

创建知识库,有3种类型

在这里插入图片描述

创建npm(hosted)私有仓库

在这里插入图片描述

在这里插入图片描述

hosted改成allow redeploy,这样才能运行重复上传一个包,不然会报400:bad request

在这里插入图片描述

proxy的remote storage设置:当私有仓库和代理仓库缓存包里无请求的包时,就会通过这里配置的地址去服务器下载需要的包,然后再缓存下来

在这里插入图片描述

  • name: npm-group,是仓库组的名称。可以包含任何npm的仓库。最终npm install等操作时的地址将会是这个仓库组的地址。
  • group中,将刚创建的私有仓库(npm-hosted)和代理仓库(npm-proxy)拖动到右边。

配置权限:不然在adduser和publish会一直报错401:Unable to authenticate, need: BASIC realm=“Sonatype Nexus Repository Manager” 在这里插入图片描述

# 后面配置总括【要点】

  • npm config set registry http://172.21.64.2x:8081/repository/npm-group/ [全局]

    nrm add nexus http://172.21.64.2x:8081/repository/npm-group/
    nrm use nexus
    
    1
    2
    "publishConfig": {    
    "registry": "http://172.21.64.2x:8081/repository/npm-hosted/"  // 本地
    },
    
    1
    2
    3
  • npm adduser --registry=http://172.21.64.2x:8081/repository/npm-hosted/ [登陆这步很重要]

    npm config list -l #查看全局配置;
    npm whoami #查看登陆用户;
    
    1
    2
  • npm publish --registry=http://172.21.64.2x:8081/repository/npm-hosted

# 本地拉取

# 设置代理 要有后面的后缀/
npm config set registry http://172.21.64.2x:8081/repository/npm/
npm config set sass-binary-site https://npm.taobao.org/mirrors/node-sass
# 安装包
npm i -S private/package
1
2
3
4
5

# 开发

在本地开发目录下执行 npm init ,生成配置,可以都使用默认值。生成 package.json ,示例如下:

{
  "name": "private.package",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "description": "",
  "dependencies": {
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

package.json 添加以下配置:

  "publishConfig": {
    "registry": "http://172.21.64.2x:8081/repository/npm-private"
  },
1
2
3

编写包代码,可以在需要安装的项目中直接引入本地包:

npm i -S /path/to/npm/package
1

当修改包代码时,安装包的项目会自动更新。

# 发布

# 版本控制

npm有一套自己的版本控制标准——Semantic versioning(语义化版本)。package.json里面有一个version字段,具体体现为:

对于 "version":"x.y.z"

  1. 修复bug,小改动,增加z
  2. 增加了新特性,但仍能向后兼容,增加y
  3. 有很大的改动,无法向后兼容,增加x

通过 npm version <update_type> 自动改变版本,update_typepatch, minor,或 major,分别表示补丁,小改,大改。

# 身份认证

运行 echo -n 'npm:password' | openssl base64password 替换为 npm 账号的密码) ,生成编码(例如 xxx )。编辑 ~/.npmrc ,追加以下配置:_auth=xxx

# 发布

npm publish [--tag=beta]
1
上次更新: 2022/04/15, 05:41:27
×