前一段时间正好有一个 使用 Nexus 搭建 npm 私服的任务分配到手中。此篇记录整个过程。
关于 Nexus Repository Manager 3
其实 Sonatype 的官网上 有它每个产品很详尽的文档,整个安装配置流程并不复杂。而 Nexus Repository Manager 3 也不仅仅可以用于 npm 私服。还可以用于 maven、bower 仓库等,支持范围广泛。
英文好的同学可以直接查看 Nexus Repository Manager 3 官方文档
Repository Manager 3 官方文档
下载
官方提供了几种平台的 下载链接 :
我们(Linux)选择 Unix archive 即可。 执行:
$ wget https://download.sonatype.com/nexus/3/latest-unix.tar.gz
等待下载完成(我下载的时候速度挺慢的)。会下载到当前目录 lastest-unix.tar.gz
将压缩包移动到 /opt 目录下:
$ sudo mv latest-unix.tar.gz /opt/nexus3.tar.gz
然后进入/opt目录下解压缩:
$ cd /opt
$ sudo tar -xzvf nexus3.tar.gz
该文件会解压缩到当前目录:
nexus-3.11.0-01 和 sonatype-work 为解压出来的文件夹
已下载解压完毕,进行下一步。
安装
1、环境
在运行 之前, 要确保已具备运行环境。
官网文档 安装 一项里提示 需要 JRE。
Nexus Repository Manager requires a Java 8 Runtime Environment (JRE) from Oracle.
Nexus Repository Manager 需要 Oracle 的 Java 8 运行时环境(JRE)
在安装前先检查 下 java 环境是否已安装
$ java -version
如果已有java环境 则显示如下信息(版本号可能不同):
java -version 输出
未安装 则可使用 apt-get 安装:
$ sudo apt-get install default-jre
安装完后再执行 查看版本 即可看到上面图片内容。
2、Nexus Repository Manager 3
之前我们已经下载好了 Nexus Repository Manager 3 ,并且移动到了 /opt 目录下。这个时候我们进入到 /opt/nexus-3.3.1-01/bin 目录下执行
$ sudo ./nexus run
就可以将 Nexus Repository Manager 3 跑起来了。只不过 repository manager 会在当前 shell 运行 并 输出日志,必须通过 ctrl + c 退出。这种方式运行难以管理和维护。服务器重启后还需要手动执行启动 repository manager ,不是很方便。所以我们接下来把它作为一个服务运行。
作为服务运行
为了以后方便,单独创建一个 nexus 用户用来运行和管理 Nexus Repository Manager。
# 创建用户并指定用户目录
$ sudo useradd -d /home/nexus -m nexus
# 授权
$ sudo chown -R nexus:nexus /home/nexus
$ sudo chown -R nexus:nexus /opt/nexus-3.11.0-01
$ sudo chown -R nexus:nexus /opt/sonatype-work/
然后将 /opt/nexus-3.11.0-01/bin 目录下的 nexus.rc 修改为如下内容:
官方文档列举了几个工具将 Nexus Repository Manager 作为服务运行的 示例。
我们使用其中一种即可,怎么方便怎么来。
在作为服务运行之前,先更改一下 Nexus Repository Manager 运行的端口。找到 /opt/sonatype-work/nexus3/etc/ 目录下的 nexus.properties 文件进行修改:
去掉#并修改端口号
选一个不与其他程序冲突的端口号设置。此处我设置的端口号为 8090。 (记得打开服务器的对应端口)
接下来,将 Nexus Repository Manager 链接到系统启动脚本,然后使用 update-rc.d 将其作为服务启动(_update-rc.d_命令,是用来更新系统启动项的)
$ sudo ln -s /opt/nexus-3.11.0-01/bin/nexus /etc/init.d/nexus
$ cd /etc/init.d
$ sudo update-rc.d nexus defaults
$ sudo service nexus start
可以通过查看 log 检查是否启动成功:
$ tail -f /opt/sonatype-work/nexus3/log/nexus.log
tail 命令验证服务是否已成功启动。如果成功,您应该看到一条消息,通知您它正在侦听HTTP。
启动成功后可以使用以下等命令:
# 重启 nexus 服务
$ sudo service nexus restart
# 停止 nexus 服务
$ sudo service nexus stop
# 查看 nexus 服务状态
$ sudo service nexus status
至此 Nexus Repository Manager 3 已经跑在我们服务器上的 8090 端口了。可以通过 ip:port 方式直接访问。
通过ip和端口直接访问
至此服务搭建部分完成!
接下来可以使用 默认的用户名密码登录后进行 npm 仓库的创建和设置:
user: admin
pwd: admin123
创建 Repository
Nexus Repository Manager 3 可以用于多种类型的包管理。此处我们要搭建的是npm包管理私服。
登录后的界面点击 下图箭头所指 设置 按钮。
设置按钮
进入设置界面:
Nexus Repository Manager 设置界面
上图中左面菜单有很多功能。可以在 Security 下的 Users 可以创建用户并设置用户权限,修改用户信息。Logging 下的 Log Viewer 可以查看运行日志。
本次配置主要用到了 Repository -> Repositories 和 Security -> Realms 两项
首先在 Repositories 创建仓库(可以看到已经有一些预置内容):
在 Repositorty -> Repositorties 下点击 Create repositorty 按钮
接下来会进入到 Repositorty 的选择:(npm 有三种)
创建npm仓库时的三种类型
第一种:代理 npm 仓库
将公共 npm 服务器的资源代理缓存,减少重复下载,加快开发人员和CI服务器的下载速度。
创建时选择 npm(proxy) ,只需填写 Name 和 Remote storage (公有库域名)即可。
代理 npm 仓库创建配置项
第二种:私有 npm 仓库
用于 上传自己的npm包 以及第三方npm包。
同样的创建步骤,只不过选择的 仓库类型为 npm(hosted)。 只填写 Name 即可。
私有 npm 仓库配置项
第三种:npm 仓库组
用于将多个内部或外部 npm 仓库统一为一个 npm仓库。被添加到 npm仓库组 中的 其他仓库内的包都能够通过该 npm仓库组 访问到。
例如:可以新建一个npm仓库组将 上面两个刚刚创建的 npm 仓库都添加进去。这样可以通过这个 npm仓库组,既可以访问 公有npm仓库 又可以访问自己的 私有npm仓库。
仓库类型为 npm(group),起一个名字 Name,然后选择需要添加到组里的 其他 npm 仓库。此处我选择的是 npm-external 和 npm-internal(我只创建了这两个)
仓库都创建完毕了。接下来需要验证一下是否可用
在 Repositories 中点击创建的 仓库。可以查看该仓库的 URL。
在项目目录下创建 .npmrc 文件。文件内容为:
将图中registry的URL替换为 npm仓库组的URL
然后随便安装一个 包 试试(日志级别设置为 info):
# 装react吧
$ npm --loglevel info install react
如图。确实是从设置的 npm 私服下载的react。成功。
发布到 npm 私服
除了从 npm 仓库安装依赖。我们还需要将公司内部的 代码打包 发布到 npm 的私服。这里没什么特殊的,就是需要设置一下 Nexus Repository Manager 的权限。这样才能使用 npm login 认证登录到我们的私服。
Realms
此处在 Realms 下。将 npm Bearer Token Realm 添加到 Active 列表内保存即可。
然后可以执行(登录 私有npm仓库):
$ npm login --registry=http://xxxx:8090/repository/npm-internal/
执行命令,提示填写账号密码和邮箱,验证通过后将会在 用户主目录下的 .npmrc 文件中插入一条 此仓库 url 和对应的 token。
箭头所指为执行命令后插入的值
在确保项目有 package.json 前提下,执行:
$ npm publish --registry=http://xxxx:8090/repository/npm-internal/
成功发布 npm-test@1.0.0 到npm-internal
如果因为用户名包含大写字母等原因无法使用 npm login 验证登录。还可以使用另一个方法,详见文档,此处不再展开。
done !
至此,使用 Nexus Repository Manager 3 搭建 npm 私服结束。整体流程并不复杂,设置权限那里可能有些小小的坑。文档很详尽,唯一的遗憾是纯英文的,直接读文档不熟悉的话可能会遗漏一些东西。
总结
之前没有过类似的搭建经验,面对英文文档着实看了很久。所幸收获颇丰,这些工作也弥补了我很多常识性知识内容。公司的搭建任务在一个月前已经完成了,这篇是反过头来的回顾总结,也算作工作文档留存。文中内容也是一边操作一边写,有错误欢迎指出。
Original url: Access
Created at: 2019-02-28 20:55:16
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论