Nexus Repository Manager 3 搭建 npm 私服 - 知乎

前一段时间正好有一个 使用 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

请先后发表评论
  • 最新评论
  • 总共1条评论
DeepMind

Rain酱

https://deepmind.t-salon.cc/article/1462

2019-03-21 15:25:13 回复