美文网首页
19、DockerComprose-安装nexus3

19、DockerComprose-安装nexus3

作者: 唯老 | 来源:发表于2019-10-17 23:11 被阅读0次

    一、 概要

    私服是一种特殊的远程Maven仓库,它是架设在局域网内的仓库服务,私服一般被配置为互联网远程仓库的镜像,供局域网内的Maven用户使用。

    image
    当Maven需要下载依赖的时候,先向私服请求,如果私服上不存在该依赖,则从外部的远程仓库下载,同时缓存在私服之上,然后为Maven下载请求提供下载服务,另外,对于自定义或第三方的jar可以从本地上传到私服,供局域网内其他maven用户使用。
    image

    二、优点

    1. 节省外网宽带
    2. 加速Maven依赖
    3. 部署第三方构件
    4. 提高稳定性、增强控制:原因是外网不稳定
    5. 降低中央仓库的负荷:原因是中央仓库访问量太大

    三、搭建私服

    说明

    Maven私有仓库-使用docker部署Nexus

    官方镜像说明

    启动容器

    官方说明中提到的是使用docker直接启动。我选择用docker-compose启动。
    docker-compose.yml文件如下:

    • vim docker-compose.yml
      services:
        nexus:
          container_name: nexus-container
          image: sonatype/nexus3
          restart: always
          ports:
           - 8081:8081
          volumes:
           #  映射数据目录
           - ./nexus3/data/:/nexus-data
           #  映射日志目录
           - ./nexus3/log/:/nexus-data/log/
      
    • docker-compose up -d
    • docker-compose ps

    注意 : 可能会出现权限问题

    /nexus-data/log/karaf.log (Permission denied)
    

    修改宿主机映射目录的权限 例如:

     # 例如我的容器卷目录  /docker/docker-compose/nexus/nexus3/data
     chmod -R 777 docker/docker-compose/nexus/nexus3/data
    

    验证安装是否成功

    在浏览器输入 http://127.0.0.1:8081

    image
    注意 第一次登陆的时候账号名是admin密码在在宿主机隐射的data数据卷中
    image

    四、访问nexus3

    maven相关的仓库

    • maven-central
    • maven-releases
    • maven-snapshots
    • maven-public


      image

    类型

    proxy是远程仓库的代理
    在nexus中配置了一个中央库的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库 下载,然后返回给用户,相当于起到一个中转的作用。
    hosted是宿主仓库
    用户可以把自己的一些依赖,deploy到hosted中,也可以手工上传构件到hosted里。比如说oracle的驱动程序,ojdbc6.jar,在中央库是获取不到的,就需要手工上传到hosted里。
    group是仓库组
    在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了。

    五、如何发布自己的构件到私有仓库中?

    配置settings文件中的节点

    在~/.m2/settings或者全局config/settings中增加server节点,根据需要可以添加多个server

    <servers>
      <server>
        <id>nexus-releases</id>
        <username>admin</username>
        <password>admin</password>
      </server>
       <server>
        <id>nexus-snapshots</id>
        <username>admin</username>
        <password>admin</password>
      </server>
    </servers>
    

    在pom文件中配置插件

    在项目的pom.xml/build/中配置中配置maven-deploy-plugin

    <!--发布到私有仓库依赖的插件-->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-deploy-plugin</artifactId>
      <version>2.8.1</version>
      <executions>
        <execution>
          <id>default-deploy</id>
          <phase>deploy</phase>
          <goals>
            <goal>deploy</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <skip>false</skip>
      </configuration>
    </plugin>
    

    温馨提示:如果在多模块项目中,可以将不需要发布的项目配置为skip=true。比如在parent的pom.xml中增加以下内容后,所有模块都会跳过发布。

    <build>
      <plugins>
        <!--发布到私有仓库依赖的插件-->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-deploy-plugin</artifactId>
          <configuration>
            <skip>true</skip>
          </configuration>
        </plugin>
      </plugins>
    </build>
    

    配置distributionManagement

    在项目的pom.xml中配置distributionManagement

    <!--发布到私有仓库的配置-->
    <distributionManagement>
      <repository>
        <id>nexus-releases</id>
        <name>nexus releases</name>
        <url>http://0.0.0.0:8081/repository/maven-releases/</url>
      </repository>
      <snapshotRepository>
        <id>nexus-snapshots</id>
        <name>nexus snapshots</name>
        <url>http://0.0.0.0:8081/repository/maven-snapshots/</url>
        <uniqueVersion>false</uniqueVersion>
        <layout>legacy</layout>
      </snapshotRepository>
    </distributionManagement>
    

    其中repository.id指~/.m2/settings.xml中配置的server.id, 这两个是同一个概念,值要一致。

    • 运行pom.xml所在目录 运行发布命令
    mvn clean deploy -Dmaven.test.skip=true
    

    六、指定使用私有仓库下载maven依赖

    有两种方式,建议使用第二种方式

    pom.xml文件中配置

    在需要引用构件的项目中添加repository配置

    <!--在项目中指定使用私有仓库或者在~/.m2/settings.xml配置全局的mirror-->
    <repositories>
      <repository>
        <id>nexus-ielong</id>
        <name>ielong Nexus Repository</name>
        <url>http://0.0.0.0:18081/repository/maven-public/</url>
      </repository>
    </repositories>
    

    maven中的settings配置

    在~/.m2/settings中指定mirror

        <mirrors>
            <!--不再使用aliyun的镜像-->
            <!--<mirror>
                <id>nexus-aliyun</id>
                <name>Nexus aliyun</name>
                <url>http://maven.aliyun.com/nexus/content/groups/public</url>
                <mirrorOf>central</mirrorOf>
            </mirror>-->
            <!--使用自己的私有镜像-->
            <mirror>
                <id>nexus-ielong</id>
                <name>nexus public group</name>
                <url>http://0.0.0.0:8081/repository/maven-public/</url>
                <mirrorof>*</mirrorof>
            </mirror>
        </mirrors>
    

    相关文章

      网友评论

          本文标题:19、DockerComprose-安装nexus3

          本文链接:https://www.haomeiwen.com/subject/cojbmctx.html