2. Nexus安装与基础配置:Docker部署Nexus3、管理员初始化、Blob Store与Repository创建

本章是Nexus实战的起点。你将通过Docker在3分钟内完成Nexus3的部署,随后完成管理员密码初始化、Blob Store创建以及Repository配置。这三步构成了Nexus仓库管理的“铁三角”:运行环境 → 存储后端 → 仓库实例。掌握本章内容后,你的Nexus即可接入CI/CD流水线,开始承载制品与SBOM证据。

2.1 Docker部署Nexus3

使用官方镜像 sonatype/nexus3:latest 是最快、最可复现的部署方式。以下命令将Nexus3运行在宿主机 8081 端口,数据持久化至本地卷 nexus-data。

# 创建持久化数据卷
docker volume create --name nexus-data

# 启动Nexus3容器
docker run -d \
  --name nexus \
  -p 8081:8081 \
  -v nexus-data:/nexus-data \
  sonatype/nexus3:latest

# 查看启动日志(等待约60秒,直到看到 "Started Sonatype Nexus")
docker logs -f nexus
启动耗时说明:首次启动需要初始化数据库和内置仓库,通常需要 60~120 秒。使用 docker logs -f nexus 实时观察,当出现 Started Sonatype Nexus OSS 字样时,表示服务已就绪。

部署完成后,访问 http://<宿主机IP>:8081 即可看到Nexus登录页面。默认管理员账号为 admin,初始密码存储在容器内的 /nexus-data/admin.password 文件中。

# 获取初始管理员密码
docker exec nexus cat /nexus-data/admin.password

2.2 管理员初始化

首次登录后,Nexus会强制引导你完成管理员初始化流程。该流程包含三个关键步骤:

  1. 修改默认密码:输入从 admin.password 文件中获取的初始密码,然后设置新密码。
  2. 配置匿名访问:建议在内部网络环境中启用匿名只读访问,以便CI工具无需认证即可拉取制品;生产环境可根据安全策略关闭。
  3. 完成向导:点击“Finish”完成初始化,进入Nexus管理后台。
安全提醒:初始化完成后,请立即删除容器内的 admin.password 文件,或确保该文件不会被外部访问。该文件包含明文初始密码,是攻击者的首要目标。

初始化完成后,管理后台的“设置”菜单将完全可用。此时可以开始配置存储后端与仓库。

2.3 Blob Store创建

Blob Store是Nexus的物理存储层,决定了制品文件的存放位置与存储策略。每个Repository必须关联一个Blob Store。Nexus支持多种Blob Store类型,最常用的是File类型(本地文件系统)和S3类型(对象存储)。

Blob Store类型 适用场景 配置要点
File 单机部署、开发测试环境 指定本地路径(默认在 /nexus-data/blobs 下)
S3 生产集群、跨AZ高可用 配置AWS区域、Bucket名称、IAM凭证
Group 多Blob Store聚合 将多个File或S3 Blob Store组合为一个逻辑存储池

以下是通过管理后台创建File类型Blob Store的步骤:

  1. 登录Nexus管理后台,点击顶部菜单 设置(齿轮图标)→ Blob Stores。
  2. 点击 Create Blob Store,选择 File 类型。
  3. 填写 Name(例如 sbom-blob-store)和 Path(例如 /nexus-data/blobs/sbom)。
  4. 点击 Create Blob Store 完成创建。
命名规范建议:Blob Store名称建议使用 <用途>-blob-store 格式,例如 maven-releases-blob-store、npm-proxy-blob-store、sbom-evidence-blob-store。清晰的命名有助于后期维护与审计。
Blob Store 与 Repository 关系架构 Maven Release Repo npm Proxy Repo SBOM Evidence Repo maven-releases-blob npm-proxy-blob sbom-evidence-blob /nexus-data/blobs/maven-releases /nexus-data/blobs/npm-proxy /nexus-data/blobs/sbom-evidence

2.4 Repository创建

Repository是Nexus对外提供服务的逻辑单元,每个Repository必须指定格式(Format)、类型(Type)和关联的Blob Store。Nexus3支持三种Repository类型:

类型 用途 典型场景
proxy 代理远程仓库,缓存制品到本地 代理 Maven Central、npmjs.org、PyPI
hosted 托管组织内部发布的制品 存放内部构建的 JAR、npm 包、Docker 镜像
group 将多个 proxy 和 hosted 仓库聚合为一个统一入口 合并多个 Maven 仓库为一个 URL 供开发者使用

以下以创建Maven hosted仓库和npm proxy仓库为例,演示完整配置流程。

2.4.1 创建 Maven Hosted 仓库

  1. 点击顶部菜单 设置 → Repositories → Create repository。
  2. 选择 maven2 (hosted) 格式。
  3. 填写以下关键字段:
    • Name: maven-releases
    • Version Policy: Release(仅允许发布正式版本)
    • Layout Policy: Strict(严格校验坐标格式)
    • Blob Store: 选择之前创建的 maven-releases-blob-store
  4. 点击 Create repository 完成创建。

2.4.2 创建 npm Proxy 仓库

  1. 点击 设置 → Repositories → Create repository。
  2. 选择 npm (proxy) 格式。
  3. 填写以下关键字段:
    • Name: npm-proxy
    • Remote Storage: https://registry.npmjs.org
    • Blob Store: 选择 npm-proxy-blob-store
  4. 点击 Create repository 完成创建。
代理仓库缓存策略:Nexus默认会缓存所有从远程拉取的制品。你可以通过 Routing Rules 和 Negative Cache 设置来控制缓存行为,避免磁盘空间被无用制品占满。
Repository 创建流程 步骤1 选择 Format 步骤2 选择 Type 步骤3 配置参数 步骤4 关联 Blob Store 关键配置参数说明 • Name: 仓库唯一标识,建议使用 <format>-<type> 命名 • Remote Storage: (仅 proxy 类型) 远程仓库的 URL • Blob Store: 必须选择一个已创建的 Blob Store,否则仓库无法创建 • Version Policy: (仅 hosted 类型) Release / Snapshot / Mixed

2.5 验证配置

创建完成后,可以通过以下方式验证仓库是否正常工作:

  • 浏览器访问:在Nexus Web UI中点击仓库名称,查看“Browse”页面是否显示空内容(新仓库无制品)。
  • API检查:使用 curl 调用Nexus REST API 获取仓库列表。
# 使用API验证仓库列表(替换为你的admin密码)
curl -u admin:<你的密码> http://localhost:8081/service/rest/v1/repositories | jq .

如果返回的JSON中包含你创建的仓库名称,说明配置成功。至此,Nexus的安装与基础配置全部完成,下一阶段将进入制品上传与SBOM证据留存的核心实战。