在 CentOS 上,使用 docker 安装 nexus3,并配置 maven 私服,完成对团队封装的 jar 包的管理。
1. 版本
- CentOS Linux release 7.8.2003 (Core)
- Docker version 19.03.9, build 9d988398e7
- Nexus version 3.26.1-02
2. Nexus 安装
此处需要注意的地方是,持久化数据所创建的目录的权限问题。如果不给读写权限,启动容器的时候,容器会不断的重启,docker logs nexus3 分析日志后发现是目录权限的问题。
1 | ## CentOS 7 docker nexus3 |
容器启动后可以通过http://ip:8081/
访问 WEB Management UI。此处因为指定了 NEXUS_CONTEXT ,故访问地址为http://ip:8081/nexus/
,指定此参数的原因是为了做 Nginx 代理,如果不指定,会导致资源无法访问。
第一次打开 WEB UI,默认的登录名是 admin,密码根据提示从容器中/nexus-data
或 宿主/usr/local/docker/nexus-data
目录下的对应文件获取;然后根据提示设置自己的密码。
3. Maven 私服搭建
创建 Blob Stores
Nexus 使用 Blob 格式存储 Repository,首先创建自己的 Blob Stores,用来存储自定义的 Repository。
选择 File 类型,此处我定义 Blob Store 的名字为 example,路径为容器内的绝对路径,默认为
/nexus-data/blobs/example
,此处不建议修改,因为映射到宿主机的路径为此路径。创建 hosted 类型的仓库
hosted repository 的作用,是让用户可以把自己的组件上传至此,比如自己封装的 jar,供团队使用。一般同名仓库中会有两个 hosted 类型的仓库,一个为 releases 库,另一个为 snapshots 库。分别用来存储版本号为正式版的发布,和版本号带有 SNAPSHOT 的发布。
创建 release 发布库
最终创建名称为 example-releases 库,配置如上图所示。需要注意的是不要勾选 Strict Content Type Validation,如果勾选了,会影响拉取,我碰到的 error 是即使正确配置了用户名/密码,在拉取依赖时会一直报 401 unauthorized。
创建 snapshot 快照库
最终创建名称为 example-snapshots 库,配置如上图所示。
创建 group 类型的仓库
仓库组(Repository Group)的作用是将多个仓库(代理仓库和宿主仓库)聚合,对用户暴露统一的地址。当用户需要获取依赖时,请求的是仓库组的地址。
最终创建名称为 example-public 库,配置如上图所示。
4. Maven 全局配置及项目 pom.xml 配置
项目全局配置 setting.xml
因为我的配置有多个私服,所以通过 profiles 配置,具体配置如下:
在管理 UI 点击 copy 按钮获取 example-public 的 url,repository 的 id 与repository 的 name 对应。配置 profile 之后记住激活:
<activeProfile>example-public</activeProfile>
通过 servers 配置与 repository 对应的用户名/密码。其中 example-releases 和 example-snapshots 是用来 deploy 的,其 id 与 pom.xml 中的 id 相对应,这部分在下一小节会有详细说明。
项目中 pom.xml 配置
id 必须与 setting.xml 文件中 server 的 id 相同。
至此,可以使用 deploy 将自定义组件发布到 maven 私服,上传后可以在管理 UI 看到自己的组件。
