搭建 npm 私服

前置条件

操作系统环境:

Centos 7.8 ( cat /etc/redhat-release )

依赖环境:

Java 运行环境 1.8

oracle 官网下载open in new window
看好版本操作系统版本再下载!我这里的是64位

下载安装

  1. 在官网下载Nexus Repository Manager OSS 3.xopen in new window, 放在 /opt/ 目录下
# 解压
tar -zxvf 【压缩文件名.tar.gz】
  1. 切换到 nexus-3.x/bin ⽬录下,用非root用户安装启动 【对服务器内存要求很高】
./nexus install
./nexus run

Docker 安装

使用docker安装open in new window

# 启动dock 端口为8081
docker run -p 8081:8081 --name nexus sonatype/nexus3

网页操作

  1. 启动完毕后,进入http://服务器ip:8081, 点击右上角Sign In登录
  2. 用户名admin,初始密码在安装目录下,/opt/sonatype/sonatype-work/nexus3/admin.password 文件中密码,登录后修改超级管理员密码
  3. 修改完密码后,会询问是否允许匿名用户访问服务器,选择Enable anonymous access, 允许匿名用户访问

温馨提示

在Docker中,初始密码与普通安装存放的目录一致,不过要先查看容器的位置。

# 查看正在运行的容器id
docker ps 

# 进入容器
docker exec -it 【容器id】 /bin/bash

# 就可以看到opt了
ls

添加npm仓库

  1. 点击顶部 ⚙️ 图标,左侧 Rrepositories 菜单, 点击 Create repository 按钮新建仓库

  2. 选择 npm(proxy)

    • Name 填写 npm-proxy
    • Remote storage 填写 https://registry.npm.taobao.org 或 https://registry.npmjs.org。 ⽤于将包请求代理到此地址
  3. 最后点击⻚⾯最下⽅的 Create repository 按钮保存

  4. 再次点击 Create repository 按钮, 选择 npm(hosted)

    • Name 填写 npm-hosted,⽤于存放⾃⼰的私有包,保存配置
  5. 再次点击 Create repository 按钮, 选择 npm(group)

    • Name 填写 npm-group
    • Member repositories中,将之前新建的两个仓库,添加到右边Members里

npm(group)表示分组,npm(hosted)表示本机私有,npm(proxy)表示远程代理。
若registry配置为group(包括hosted和proxy),⾸先会从hosted取,若⽆则从proxy取并缓存,下 次则会从缓存取。

配置与验证npm仓库

  1. 查看并设置nodejs的默认仓库地址
# 获取源 默认为 http://registry.cnpmjs.org/
npm config get registry

# 设置源
npm config set registry http://服务器ip或域名:8081/repository/npm-group/
  1. 设置完后,可以在当前用户目录下找到.npmrc文件,可以看到刚刚加进去的
cat ~/.npmrc

> registry=http://服务器ip或域名:80811/repository/npm-all/
  1. 随便进入一个目录,初始化package,查看是否从自己的仓库地址拉取包
npm init -y 

# 显示安装信息
npm --loglevel info install jquery

# 查看本地包缓存地址 (与私服无关)
npm config get cache
npm fetch

从上图可以看到,fetch地址即为私服地址。 查看刚搭建的私服⾥的内容为空, 在安装了依赖包后,就 会有⼀些被缓存了,下次请求就不会⾛外⽹了。

npm search

发布包到私服

npm发布包是需要先登录的,默认是登录到npm官⽅服务器,若registry已更改为其它地址则可能登录 失败,⽽这⾥我们只是想把包发布到⾃⼰私有的服务器上。

  1. 添加权限认证设置权限,⚙️-> Security -> Realms -> 将npm Bearer Token Realm 添加到右边Active中
  2. 新增 nx-deploy 角色
  • Security -> Roles -> Create role -> Nexus role
  • 给角色添加 nx-repository-view-*-*-* 权限
npm role
  1. 新增 deployer 用户, 密码也为 deployer
  • Security -> User -> Create local user
  • 设定角色为 nx-deploy
npm user
  1. 修改客户端.npmrc 配置
vim ~/.npmrc

registry=http://服务器ip或域名/repository/npm-group/
email=页面上输入的邮箱
always-auth=true
_auth="ZGVwbG95ZXI6ZGVwbG95ZXI="

_auth是 username:password 的base64值 (即这里设置的deploy:deploy),这样设置的好处是publish时就不⽤login了。

  1. 发布控件到npm私服中的 package.json 需要配置
"publishConfig" : {
  "registry" : "http://服务器ip或域名repository/npm-hosted/"
}
  1. 执行 npm publish 即可发布了, 可以在 Search -> npm 列表中看到发布的包

温馨提示

注意:发布是npm-hosted,不是npm-group!
若不想在package.json配置,也可以在命令⾏指定,如下:

npm publish --registry=http://127.0.0.1:8081/repository/npm-hosted/

Nexus3数据备份迁移

内⽹环境下,很多包需要从外⽹移⼊,可以把相关包在外⽹安装测试成功后,然后将缓存的包直接复制 到内⽹即可。

Linux

  • 仓库迁移 Nexus的构件仓库都保存在sonatype-work⽬录中,该⽬录的位置由 nexus/conf/nexus.properties配置⽂件指定。 仓库迁移需要两个过程:备份和还原

  • 备份仓库 将sonatype-work⽂件夹整体备份即可,也可以选择只备份最重要的两个⽂件夹索引(indexer)和仓库(storage)

  • 还原仓库 将备份好的sonatype-work⽂件拷⻉到新的服务器中。然后修改 nexus/conf/nexus.properties配置⽂件,重新指定仓库的⽬录。

Last Updated:
Contributors: kk