搭建 npm 私服
前置条件
操作系统环境:
Centos 7.8 ( cat /etc/redhat-release )
依赖环境:
Java 运行环境 1.8
oracle 官网下载
看好版本操作系统版本再下载!我这里的是64位
下载安装
- 在官网下载Nexus Repository Manager OSS 3.x, 放在 /opt/ 目录下
# 解压
tar -zxvf 【压缩文件名.tar.gz】
- 切换到 nexus-3.x/bin ⽬录下,用非root用户安装启动 【对服务器内存要求很高】
./nexus install
./nexus run
网页操作
- 启动完毕后,进入
http://服务器ip:8081, 点击右上角Sign In登录 - 用户名admin,初始密码在安装目录下,
/opt/sonatype/sonatype-work/nexus3/admin.password文件中密码,登录后修改超级管理员密码 - 修改完密码后,会询问是否允许匿名用户访问服务器,选择
Enable anonymous access, 允许匿名用户访问
温馨提示
在Docker中,初始密码与普通安装存放的目录一致,不过要先查看容器的位置。
# 查看正在运行的容器id
docker ps
# 进入容器
docker exec -it 【容器id】 /bin/bash
# 就可以看到opt了
ls
添加npm仓库
点击顶部 ⚙️ 图标,左侧 Rrepositories 菜单, 点击
Create repository按钮新建仓库选择 npm(proxy)
- Name 填写 npm-proxy
- Remote storage 填写 https://registry.npm.taobao.org 或 https://registry.npmjs.org。 ⽤于将包请求代理到此地址
最后点击⻚⾯最下⽅的
Create repository按钮保存再次点击
Create repository按钮, 选择 npm(hosted)- Name 填写 npm-hosted,⽤于存放⾃⼰的私有包,保存配置
再次点击
Create repository按钮, 选择 npm(group)- Name 填写 npm-group
- Member repositories中,将之前新建的两个仓库,添加到右边Members里
npm(group)表示分组,npm(hosted)表示本机私有,npm(proxy)表示远程代理。
若registry配置为group(包括hosted和proxy),⾸先会从hosted取,若⽆则从proxy取并缓存,下 次则会从缓存取。
配置与验证npm仓库
- 查看并设置nodejs的默认仓库地址
# 获取源 默认为 http://registry.cnpmjs.org/
npm config get registry
# 设置源
npm config set registry http://服务器ip或域名:8081/repository/npm-group/
- 设置完后,可以在当前用户目录下找到.npmrc文件,可以看到刚刚加进去的
cat ~/.npmrc
> registry=http://服务器ip或域名:80811/repository/npm-all/
- 随便进入一个目录,初始化package,查看是否从自己的仓库地址拉取包
npm init -y
# 显示安装信息
npm --loglevel info install jquery
# 查看本地包缓存地址 (与私服无关)
npm config get cache

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

发布包到私服
npm发布包是需要先登录的,默认是登录到npm官⽅服务器,若registry已更改为其它地址则可能登录 失败,⽽这⾥我们只是想把包发布到⾃⼰私有的服务器上。
- 添加权限认证设置权限,⚙️-> Security -> Realms -> 将npm Bearer Token Realm 添加到右边Active中
- 新增 nx-deploy 角色
- Security -> Roles -> Create role -> Nexus role
- 给角色添加
nx-repository-view-*-*-*权限

- 新增 deployer 用户, 密码也为 deployer
- Security -> User -> Create local user
- 设定角色为 nx-deploy

- 修改客户端.npmrc 配置
vim ~/.npmrc
registry=http://服务器ip或域名/repository/npm-group/
email=页面上输入的邮箱
always-auth=true
_auth="ZGVwbG95ZXI6ZGVwbG95ZXI="
_auth是 username:password 的base64值 (即这里设置的deploy:deploy),这样设置的好处是publish时就不⽤login了。
- 发布控件到npm私服中的 package.json 需要配置
"publishConfig" : {
"registry" : "http://服务器ip或域名repository/npm-hosted/"
}
- 执行
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配置⽂件,重新指定仓库的⽬录。