01 搭建私服的初衷
1.1 为什么搭建私服?
使用 Maven 管理项目依赖时,通常会从 Maven 仓库拉取第三方依赖,此时只需要配置公共仓库源即可。
但是,如果需要使用公司内部依赖,需要同时使用第三方依赖和私有依赖,这就需要搭建私服,用以存储私有组件库。
搭建私服,可以实现如下功能:
- 共享私有依赖,保护敏感信息
- 保存依赖版本,避免依赖变化或升级受影响
- 提升代理速读,缓存常用依赖到私服
- 自定义配置策略、规则、权限等
2.2 为什么选择 Nexus ?
常见仓库管理有如下几种:
Nexus Repository Manager:Nexus 是一个广泛使用的 Maven 仓库管理器,它提供了丰富的功能,包括支持 Maven、Gradle、Ivy 等构建工具,具有强大的缓存和代理能力,以及用户权限控制、部署规则等功能。
Artifactory:Artifactory 是另一个流行的 Maven 仓库管理器,它支持多种构建工具,提供了企业级的功能,例如高度可定制的权限控制、智能缓存和复制、跨数据中心复制、虚拟仓库等。
Archiva:Archiva 是一个轻量级的 Maven 仓库管理器,它提供了基本的 Maven 仓库功能,例如部署、下载和缓存。虽然功能相对较少,但易于安装和使用,适用于小型项目或简单的私有仓库需求。
选择 Nexus 一来是满足需求,需要的功能都包含,二来是比较熟悉。其他管理系统也都可以,视情况选择即可。
02 使用 Docker-Compose 搭建
2.1 Docker-Compose 搭建
首先,编写 docker-compose.yaml
:
version: '3.9'
services:
nexus:
image: sonatype/nexus3:latest
#image: sonatype/nexus3:3.56.0
container_name: nexus3
restart: always
ports:
- 10240:8081
volumes:
- ./nexus-data:/nexus-data
然后,创建目录 ./nexus-data
映射数据(不需要备份的就不需要啦),因为需要配置目录权限,所以这里要手动创建目录:
$ mkdir nexus-data
$ chown -R 200 ./nexus-data
这里修改目录所有者,是因为容器创建了 nexus 用户,uid 为 200,如果不修改,启动容器时,会报各种无权限错误:
# 在容器内查看
bash-4.4$ cat /etc/passwd
# ……
nexus:x:200:200:Nexus Repository Manager user:/opt/sonatype/nexus:/bin/false
最后启动,等待启动成功即可:
$ docker-compose up -d
2.2 Nexus 配置
2.2.1 登录系统
上述配置映射了 10240
端口,所以访问 http://ip:10204
,使用 admin 登录,nexus3 密码在 nexus-data/admin.password
$ cat ./nexus-data/admin.password
9233-22...
2.2.2 配置仓库
首先,顶部选择 【⚙】-> Repository -> Repositories -> + Create Repository
然后,Recipe 选择 maven2,根据情况选择
- maven2 (group):仓库组,也就是「第三方+私有」仓库
- maven2 (hosted):私服本地,「私有仓库」,私人上传的组件、依赖
- maven2 (proxy):代理,「第三方仓库」,阿里云、华为云等
私服配置
私服(hosted)配置,只需要填写名称即可。
但是,由于私服存在很多不同阶段的开发依赖版本,所以最好是创建多个仓库,分别存放开发版、稳定版的依赖。
【Version policy】可以选择 Release
和 Snapshot
,当然如果只是简单的测试,直接选择 Mixed
混合模式即可,这样就可以上传任何阶段的依赖了。
代理配置
代理(proxy)配置,只需要填写名称和地址即可。
【Remote storage】填写 URL,如 https://maven.aliyun.com/repository/public
。
然后点击【Create repository】即可。
配置仓库组
仓库组(group)配置,只需要填写名称,然后选择仓库进行组合即可。
由于开发需要依赖内部 snapshot 版本依赖,所以一般【Version policy】选择 Mixed
。
在 Group ->【Member repositories】中选择需要的仓库,组合起来,保存即可。
然后,在 Maven 的 settings.xml 只需要配置该仓库组,就可以同时使用多个仓库了。
2.2.3 配置角色和用户
角色和用户配置相对比较简单,自行测试即可。
主要是创建角色,分配仓库增删改查权限。然后创建用户,分配角色,就是这么简单的。
References
[1] 云中月. docker 中使用 nexus 镜像搭建 maven 私服. 2023-06-06.
[2] Aqoo. 如何搭建 maven 私有仓库. https://juejin.cn/post/7231902909993631804
, 2023-05-11.