如何在Linux上部署Nexus私服

如何在Linux上部署Nexus私服

Nexus 是一个强大的仓库管理解决方案,由Sonatype公司开发。它主要用于软件开发中各种依赖包和构件的存储、管理和分发。

1、为什么要部署nexus?

  1. 统一管理依赖:在软件开发过程中,项目通常会依赖大量的第三方库或构件。直接从公共仓库如Maven Central、JCenter等下载,速度可能受限且不稳定。通过搭建私有的Nexus仓库,可以作为这些公共仓库的代理和缓存,提高依赖下载速度,并能在网络异常时继续提供服务。
  2. 内部构件共享:团队内部开发的构件可以直接上传到私有Nexus仓库中,方便团队成员之间共享和复用。这样既便于版本管理,又能保护内部知识产权,避免敏感代码直接暴露在外。
  3. 权限控制与审计:Nexus提供了详细的权限控制机制,可以根据组织结构和角色为不同用户提供对仓库的不同操作权限,例如发布、下载等。同时,它还支持记录所有上传、下载及构建活动的日志,便于进行合规审计和问题追踪。
  4. 构建流程优化:在CI/CD流程中集成Nexus,能够更好地控制构件发布的整个生命周期,包括SNAPSHOT版本管理和发布版本审批等,有助于提升持续集成和持续交付的效率。
  5. 多类型仓库支持:Nexus不仅支持Java/Maven生态系统的构件,还支持npm、NuGet、Docker等其他类型的包管理仓库,满足多样化的开发需求。

2、如何下载nexus?

请添加图片描述

1、下载最新版本的nexus 下载地址:http://www.sonatype.org/nexus/go (网站为国外网站,国内下载可能会很慢甚至无法下载,需要翻墙下载)

2、 博主已下载好目前最新版本的nexus放置于阿里云盘当中,有需要的小伙伴可通过云盘地址进行下载。 https://www.alipan.com/s/Z42R3FPtEyx 提取码: wp46 点击链接保存

3、如何安装nexus?

1、解压安装包:nexus-3.64.0-04-mac.tgz (博主下载的OS X的版本)

2、进入解压的目录:nexus-3.64.0-04-mac,里面有两个文件夹:nexus-3.64.0-04sonatype-work

Sonatype-work 是在安装 Nexus 后,用于存储其运行时数据和配置信息的工作目录。这个目录不在程序的安装路径下,通常是一个独立的数据存储位置,包含了所有的仓库配置、索引文件、缓存以及日志等重要数据。

进入 nexus-3.64.0-04/bin 运行 ./nexus run

请添加图片描述

出现 Started Sonatype Nexus OSS 3.64.0-04 则表示运行成功,可打开http://localhost:8081/进行访问

修改默认接口则在nexus-3.64.0-04-mac/nexus-3.64.0-04/etc/nexus-default.properties文件修改application-port,比如修改为 8888

请添加图片描述

3、配置nexus全局命令运行

vim ~/.bash_profile

export NEXUS_HOME="/Users/pengyangyan/Downloads/nexus-3.64.0-04-mac/nexus-3.64.0-04"
export PATH="$PATH:$NEXUS_HOME/bin:PATH"

source ~/.bash_profile

此时就可以在任意目录运行nexus命令。

注意:mac电脑在解压nexus-3.64.0-04-mac.tgz 时,如果使用第三方解压工具,会造成nexus依赖jar包名称错误同时无法识别出jar包导致nexus无法运行,所以解压的时候最好使用mac自带的解压工具进行解压

4、登陆nexus

请添加图片描述

点击右上角Sign in 进行登陆 用户名: admin 。运行命令 cat /nexus-3.64.0-04-mac/sonatype-work/nexus3/admin.Password 可查看密码,登陆成功后会提示进行密码修改。

4、项目应用nexus进行包管理

请添加图片描述

1、点击Create repository 可创建其他类型的仓库,对于Java,里面已经内置了maven相关仓库,所以我这里就没有在进行创建,直接使用里面已有的仓库。

  1. Hosted(宿主)仓库
    • Maven Hosted:用于部署和管理内部开发团队编写的Java项目构件,包括Releases和Snapshots两种子类型。
      • Releases仓库:用于发布稳定版构件。
      • Snapshots仓库:用于存储项目快照版本的构件,这些版本可以随项目构建而频繁更新。
  2. Proxy(代理)仓库
    • Maven Proxy(或称Repository Proxy):作为远程公共仓库(如Maven中央仓库)的缓存,减少对外部网络的依赖,并且能限制哪些组件可以从外部获取。
  3. Group(仓库组)
    • Maven Group:组合多个仓库(无论是Hosted还是Proxy),为用户提供统一的访问入口。当通过一个组仓库请求组件时,Nexus会自动在组内包含的所有仓库中查找所需的构件。
  4. Docker Registry(Docker仓库)
    • Docker Hosted:托管内部开发的Docker镜像。
    • Docker Proxy:代理远程的Docker注册表,比如Docker Hub。
    • Docker Group:将多个Docker仓库聚合到一起,简化对Docker镜像的访问和管理。
  5. 其他类型
    • npm Hosted/Proxy/Group:对应于Node.js包管理器npm的仓库类型。
    • NuGet Hosted/Proxy/Group:针对.NET生态系统的NuGet包管理仓库。
    • Raw Hosted:用于托管非标准格式的文件,例如二进制文件或自定义格式的软件包。

2、配置maven的setting.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>/Users/pengyangyan/.m2/repository</localRepository>

   <!-- Apache Maven 配置 -->
    <pluginGroups/>
    <proxies/>
    
      <!-- nexus 服务的账户密码配置 -->
     <servers>
        <server>
            <id>maven-public</id>
            <username>admin</username>
            <password>peng123.</password>
        </server>
        <server>
            <id>maven-snapshots</id>
            <username>admin</username>
            <password>peng123.</password>
        </server>
        <server>
            <id>maven-releases</id>
            <username>admin</username>
            <password>peng123.</password>
        </server>
    </servers>


   <!-- 阿里云镜像 -->
    <mirrors>
        <mirror>
			<id>aliyunmaven</id>
			<mirrorOf>*</mirrorOf>
			<name>aliyunmaven</name>
			<url>http://maven.aliyun.com/repository/public</url>
		</mirror>
		<mirror>
			<id>central</id>
			<name>Maven Repository Switchboard</name>
			<url>https://repo1.maven.org/maven2/</url>
			<mirrorOf>central</mirrorOf>
		</mirror>
    </mirrors>

	<profiles>

        <!-- 阿里云配置: 提高国内的jar包下载速度-->
        <profile>
            <id>all</id>
            <repositories>
                <repository>
                    <id>alimaven</id>
                    <name>aliyun maven</name>
                    <url>https://maven.aliyun.com/repository/public</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>alimaven</id>
                    <name>aliyun maven</name>
                    <url>https://maven.aliyun.com/repository/public</url>
                </pluginRepository>
            </pluginRepositories>
        </profile>

        <!-- 本地nexus仓库-->
        <profile>
        <id>maven-NEXUS</id>
            <!-- 远程仓库列表 -->
            <repositories>
                <repository>
                    <id>maven-public</id>
                    <name>test</name>
                    <!-- 虚拟的URL形式,指向镜像的URL-->
                    <url>http://localhost:8081/repository/maven-public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
        </profile>

    </profiles>


</settings>

3、手动上传jar包到私有仓库
请添加图片描述

4、项目jar推送至私有仓库

在需要发布的项目pom文件中添加distributionManagement配置,而后使用idea工具右侧的maven栏,点击deploy发布到远程仓库

在父级项目的pom.xml 配置上

    <distributionManagement>
        <repository>
            <id>maven-releases</id>
            <name>Release Repositories</name>
            <url>http://localhost:8081/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>maven-snapshots</id>
            <name>Snapshot Repositories</name>
            <url>http://localhost:8081/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

请添加图片描述

而后登录到你的nexus私服就能查看部署的jar包

  1. mvn package
    • 作用:完成编译、测试后,根据项目类型(如jar、war、ear等)打包项目。
  2. mvn install
    • 作用:执行 package 之后,还将包安装到本地仓库,使得其他本地项目可以引用此项目作为依赖。
  3. mvn deploy
    • 作用:在成功完成 install 的基础上,将最终构建的工件部署到远程仓库,供其他团队成员或项目使用。

请添加图片描述

看到如图内容表示jar已成功推送到私有仓库。

完结,撒花??!!!