Nexus管理私服

一、快速部署(Docker 方式)

首先确保服务器已安装 Docker。执行以下命令拉取并启动 Nexus 3:

bash 复制代码
docker run -d --name nexus \
  -p 8081:8081 \
  -v /your/nexus-data:/nexus-data \
  sonatype/nexus3
  • -p 8081:8081:将容器的 8081 端口映射到宿主机,后续通过 http://<服务器IP>:8081 访问。
  • -v /your/nexus-data:/nexus-data:将数据持久化到宿主机目录,避免容器删除后数据丢失。

启动后稍等 1-2 分钟,在浏览器中访问 http://<IP>:8081

二、初始登录与基础设置

  1. 获取初始密码

    进入容器查看自动生成的 admin 密码:

    bash 复制代码
    docker exec -it nexus cat /nexus-data/admin.password

    复制输出的一串字符。

  2. 登录并修改密码

    浏览器打开 Nexus 界面,点击右上角 Sign in,用户名 admin,密码粘贴上一步获取的内容。系统会强制要求你修改密码,按提示设置新密码。

  3. 禁用匿名访问(可选但推荐)

    点击顶部齿轮图标进入 AdministrationSecurityAnonymous Access,去掉 Allow anonymous users to access the server 的勾选。这样可以要求所有拉取和发布都需要认证,保障私服安全。

三、理解三种核心仓库类型

在 Nexus 里,一切制品管理都围绕仓库展开。你需要明确这三种仓库的角色:

  • proxy(代理仓库):代理外部远程仓库(如 Maven Central、Docker Hub)。本地客户端请求时,Nexus 先查缓存,没有再去远程拉取并缓存,实现加速和离线可用。
  • hosted(托管仓库):存放你们自己开发的内部制品(如公司项目的 jar、docker 镜像等)。有明确的版本策略(Release 或 Snapshot)。
  • group(仓库组):将多个 proxy 和 hosted 仓库聚合成一个 URL,开发者只需配置这一个地址,就能访问组内所有仓库的内容。

四、配置 Maven 私服(最经典的使用场景)

假设你要为 Java 项目搭建 Maven 私服,典型配置步骤如下:

1. 创建 Maven 代理仓库

  • 进入 AdministrationRepositoryRepositories,点击 Create repository
  • 选择 maven2 (proxy)
  • Name :填写 maven-central
  • Remote storage :填写 https://repo1.maven.org/maven2/(或使用阿里云镜像 https://maven.aliyun.com/repository/public)。
  • 其他默认,点击页面底部 Create repository

用同样方法可再创建一个代理 Maven Snapshot 的仓库(如指向 https://s01.oss.sonatype.org/content/repositories/snapshots/),非必须。

2. 创建 Maven 托管仓库(存放内部制品)

  • 再次 Create repositorymaven2 (hosted)
  • 创建两个:
    • Name : maven-releases, Version policy : Release
    • Name : maven-snapshots, Version policy : Snapshot
  • 对于 maven-releasesDeployment policy 建议选择 Disable redeploy,防止已发布的发行版被覆盖。

3. 创建 Maven 仓库组

  • Create repositorymaven2 (group)
  • Name : maven-public
  • Member repositories 栏中,将你刚创建的 maven-centralmaven-releasesmaven-snapshots 都添加进去,并确保代理仓库在最上方、托管仓库在下(顺序无关紧要,但通常代理放前面)。点击创建。

现在你有了一个统一的私服地址,后续所有客户端配置都指向它。

4. 配置客户端(开发者本地或 CI 服务器)

在 Maven 的 settings.xml 中(通常位于 ~/.m2/settings.xml 或 Maven 安装目录的 conf/settings.xml)添加:

xml 复制代码
<servers>
  <server>
    <id>nexus</id>
    <username>admin</username>
    <password>你的admin密码</password>
  </server>
</servers>

<mirrors>
  <mirror>
    <id>nexus</id>
    <mirrorOf>*</mirrorOf>
    <url>http://<Nexus服务器IP>:8081/repository/maven-public/</url>
  </mirror>
</mirrors>
  • <mirrorOf>*</mirrorOf> 表示所有请求都通过该私服。如果只想代理中央仓库,可改为 central
  • 注意 URL 最后要带 /

配置完成后,Maven 依赖拉取将全部通过你的私服。

5. 发布内部制品到私服

在项目的 pom.xml 中增加分发仓库配置:

xml 复制代码
<distributionManagement>
  <repository>
    <id>nexus</id>
    <url>http://<Nexus服务器IP>:8081/repository/maven-releases/</url>
  </repository>
  <snapshotRepository>
    <id>nexus</id>
    <url>http://<Nexus服务器IP>:8081/repository/maven-snapshots/</url>
  </snapshotRepository>
</distributionManagement>

执行 mvn deploy 即可将制品推送至对应的托管仓库。注意 id 必须与 settings.xmlserverid 一致,以便认证。

五、配置 Docker 私服

Nexus 同样擅长管理 Docker 镜像私服。配置要点:

1. 创建 Docker 托管仓库

  • Create repositorydocker (hosted)
  • Name : docker-hosted
  • HTTP 端口:填写一个非 8081 的端口,如 8082(需要映射到宿主机,启动容器时增加 -p 8082:8082)。
  • 勾选 Force basic authentication 以启用认证,避免未授权推送。
  • 创建后,仓库地址为 http://<IP>:8082

(也可按需创建 Docker proxy 指向 Docker Hub,再创建 group,但托管仓库已可直接 push/pull)

2. 客户端使用

  • 登录私服:docker login http://<IP>:8082,输入 Nexus 的 admin 账号密码。

  • 推送镜像:

    bash 复制代码
    docker tag my-app:latest <IP>:8082/my-app:latest
    docker push <IP>:8082/my-app:latest
  • 拉取镜像:docker pull <IP>:8082/my-app:latest

注意 :Docker 要求使用 HTTPS 或配置非安全仓库。测试环境可在 /etc/docker/daemon.json 添加:

json 复制代码
{
  "insecure-registries": ["<IP>:8082"]
}

然后重启 Docker。生产环境务必配置 TLS 证书。

六、用户与权限管理(多团队协作)

对于多人或多团队共用的私服,必须限制权限。

  1. 创建用户

    AdministrationSecurityUsersCreate local user。填写 ID、名字、密码,并设置状态为 Active

  2. 内置角色与自定义角色

    系统预置了 nx-admin(全部权限)、nx-anonymous(匿名权限)等。建议创建自定义角色:

    • SecurityRolesCreate role
    • 选择权限:如 nx-repository-view-maven2-*-read 赋予只读,nx-repository-view-maven2-*-add-edit 赋予发布能力。可根据仓库名称精准授权。
  3. 分配角色给用户

    编辑用户,在 Roles Granted 中添加对应角色即可。

典型场景 :给 CI 系统创建一个专用账号,赋予 maven-releasesmaven-snapshots 的写入权限,开发者只有读取权限。

相关推荐
程序员钟霖1 天前
【实战版】Spring IOC 控制反转详解
java·后端·spring·maven·intellij-idea
减瓦2 天前
Maven 源码包的下载与工程化落地
java·maven
数聚天成DeepSData4 天前
数聚天成 DeepSData 数据价值落地实战指南
java·maven·devops
自强的小白5 天前
maven高级(聚合和私服)以及私服的上传和下载
java·maven
harmful_sheep5 天前
maven多版本包导致java.lang.NoClassDefFoundError
java·maven
好好沉淀8 天前
Windows 下升级 Maven 3.6.1 到 3.9.9 踩坑全记录
java·windows·maven
青石路9 天前
记一次Qoder排查mave-shade-plugin只重定向部分package导致的NoSuchMethodError问题,查的还挺快的
java·maven
奶糖 肥晨10 天前
mac系统中Java项目环境配置与问题解决全记录|环境准备篇:JDK与Maven安装配置
java·macos·maven
江南十四行10 天前
Maven 学习框架:依赖管理 + 仓库配置 + IDEA 集成
学习·maven·intellij-idea