由于文章格式和图片解析问题,为了更好的阅读体验,读者可前往 阅读原文
在公司团队内一般都会拥有私有的工具包或者其他依赖,这些东西又是比较敏感的信息,因此如npm私库的搭建在公司内部必不可少。
私库搭建方式有很多,本篇通过docker+nexus3
的进行搭建。
本人使用ARM架构Centos7.9虚拟机环境进行搭建,请你阅前了解
扫码关注攻粽号,查看更多优质文章
安装docker
docker安装步骤可以参考本人的 docker安装一文
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 查看可安装的docker版本
sudo yum list docker-ce --showduplicates | sort -r
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动docker
sudo systemctl start docker
安装nexus3
-
这里采用宿主机卷映射,先创建nexus配置卷
mkdir -p /srv/nexus # 授权 chown -R 200 /srv/nexus
-
下载镜像并运行
这里本人是在arm架构的Centos上安装的,需要支持arm架构的nexus镜像,由于官方镜像没有提供支持arm架构的镜像,这里选择了别人编译好的支持arm架构的镜像,你可以选择非arm架构的官方镜像
# 启动nexus3容器,会从远程拉取镜像 docker pull klo2k/nexus3 # arm架构 # 运行容器 docker run -d --name nexus3 --restart=always \ -p 8081:8081 \ -p 8000-8010:8000-8010 \ -v /srv/nexus:/nexus-data \ klo2k/nexus3
nexus内部默认会使用
8001
作为http访问的端口,把它映射到主机上,然后再暴露一个端口范围供后续其他使用 -
运行后根据机器配置一般需要等待一段时间,你可以查看其运行日志:
docker logs -f nexus3
初始密码
nexus的默认账户为admin
,初始密码在容器内/nexus-data/admin.password
文件中,如果你进行了卷挂载也可以在宿主机卷中查看
# 进入容器查看admin密码
docker exec nexus3 cat /nexus-data/admin.password
b75981d3-affe-45f1-ba6f-10046b8bc4b9
# 挂载了数据卷可以进行本地查看
cat /srv/nexus/admin.password
访问nexus3
访问地址为YourIP:PORT
如localhost:8081,用初始账号密码进行登录,admin/xxxxx ,初次进入后可以修改密码
基本面板左侧可以查找对应的仓库包文件,Brower菜单进入可以看到对应的仓库
上面的设置按钮需要有权限才可以看到,当前admin用户,可以看到,你也可以创建其他用户并分配适当的权限,所有的仓库储存、角色权限等操作都在设置面板里配置。
通常我们只需要关注下图红框中的配置即可
创建存储集
创建数据存储单元集用来存放数据,你可以将Blob store理解为存储文件的地方,repository相当于数据库用来映射文件路径。
为什么要创建Blob Store呢?当你创建了某个blobstore就会某个关联的repository的内容存储到这里,你可以创建多个blobstore关联多个repository,这样就防止了数据的污染。
点击左侧菜单Blob Stores ,然后点击右侧 Create Blob Store 按钮
然后创建页面先选择数据类型,这里选择 File 类型,然后给数据存储单元命名,最好语义明确如:npm,方便以后查看,都填写后点击保存按钮即可,列表中就会看到刚刚创建的存储单元集合
创建仓库
创建仓库关联存储集,点击左侧菜单Repositories ,然后点击右侧 Create Repository 按钮
然后选择npm(hosted)
,这里你会看到有hosted、proxy、group三类npm仓库,三者区别后面会讲。
进入创建仓库配置页面,如下,需要填写仓库名称、存储集、发布策略
注意以下几点:
- 同一类型的仓库名需要唯一,防止和旧的仓库重名
- 储存集选择你前面创建的存储集,如npm
- 发布策略中包含集中策略:根据你的需求设置,这里选择允许重发
- 允许重发
- 禁止重发
- 只读
- 通过复制发布(不推荐)
来自官方的解释:If you are using replication, this policy is automatically set to Deploy by Replication Only. This will block all deployment to the hosted repository except by the internal replication mechanism. You should not manually set this policy to Deploy by Replication Only. If you disable replication, Nexus Repository automatically restores your previous deployment policy.
最后点击创建仓库按钮,就可以在仓库列表中找到刚刚创建的仓库了
点击copy按钮
查看仓库地址
创建角色
前面npm-hosted创建好后,其实就可以上传自己的npm包到这个仓库了,一般不会使用系统账户进行登录发包,所以需要创建新的用户并授权npm相关权限,因此需要创建对应的角色和权限
点击左侧Roles
菜单栏,在右侧面板点击创建角色,填写对应的角色名、id、描述等(仍然推荐语义明确)
然后选择对应的权限,搜索npm,点击Transfer All
将所有加入右侧列表
如果你有还需要其他权限可以自行添加,这里讲下除了可以选择权限外,也可以选择已经存在的角色,这样也会拥有其权限,效果一样
最后点击保存
创建用户
有了角色就可以创建用户关联此角色了,点击左侧Users菜单,在右侧面板中点击创建用户
- 用户ID:用来登录npm的用户名
- Firstname:显示名字,随意填
- Lastname:随意填
- Email:可以随意填
- password:你的密码
- status:用户状态,选择active
:::warning
以上红框中需要重视其他可以随意填
:::
接着关联角色,将刚刚创建的角色移入右侧,点击创建
权限认证
有了相关的角色后,需要对一些权限添加认证,也就是需要登录认证,才可以进行操作
点击左侧Realms
菜单,将你需要认证的权限移入右侧,点击保存
发布npm包
-
本地使用npm初始化创建一个项目
npm init -y
这里package.json文件内容如下,主文件为
index.js
{ "name": "test-deploy", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { }, "keywords": [], "author": "", "license": "ISC" }
-
简单创建一个
index.js
文件:const add = (x, y) => x + y; module.exports = { add }
-
设置npm仓库,你可以使用
npm config set registry xxxx
创建,这里推荐在项目创建.npmrc
文件# 地址改为自己 npm-hosted 仓库地址 registry=http://192.168.10.10:8081/repository/npm-hosted/
或者在
package.json
中添加:"publishConfig": { "registry": "http://192.168.10.10:8081/repository/npm-hosted/" }
-
登录并发布
# 使用创建的用户登录 npm login
# 发布 npm publish
-
在仓库中查看
验证npm包
在一个新项目中安装上传的npm包,注意如果你没有设置npm全局仓库配置,需要创建.npmrc
添加npm仓库
可以看到安装成功,接着创建index.js
文件并引用里面的add
方法
// index.js
const { add } = require('test-deploy');
console.log(add(1,2));
可以看到运行成功
这里有一个坑,之所以安装成功,是因为我们的库中没有依赖其他的npm包,如果有依赖私有仓库没有的npm包,这里安装时就会报错,我们复现下:
重新在我们的npm包里安装一个私有仓库没有的依赖,这里安装day
,注意需要先把.npmrc
中的仓库注释掉,这样可以从官方的npm
仓库中下载
# test-deploy 中安装 day
➜ devops test-deploy npm install day
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN test-deploy@1.0.0 No description
npm WARN test-deploy@1.0.0 No repository field.
+ day@0.0.2
added 1 package from 1 contributor and audited 1 package in 1.57s
found 0 vulnerabilities
修改版本号:
{
"name": "test-deploy",
"version": "1.0.1",
"description": "",
"main": "index.js",
"scripts": {},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"day": "0.0.2"
}
}
重新发布:注意.npmrc
添加仓库地址
➜ devops test-deploy npm publish
npm notice
npm notice
标签:npm,package,私有,创建,deploy,仓库,Docker,docker
From: https://www.cnblogs.com/98kk/p/18657276