资讯动态

Nexus 3.24.0-02 私服搭建实战:Maven与NPM内网仓库部署指南

发布时间:2026/10/17 1:57:47 来源:尧图企业网站定制
简介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-worktar 包里的同名目录会覆盖所以最好先备份或者直接让 tar 解压到临时位置再移动。3.2 修改 nexus.vmoptions 和 nexus.propertiesNexus 的启动参数在bin/nexus.vmoptions里端口和上下文路径在etc/nexus.properties里。这两个文件是安装后最先要改的。# 编辑 JVM 参数 vi /opt/nexus-3.24.0-02/bin/nexus.vmoptions # 常见修改把 -Xms2703m -Xmx2703m 改成适合你机器的值 -Xms2g -Xmx2g -XX:MaxDirectMemorySize2g逻辑说明-Xms和-Xmx分别是最小和最大堆内存设成一样可以避免动态扩容带来的抖动。MaxDirectMemorySize是直接内存Nexus 处理大文件上传时会用到一般设成和堆内存一样大。如果你机器内存只有 4GB建议改成-Xms1g -Xmx1g否则启动后系统会开始 swap响应变慢。# 编辑端口和上下文 vi /opt/nexus-3.24.0-02/etc/nexus.properties # 默认内容 application-port8081 application-host0.0.0.0 nexus-context-path/逻辑说明application-port是 HTTP 端口如果 8081 被占用改成 8082 或其他。application-host0.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] DescriptionNexus Repository Manager Afternetwork.target [Service] Typeforking Usernexus ExecStart/opt/nexus-3.24.0-02/bin/nexus start ExecStop/opt/nexus-3.24.0-02/bin/nexus stop Restarton-abort [Install] WantedBymulti-user.target逻辑说明Typeforking因为 nexus 脚本是后台启动的。Restarton-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 750.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 idnexus/id mirrorOf*/mirrorOf urlhttp://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 --registryhttp://192.168.1.100:8081/repository/npm-hosted/ # 发布测试包 mkdir test-pkg cd test-pkg npm init -y npm publish --registryhttp://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-pkg1.0.0不罢休。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑