部署nexus3
nexus3支持多种安装方法,这次选择使用docker 安装
1. 配置docker compose 配置文件
创建一个docker-compose.yml,填入以下内容
version: '3.1'
services:
nexus3:
image: sonatype/nexus3
ports:
- 8081:8081
- 8088:8088
- 8082:8082
volumes:
- ./nexus-data:/nexus-data
restart: always
volumes:
nexus-data:在docker-compose同目录下,创建nexus-data文件夹,用来挂载nexus3的数据。
由于linux有严格的权限管理,容器无法获取到物理目录的权限。
所以使用一行命令开放挂载文件夹的权限
chmod 777 ./nexus-data这会带来一定的安全风险,在末尾我会放出参考文章,待寻找有更好的方案。
2. 启动服务
在上一步完成后,在docker-compose.yml同目录输入
docker compose up如果控制台出现了如下内容
nexus-rp-nexus3-1 | -------------------------------------------------
nexus-rp-nexus3-1 |
nexus-rp-nexus3-1 | Started Sonatype Nexus OSS 3.50.0-01
nexus-rp-nexus3-1 |
nexus-rp-nexus3-1 | -------------------------------------------------代表服务启动成功,下次启动可以用
docker compose up -d
// -d 代表在后台启动启动成功访问 http://127.0.0.1:8081,就会看到如下页面
3. 修改管理员密码
启动成功后,我们还要去获取管理员密码。
在nexus3开始,密码不再是默认的adminxxx,需要手动去读取文件获取密码。
# 进入容器
docker compose exec nexus3 /bin/bash
# 获取密码
cat /opt/sonatype/sonatype-work/nexus3/admin.password
# eg:338f5b2b-29ec-42c3-8171-4b23967f99a7就会获取到一串密码,点击页面右上角sign in就可以登录
用户名:admin
密码:获取到的密码登录成功后,会让你重新自定义一个密码,然后就可以开始部署私有仓库。
搭建docker 私有仓库
1. 创建对象存储
这一步在与给docker私有仓库创建对应的存储位置。
在nexus3登录管理员账户后,点击设置
导航至 _Repository-->Blob Stores,_配置对象存储。
点击右上角的"Create Blob Store",选择File类型,创建一个名为"docker-blob"的Blob。
最好开启内存警告,避免硬盘占满。
如图:
2. 创建仓库(私有、代理、群组)
在开始前,先说清楚在nexus3中创建仓库的三个概念。
如图
- Group: 群组,用于拉取Proxy和hosted仓库的内容,一般只用来拉取。
- Proxy: 代理仓库,用于从官方仓库拉取镜像并在本地保存,限制为只读。
- Hosted 私有仓库,用于保存私有镜像
2.1 创建私有仓库(hosted)
导航到Repository -> Repositories,点击右上角的"Create repository",
选择"docker (hosted)",然后如图填入对应参数
在这其中
- Name 是仓库名,任意取,必填
- Http 是传输协议,填入对应端口,就可以用独立端口去访问。
- Blob Store 存储对象,选择第一步所创建的存储对象。
- Enable Docker V1 API 兼容性选项,建议打勾。
这样就创建好了一个私有仓库。
2.2 创建代理仓库
与第一步相同,在选择仓库类型时候选择"docker (proxy)",然后如图填入对应参数:
重复参数和上一步一样,就不再介绍,介绍主要参数。
- Remote storage 被代理的远程仓库地址,这里填入"https://registry-1.docker.io"
- Http 可以不填,一般都会访问Group服务器
2.3 创建群组仓库
创建仓库时,选择"docker(group)",然后如图填入对应参数:
- Group 群组成员,访问的话就会去members里的仓库里拉取
- Http 端口填8082 ,这样访问时候就用8082端口。
这样一个群组仓库就创建完成了。
3. 测试仓库可用性
3.1 测试是否可以连接
docker login -u admin -p adminxxx 127.0.0.1:8088 #hosted
docker login -u admin -p adminxxx 127.0.0.1:8082 #group
# 出现以下内容就连接成功
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/Deer404/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded3.2 测试拉取镜像
拉取文件
docker pull 127.0.0.1:8082/redis
# 出现以下内容就代表代理仓库拉取成功
Using default tag: latest
latest: Pulling from redis
Digest: sha256:7b83a0167532d4320a87246a815a134e19e31504d85e8e55f0bb5bb9edf70448
Status: Image is up to date for 127.0.0.1:8082/redis:latest
127.0.0.1:8082/redis:latest查看一下,代理仓库的内容,如图就代表拉取成功。
3.3 测试推送镜像
# docker推送前,要给镜像打tag
docker tag python 127.0.0.1:8088/python
# 推送前记得docker login hosted仓库
docker push 127.0.0.1:8088/python
# 出现以下内容就成功了
The push refers to repository [127.0.0.1:8088/python]
7db0b7dc960a: Pushed
76ff57e73979: Pushed
13cf5de1dd97: Pushed
5c563cc8b216: Pushed
d4514f8b2aac: Pushed
5ab567b9150b: Pushed
a90e3914fb92: Pushed
053a1f71007e: Pushed
ec09eb83ea03: Pushed
latest: digest: sha256:aa25de88a84b4c966ce581bda763553da7a093a06315adec8830c3d39b832196 size: 2218这样一个docker私有仓库就算搭建完成了。
搭建npm 私有仓库
通过搭建docker仓库,基本步骤以及熟悉,接下来简化流程,只讲参数 npm包连接可以不用独立端口,所以都可以不勾选http。
1. 创建对象存储
导航至 _Repository-->Blob Stores,_配置对象存储。
点击右上角的"Create Blob Store",选择File类型,创建一个名为"npm-blob"的Blob。
最好开启内存警告,避免硬盘占满。
如图:
2. 创建仓库(私有、代理、群组)
2.1 创建私有仓库(hosted)
导航到Repository -> Repositories,点击右上角的"Create repository",
选择"npm (hosted)",然后如图填入对应参数
在这其中
Name 是仓库名,任意取,必填
Http 是传输协议,填入对应端口,就可以用独立端口去访问。(选填)
Blob Store 存储对象,选择第一步所创建的存储对象。
Deployment policy 控制部署和更新的权限,建议是"Allow redeploy"
这样就创建好了一个私有仓库。
2.2 创建代理仓库
与第一步相同,在选择仓库类型时候选择"npm (proxy)",然后如图填入对应参数:
重复参数和上一步一样,就不再介绍,介绍主要参数。
- Remote storage 被代理的远程仓库地址,这里填入"https://registry.npmjs.org"或者淘宝源也可以
2.3 创建群组仓库
创建仓库时,选择"npm(group)",然后如图填入对应参数:
- Group 群组成员,访问的话就会去members里的仓库里拉取 这样一个群组仓库就创建完成了。
3. 测试仓库可用性
3.1 设置为远程仓库
npm config set registry http://127.0.0.1:8081/repository/npm-group/
npm config get registry
http://127.0.0.1:8081/repository/npm-group/3.2 测试拉取仓库
npm install -g live-server
# 出现以下内容就是安装成功
added 204 packages in 8s查看一下,代理仓库的内容,如图就代表拉取成功。
3.3 测试推送npm包
推送到npm包前,需要先去nexus创建新用户和添加对npm用户的授权。
导航到Security -> Realms里,添加对npm Token的鉴权,如图:
然后,导航到Security -> User里,点击“Create local user”,在跳转的表单里,填入如下图参数:
- ID npm登录时的用户名
- Email npm登录时的邮箱
- Password npm登录时的密码
- Status 账户状态,选择"Active",激活账户。
- Roles: 用户组添加,添加到nx-admin。
完成上两步操作以后,就可以开始测试推送npm包了。 创建一个项目文件夹,名为"js-demo-lib"。 使用npm yarn等包管理工具初始化项目,例如:
npm init在生成的"package.json"里,修改以下内容:
// package.json
"type":"module",
// 设置推送仓库
"publishConfig": {
"registry": "http://localhost:8081/repository/npm-hosted/"
}打开终端,输入以下命令
npm adduser --registry=http://localhost:8081/repository/npm-hosted/
# 成功会出现如以下内容 eg:
Username: deer
Password:
Email: (this IS public) wuhu@qifei.com
Logged in as deer on http://localhost:8081/repository/npm-hosted/.接着在项目根目录,输入
npm publish
# 成功会出现以下内容 eg:
npm notice
npm notice 📦 js-demo-lib@1.0.0
npm notice === Tarball Contents ===
npm notice 92B index.js
npm notice 315B package.json
npm notice === Tarball Details ===
npm notice name: js-demo-lib
npm notice version: 1.0.0
npm notice filename: js-demo-lib-1.0.0.tgz
npm notice package size: 396 B
npm notice unpacked size: 407 B
npm notice shasum:3422c6806526147eb226da09d5df396be8f3d064
npm notice integrity: sha512-yM9HeFBcX14nC[...]tr0FZbG25YhYQ==
npm notice total files: 2
npm notice
npm notice Publishing to http://localhost:8081/repository/npm-hosted/这样就推送成功到了私有仓库,我们可以验证一下。 导航到 Browse -> npm-hosted,如图:
成功推送!这样一个npm私有仓库就算完成了,平常拉取都是从group仓库,只有推送时,才使用hosted仓库。
参考文章
- 解决docker compose volume 权限问题: https://stackoverflow.com/questions/66004339/docker-compose-permission-denied-with-volume
