☰
Nexus 3.24.0-02 私服搭建实战:Maven与NPM内网仓库部署指南
2026/10/17 1:57:46 网站建设 项目流程

简介:nexus-3.24.0-02-unix.tar.gz 是 Sonatype 官方发布的 Nexus Repository Manager 3.24.0-02 版本 Unix/Linux 安装包,面向 Java 与前端开发团队、DevOps 工程师及需要搭建私有仓库的技术人员,用于集中管理 Maven、NPM 等软件组件的代理、托管与分发,解决依赖下载慢、包版本混乱与内部制品统一管理的问题。压缩包整体约 149.69MB,解压后主要包含 nexus-3.24.0-02 与 sonatype-work 两个目录,前者存放服务运行所需的可执行文件、配置与库,后者作为运行时工作目录,保存制品、索引、日志及数据库内容,部署时需保持独立以保障数据持久化与升级安全。该资源已有 212 人学习下载,适合具备一定 Linux 与构建工具基础的中级开发者。通过它可快速搭建本地 Nexus 服务,配置 Maven 代理仓库与 NPM 私有注册表,实现依赖缓存加速、包私有托管和权限统一管理,为团队持续集成与制品治理提供稳定支撑。

1. 从一台内网构建机说起:为什么我坚持用 nexus-3.24.0-02-unix.tar.gz

上周帮一个朋友排查 CI 流水线,现象很典型:构建机在内网,Maven 拉依赖慢到超时,npm install 直接卡死。他们团队之前用的是一个单点文件服务器,没有缓存、没有代理、没有权限控制,谁都能往上扔包。我建议直接上 Nexus Repository Manager,版本锁定在 3.24.0-02,也就是nexus-3.24.0-02-unix.tar.gz这个包。为什么不用最新版?因为 3.24 是 3.x 里比较稳的一个 LTS 分支,对 Java 8 兼容性好,很多老项目的构建环境还在 JDK 8 上跑,装最新版反而会因为 JDK 版本不够翻车。Nexus 本身是 Java 写的,解压即用,但真正装起来,坑都在 JVM 参数、存储路径和仓库格式配置上。这篇笔记就按我实际部署的顺序,从环境准备到验证跑通,一步步写清楚。适合正在搭 Maven 私服、NPM 私服,或者想把内网依赖统一管起来的开发者。

2. 装之前先把环境列清:JDK、内存、磁盘和端口

2.1 JDK 版本选择:别用最新,用最稳的

Nexus 3.24.0-02 官方要求 JDK 8,实测 JDK 8u252 以上都能跑。我一般用 OpenJDK 8 或者 Oracle JDK 8,不推荐 JDK 11 及以上,虽然理论上能启动,但 3.24 的某些内部库对高版本 JDK 的模块化系统支持不完整,容易在启动后报java.lang.NoClassDefFoundError或者InaccessibleObjectException。如果你机器上已经有 JDK 11,最省事的做法是单独装一个 JDK 8,用JAVA_HOME指向它,而不是去改全局默认 JDK。

# 查看当前 JDK 版本 java -version # 如果输出不是 1.8.x,需要单独指定 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH

逻辑说明:Nexus 启动脚本会读取JAVA_HOME,如果系统默认 JDK 是 11 而JAVA_HOME没改,启动时会直接报版本不兼容。参数上,JAVA_HOME必须指向 JDK 根目录,不是bin目录。

2.2 内存和磁盘:别等 OOM 了才后悔

Nexus 默认 JVM 堆内存是 2703MB,这是官方在nexus.vmoptions里写死的。如果你的机器内存小于 4GB,启动后可能直接被系统 OOM Killer 干掉。我一般会先看机器内存,再决定要不要改小。

# 查看内存 free -h # 查看磁盘,Nexus 数据目录会越来越大 df -h /opt

常见做法是:测试环境给 2GB 堆内存,生产环境给 4GB 以上。磁盘方面,Nexus 的 blob store 会存所有上传的包,Maven 中央仓库镜像缓存几个月就能到几十 GB,所以/opt或者你指定的数据目录至少留 50GB 起步。

2.3 端口和用户:别用 root 跑

Nexus 默认监听 8081 端口。如果这台机器上已经有服务占了 8081,要么改 Nexus 端口,要么改别的服务。另外,Nexus 不建议用 root 用户启动,因为解压后的目录权限会乱,后续升级也麻烦。我一般会建一个专用用户。

# 创建 nexus 用户 useradd -r -m -d /home/nexus nexus # 创建安装目录和数据目录 mkdir -p /opt/nexus /opt/sonatype-work chown -R nexus:nexus /opt/nexus /opt/sonatype-work

逻辑说明:-r表示系统用户,-m自动创建家目录。/opt/nexus放程序,/opt/sonatype-work放数据,这样升级时只换程序目录,数据不动。参数上,sonatype-work是 Nexus 默认的数据目录名,不要改,除非你在nexus.vmoptions里显式指定-Dkaraf.data。

3. 解压、配置、启动:三步把 Nexus 跑起来

3.1 解压 tar.gz 并设置目录权限

拿到nexus-3.24.0-02-unix.tar.gz之后,先确认文件完整性,再解压。我一般会校验一下 sha1,虽然官方没强制,但内网传输有时候会丢包。

# 假设包在 /tmp 下 cd /tmp ls -lh nexus-3.24.0-02-unix.tar.gz # 解压到 /opt tar -zxvf nexus-3.24.0-02-unix.tar.gz -C /opt/ # 解压后会得到两个目录:nexus-3.24.0-02 和 sonatype-work ls -ld /opt/nexus-3.24.0-02 /opt/sonatype-work

逻辑说明:tar -zxvf中z表示 gzip 解压,x解压,v显示过程,f指定文件。解压后,nexus-3.24.0-02是程序目录,sonatype-work是数据目录。如果你之前已经建过/opt/sonatype-work,tar 包里的同名目录会覆盖,所以最好先备份或者直接让 tar 解压到临时位置再移动。

3.2 修改 nexus.vmoptions 和 nexus.properties

Nexus 的启动参数在bin/nexus.vmoptions里,端口和上下文路径在etc/nexus.properties里。这两个文件是安装后最先要改的。

# 编辑 JVM 参数 vi /opt/nexus-3.24.0-02/bin/nexus.vmoptions # 常见修改:把 -Xms2703m -Xmx2703m 改成适合你机器的值 -Xms2g -Xmx2g -XX:MaxDirectMemorySize=2g

逻辑说明:-Xms和-Xmx分别是最小和最大堆内存,设成一样可以避免动态扩容带来的抖动。MaxDirectMemorySize是直接内存,Nexus 处理大文件上传时会用到,一般设成和堆内存一样大。如果你机器内存只有 4GB,建议改成-Xms1g -Xmx1g,否则启动后系统会开始 swap,响应变慢。

# 编辑端口和上下文 vi /opt/nexus-3.24.0-02/etc/nexus.properties # 默认内容 application-port=8081 application-host=0.0.0.0 nexus-context-path=/

逻辑说明:application-port是 HTTP 端口,如果 8081 被占用,改成 8082 或其他。application-host=0.0.0.0表示监听所有网卡,如果只想本机访问,改成127.0.0.1。nexus-context-path是访问路径,默认/,如果你要放在反向代理后面,可以改成/nexus。

3.3 用 nexus 用户启动并设置开机自启

配置改完后,用之前建的 nexus 用户启动。Nexus 自带nexus脚本,支持start、stop、status。

# 切换用户并启动 su - nexus -c "/opt/nexus-3.24.0-02/bin/nexus start" # 查看状态 su - nexus -c "/opt/nexus-3.24.0-02/bin/nexus status" # 查看日志 tail -f /opt/sonatype-work/nexus3/log/nexus.log

逻辑说明:su - nexus -c表示以 nexus 用户身份执行命令。启动后,Nexus 会先解压自身的一些组件,第一次启动比较慢,大概 1-2 分钟。日志里看到Started Sonatype Nexus OSS 3.24.0-02才算成功。如果启动失败,日志里通常会写java.lang.OutOfMemoryError或者Address already in use,对应去改内存或端口。

开机自启我一般用 systemd,比 init.d 脚本干净。

# 创建 systemd 服务文件 vi /etc/systemd/system/nexus.service [Unit] Description=Nexus Repository Manager After=network.target [Service] Type=forking User=nexus ExecStart=/opt/nexus-3.24.0-02/bin/nexus start ExecStop=/opt/nexus-3.24.0-02/bin/nexus stop Restart=on-abort [Install] WantedBy=multi-user.target

逻辑说明:Type=forking因为 nexus 脚本是后台启动的。Restart=on-abort表示异常退出时自动重启。写完执行systemctl daemon-reload和systemctl enable nexus即可。

4. 避坑与排查:这五个问题我几乎每次装都会遇到

4.1 启动报错 “java.lang.UnsupportedClassVersionError”

现象:执行nexus start后,日志里出现UnsupportedClassVersionError: com/sonatype/nexus/bootstrap/jsw/JSWLauncher : Unsupported major.minor version 52.0。

原因:当前JAVA_HOME指向的 JDK 版本低于 Java 8。52.0 对应 Java 8,如果显示 51.0 就是 Java 7,50.0 是 Java 6。

解决:java -version确认版本,然后export JAVA_HOME=/path/to/jdk8,再重新启动。如果系统里有多个 JDK,建议在nexus脚本开头显式加一行JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64。

4.2 8081 端口被占用,但lsof查不到

现象:启动日志报Address already in use,但lsof -i:8081没有任何输出。

原因:可能是另一个进程用了 IPv6 的 8081,或者之前 Nexus 没停干净,残留了 Java 进程。

解决:用ss -tlnp | grep 8081查,比lsof更全。如果是残留进程,ps -ef | grep nexus找到 PID 后 kill 掉。如果是其他服务,改nexus.properties里的端口。

4.3 上传 Maven 包时 413 Request Entity Too Large

现象:通过 Nexus 上传大 jar 包时,返回 413 错误。

原因:Nexus 前面如果有 Nginx 反向代理,Nginx 默认client_max_body_size是 1MB。

解决:在 Nginx 配置里加client_max_body_size 500m;,然后nginx -s reload。如果没走 Nginx,检查 Nexus 自身的nexus.properties里有没有限制,3.24 默认没有请求体大小限制。

4.4 磁盘满了导致 Nexus 无法写入

现象:Nexus 突然无法上传包,日志报No space left on device。

原因:sonatype-work目录所在分区满了。Nexus 的 blob store 默认不清理,尤其是代理仓库缓存。

解决:先df -h确认分区,然后清理sonatype-work/nexus3/blobs/default/content下的旧缓存,或者配置定期清理任务。我一般会在 Nexus 管理界面里建一个 “Compact blob store” 任务,每周跑一次。

4.5 忘记 admin 密码,进不去管理界面

现象:第一次启动后,不知道 admin 密码是什么。

原因:Nexus 3.x 的 admin 密码不在默认的admin123,而是随机生成后放在一个文件里。

解决:密码在/opt/sonatype-work/nexus3/admin.password,直接cat出来。登录后系统会强制你改密码。如果这个文件被删了,只能删掉sonatype-work/nexus3/db目录重新初始化,数据会丢,所以别乱删。

5. 装完怎么验证:从 Maven 拉包到 NPM 发布走一遍

5.1 验证 Maven 私服:改 settings.xml 并拉一个包

Nexus 装好后,默认会创建几个仓库:maven-central是代理中央仓库的,maven-releases和maven-snapshots是 hosted 仓库。要验证 Maven 能不能走 Nexus,改本地~/.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>

逻辑说明:mirrorOf写*表示所有仓库请求都走 Nexus。maven-public是 Nexus 默认创建的 group 仓库,里面包含了maven-central、maven-releases和maven-snapshots。URL 里的 IP 换成你 Nexus 机器的地址。

然后随便找个项目跑mvn clean compile,观察输出里有没有Downloading from nexus:。如果有,说明代理生效。第一次拉包会慢,因为 Nexus 要去中央仓库下载并缓存,第二次就快了。

5.2 验证 NPM 私服:npm config 指向 Nexus 并发布一个测试包

Nexus 3.24 也支持 NPM 仓库。默认会创建一个npm-proxy和一个npm-hosted。验证方法:

# 设置 npm registry npm config set registry http://192.168.1.100:8081/repository/npm-proxy/ # 查看是否生效 npm config get registry # 拉一个包测试 npm view lodash version

逻辑说明:npm-proxy是代理仓库,会缓存 npmjs.org 的包。如果你要发布自己的包,需要切到npm-hosted的 URL,并且配置认证。

# 登录 Nexus NPM 仓库 npm login --registry=http://192.168.1.100:8081/repository/npm-hosted/ # 发布测试包 mkdir test-pkg && cd test-pkg npm init -y npm publish --registry=http://192.168.1.100:8081/repository/npm-hosted/

逻辑说明:npm login会提示输入用户名密码,用 admin 和之前改过的密码。发布成功后,在 Nexus 界面的Browse里能看到test-pkg。如果报E403,检查npm-hosted仓库的权限设置,默认只有 admin 能发布。

5.3 验证数据持久化:重启后仓库还在

最后一步验证:systemctl restart nexus,等启动完成后,刷新浏览器,看之前上传的包和配置是否还在。如果数据丢了,说明sonatype-work目录没挂对,或者被 tar 包覆盖了。我一般会在重启后跑一次mvn clean compile和npm view lodash version,确认两个仓库都能正常响应。

从那以后我每次装完 Nexus,都会强制走一遍 Maven 拉包和 NPM 发布,不看到BUILD SUCCESS和+ test-pkg@1.0.0不罢休。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询