Nexus架构及搭建

Nexus是Sonatype 公司开发的 Maven仓库管理器,用于在企业内部搭建私有Maven 仓库,简化构件管理、加速构建速度、控制依赖来源。

官网:https://help.sonatype.com/en/sonatype-nexus-repository.html


1.仓库类型架构

┌────────────────────────────────────────────────────────────┐
│                        Nexus                               │
│                                                            │
│  ┌─────────────┐                                           │
│  │   Group     │  ◄─── 客户端只需配置这一个地址                │
│  │  仓库组      │      即可访问所有底层仓库                    │
│  └──────┬──────┘                                           │
│         │ 按顺序查找                                         │
│    ┌────┼────────────────┐                                 │
│    ▼    ▼                ▼                                 │
│ ┌──────┐ ┌──────────┐ ┌──────────┐                         │
│ │Hosted│ │  Proxy   │ │  Group   │                         │
│ │本地仓库││ 代理仓库  │ │  仓库组   │  ← 嵌套组                │
│ └──┬───┘ └────┬─────┘ └──────────┘                        │
│    │          │                                           │
│    │    ┌─────▼─────┐                                     │
│    │    │ Maven中央  │                                     │
│    │    │  阿里云镜像 │                                     │
│    │    │  私有仓库   │                                     │
│    │    └───────────┘                                      │
│    │                                                       │
│    └──► 公司内部构件                                         │
│        (第三方库、自有项目)                                   │
└────────────────────────────────────────────────────────────┘

2.三种仓库详解

类型 全称 作用 示例
Hosted 宿主仓库 存放公司内部发布的构件 releases(正式版本)、snapshots(快照版本)
Proxy 代理仓库 代理远程公共仓库,本地缓存 maven-central、maven-public
Group 仓库组 合并多个仓库,客户端只需配一个地址 maven-all

3.部署环境

项目 要求
内存 ≥4GB,过小会导致启动失败(OOM)
JDK JDK 8+
端口 默认8081

3.1单机部署步骤

步骤1:下载解压

1
2
3
4
cd /usr/local/src
# 下载地址:https://help.sonatype.com/repomanager3/download/download-archives---repository-manager-3
tar xf nexus-3.20.1-01-unix.tar.gz
ln -sv /usr/local/src/nexus-3.20.1-01 /usr/local/nexus

步骤2:启动 Nexus

1
2
3
4
5
6
7
8
9
10
cd /usr/local/nexus

# 查看帮助
./bin/nexus --help

# 前台运行(调试用)
./bin/nexus run

# 后台启动
./bin/nexus start

步骤3:初始化密码

首次启动后,查看生成的随机密码:

1
cat /usr/local/nexus/sonatype-work/nexus3/admin.password

步骤4:登录 Web 界面

URL: http://服务器IP:8081
默认账户: admin
初始密码: 上述文件中的随机密码

步骤5:设置向导

登录后会进入 Setup Wizard:

  1. 设置新密码
  2. 选择是否允许匿名下载(建议关闭)
  3. 完成向导

4.仓库配置示例

1. 创建Hosted仓库(正式版本)

Management → Repository → Create repository
  → maven2(hosted)
  Name: maven-releases
  Version policy: Release
  Online: true

2. 创建Hosted仓库(快照版本)

  Name: maven-snapshots
  Version policy: Snapshot
  Deployment policy: Allow redeploy  ← 允许覆盖发布

3. 创建Proxy仓库(代理中央仓库)

  Name: maven-central-proxy
  Version policy: Release
  Remote storage: https://repo.maven.apache.org/maven2/
  ↓ 或代理阿里云镜像(国内更快)
  Remote storage: http://maven.aliyun.com/nexus/content/groups/public/

4. 创建Group仓库组

  Name: maven-public
  Type: maven2(group)
  Members: maven-releases, maven-snapshots, maven-central-proxy

原理:客户端配置 maven-public 仓库组,Nexus 按成员顺序依次查找构件。


5.Maven客户端配置

方法1:修改 settings.xml(推荐)

1
2
3
4
5
6
7
8
9
10
<!-- ~/.m2/settings.xml -->
<settings>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.1.100:8081/repository/maven-public/</url>
</mirror>
</mirrors>
</settings>

方法2:项目 pom.xml 中配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<repositories>
<repository>
<id>nexus</id>
<url>http://192.168.1.100:8081/repository/maven-public/</url>
</repository>
</repositories>

<distributionManagement>
<repository>
<id>nexus-releases</id>
<url>http://192.168.1.100:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>http://192.168.1.100:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>

6.发布构件到 Nexus

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. 在 pom.xml 中配置 distributionManagement(见上文)
# 2. 在 settings.xml 中配置认证信息
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>你的密码</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>你的密码</password>
</server>
</servers>

# 3. 执行部署
mvn clean deploy

7.Nexus 数据备份

Nexus 数据分为两部分,需同时备份:

数据类型 存储位置 说明
Blob 数据 sonatype-work/nexus3/blobs/ 实际构件文件
元数据 sonatype-work/nexus3/db/ 数据库中的索引和配置信息

备份方式

管理界面 → Backup → Create backup

或在配置中设置定时备份任务:

1. 添加备份存储位置
2. 配置 Blob 数据备份计划(备份目录 + 时间)
3. 配置元数据备份计划
4. 手动执行测试备份

8.扩展:用Nexus做私有Yum仓库

除了 Maven,Nexus 还可代理 Yum 仓库:

1. 创建 Repository → yum(proxy)
2. 远程存储设为阿里云 Yum 镜像地址
3. CentOS 客户端配置指向 Nexus 的 Yum 源
1
2
3
4
5
6
# /etc/yum.repos.d/zabbix.repo
[zabbix-nexus]
name=zabbix
baseurl=http://192.168.1.100:8081/repository/zabbix-proxy/
enabled=1
gpgcheck=0

这样内网机器通过 Nexus 拉取 Yum 包,无需直接访问外网。