源本科技 | 码上会

Sonatype Nexus3 仓库管理系统

2026/04/25
6
0

引言

Sonatype 是一个强大的仓库管理系统,专注于构建和管理软件组件。作为开源的 Repository Manager,它支持 Maven、npm、Docker 等多种仓库类型,提供稳定的依赖管理和构建工具,加速软件开发过程。Sonatype Nexus3 不仅能够帮助团队更有效地管理依赖关系,还提供了安全性和可扩展性,成为现代化软件开发的重要基础设施组件。早期我们只把它当作 Maven 私服,现在已经支持各种类型的包,比如:Npm、Ruby、Docker 等

安装部署

我们使用 Docker 安装并部署 Nexus3 私服,采用官方推荐的稳定镜像。

Docker Compose

创建 docker-compose.yml 配置文件,内容如下:

services:
  nexus3:
    restart: always
    image: sonatype/nexus3
    container_name: nexus3
    ports:
      - 8081:8081
    volumes:
      - ./data:/nexus-data

权限问题解决

启动容器时可能会报错,通过 docker logs -f nexus3 查看日志,可知是数据目录无权限导致:

root@ubuntu:/usr/local/docker/nexus3# docker logs -f nexus3
# 创建目录时,报没有权限的错误
mkdir: cannot create directory '../sonatype-work/nexus3/log': Permission denied
mkdir: cannot create directory '../sonatype-work/nexus3/tmp': Permission denied
Warning:  Cannot open log file: ../sonatype-work/nexus3/log/jvm.log
Warning:  Forcing option -XX:LogFile=/tmp/jvm.log
OpenJDK 64-Bit Server VM warning: Cannot open file ../sonatype-work/nexus3/log/jvm.log due to No such file or directory

java.io.FileNotFoundException: ../sonatype-work/nexus3/tmp/i4j_ZTDnGON8hezynsMX2ZCYAVDtQog=.lock (No such file or directory)
        at java.io.RandomAccessFile.open0(Native Method)
        at java.io.RandomAccessFile.open(RandomAccessFile.java:316)
        at java.io.RandomAccessFile.<init>(RandomAccessFile.java:243)
        at com.install4j.runtime.launcher.util.SingleInstance.check(SingleInstance.java:72)
        at com.install4j.runtime.launcher.util.SingleInstance.checkForCurrentLauncher(SingleInstance.java:31)
        at com.install4j.runtime.launcher.UnixLauncher.checkSingleInstance(UnixLauncher.java:88)
        at com.install4j.runtime.launcher.UnixLauncher.main(UnixLauncher.java:67)
java.io.FileNotFoundException: /nexus-data/karaf.pid (Permission denied)

官方推荐解决方案:Nexus 容器内运行用户的 UID 为 200,执行以下命令授权数据目录,再重启容器即可:

# 授权数据目录
chown -R 200:200 ./data
# 重启容器
docker-compose up -d

访问登录

服务启动成功后,通过浏览器访问 控制台:

  • 访问地址:http://服务器 IP:8081/

image-Cvhj-sexg.webp

初始密码查看

默认管理员账号为 admin,初始密码存储在容器内,通过以下命令获取:

  • 查看管理员初始密码

docker exec -it nexus3 cat /nexus-data/admin.password
# 示例输出
905fc654-3c83-4421-9f5b-9710a5a33561

密码修改

使用 admin + 初始密码登录控制台,系统会自动弹框引导修改密码;也可后续在用户管理菜单中修改。

基础使用

存储配置

导航至 Repository > Blob Stores 配置对象存储,用于管理仓库的物理存储位置。

注意:请按实际业务场景设置存储大小限制,避免磁盘空间被占满。

清理策略配置

导航至 Repository > Cleanup Policies 配置存储清理策略,自动清理无用组件。

示例:配置 30 天自动清理一次 Maven 快照版本包。

也可以在 System > Tasks 里创建定时任务,执行快照清理操作。

示例配置:每天 01:00 自动清理 Maven 快照包。

仓库类型与配置

导航至 Repository > Repositories 配置仓库,Nexus3 提供三种核心仓库类型:

  • Proxy:代理仓库,对外部公共仓库的代理,只读且支持缓存依赖包

  • Hosted:托管仓库,私有仓库,支持上传自定义组件包

  • Group:仓库组,整合多个 Proxy/Hosted 仓库,对外提供统一访问地址,只读

代理仓库配置

新建代理仓库,配置阿里云公共 Maven 仓库地址,加速依赖下载:

  • 阿里云仓库地址:https://maven.aliyun.com/nexus/content/groups/public/

仓库组配置

将新建的阿里云代理仓库,添加到默认的 maven-public 分组中,开发仅需使用该分组地址即可。

按照私有仓库 → 快照仓库 → 代理仓库的顺序排列,定义依赖查找优先级:

最终使用的私服地址:http://服务器 IP:8081/repository/maven-public/

本地配置与项目部署

Maven 全局配置

修改 Maven 的 settings.xml 配置文件,对接 私服。

  • servers 标签中配置私服认证信息(禁用匿名访问时必填):

<server>
    <id>maven-public</id>
    <username>admin</username>
    <password>你的修改后密码</password>
</server>
<!-- 上传发布包使用 -->
<server>
    <id>maven-release</id>
    <username>admin</username>
    <password>你的修改后密码</password>
</server>
<server>
    <id>maven-snapshots</id>
    <username>admin</username>
    <password>你的修改后密码</password>
</server>
  • mirrors 标签中配置私服镜像,id 必须与 servers 中保持一致

<mirror>
    <id>maven-public</id>
    <mirrorOf>central</mirrorOf>
    <name>Maven public</name>
    <url>http://192.168.60.134:8081/repository/maven-public/</url>  
</mirror>

IDEA 配置

在 IDEA 中,将 Maven 配置指定为本地修改后的配置文件,关联 Nexus3 私服。

项目 POM 配置

执行 mvn clean install 命令,Maven 会从私服下载依赖,同时私服会自动缓存公共依赖包。

缓存完成后,可在控制台查看已缓存的依赖包。

修改项目 pom.xml,配置上传地址,将自定义 Jar 包部署到私服:

<distributionManagement>
    <repository>
        <!-- id 与 settings.xml 中的 server 对应,完成授权上传 -->
        <id>maven-release</id>
        <name>Nexus3 Release</name>
        <url>http://192.168.60.134:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>maven-snapshots</id>
        <name>Nexus3 Snapshots</name>
        <url>http://192.168.60.134:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

上传成功后,登录私服即可查看自定义 Jar 包,团队可通过坐标直接引用,实现协同开发。