Nexus3安装及配置

Nexus3是一个仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。

平常我们在获取maven仓库资源的时候,都是从maven的官方(或者国内的镜像)获取,但是这都不是最好的方案,即使在使用国内的奖项,假如在同一个环境内,一个团队的多个开发人员同样的依赖都要从远程获取一遍,从网络方面来说,这是非常耗时的。这时候就需要在局域网内部署一个Nexus用来管理Maven(apt、yum、gradle、pypi、docker等等)仓库。

Nexus支持:

  • Nexus在代理远程仓库的同时维护本地仓库,以降低中央仓库的负荷,节省外网带宽和时间,Nexus私服就可以满足这样的需要。
  • Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。
  • Nexus使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,通过m2eclipse与Eclipse集成使用。
  • Nexus支持WebDAV与LDAP安全身份认证。
  • exus还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。
  • ...

使用Nexus的好处:

  • 节省宽带
  • 加速构建
  • 节省中央maven仓库的带宽
  • 稳定
  • 控制和审计
  • 能够部署第三方依赖
  • 可以建立本地内部仓库
  • 可以建立公共仓库
  • ...

Nexus参考资料:

一、Nexus的安装

为了便捷,我这里直接使用Docker-Compose的方式进行安装(docker的安装本文不做介绍)

1.1 创建docker-compose.yml

version: '3.2'

services:
  nexus3:
    image: sonatype/nexus3
    container_name: nexus3
    ports:
      - 19921:8081
    volumes:
      - /datahub/nexus3_data:/nexus-data

把服务器的文件映射到本地,使其可以持久化使用。

这里我修改了映射出来的端口,根据需要自行修改即可。

1.2 启动nexus

使用docker-compose up -d启用nexus,启动完成后,我们可以访问其环境。

https://mirrors.ruoxisoft.org (我这里使用nginx反代了本地的19921端口)

用户名是admin,密码在/datahub/nexus3_data/admin.password里面。

默认情况下已经配置好了Maven

标红框的为默认存在

二、添加Gradle代理

默认情况maven无法代理gradle,我们需要添加gradle代理,然后再添加到maven的maven-public里面,这样我们使用maven-public的时候就会自动代理。gradle了。

2.1 添加gradle代理

Repository->Repositories->Create repository->选择Maven2(proxy)

然后输入name和remote storage,即输入名字和远程仓库地址,gradle的远程仓库地址为https://jcenter.bintray.com

2.2 然后把配置好的jcenter-central添加到maven-public里面

双击进入maven-public

选中jcenter-central点击右箭头添加到members里面

添加完成,保存即可。

这样,以后再配置gradle的时候就直接写maven-public就可以了。

三、添加NPM代理

3.1 创建NPM Proxy

Repository->Repositories->Create repository->选择npm(proxy)

代理地址为:https://registry.npmjs.org/

输入name和remote-storage

其实这个时候如果我们不添加私有代码相关内容,这个时候已经可以了,可以直接跳转到本小节的最后一步,下面的步骤可选。

3.2 创建npm-releasesnpm-snapshots

Repository->Repositories->Create repository->选择npm(hosted)

输入名字后,直接保存即可。

创建这两个的方法都是一样的,这里不进行多次重复演示了。但是需要注意一点,如下图:

如果是需要上传的话,这个地方要选择第一个allow redeploy否则是没有办法上传私有依赖的。

四、example、修改仓库示例

Maven仓库修改示例

修改~/.m2/setting.xml<mirrors>...</mirrors> 中添加如下内容

<mirror>
    <id>ruoxisoft</id>
    <mirrorOf>*</mirrorOf>
    <name>RuoxiSoft</name>
    <url>https://mirrors.ruoxisoft.org/repository/maven-public/</url>
</mirror>

Gradle仓库修改示例

编辑~/.gradle/init.gradle修改为如下内容

gradle.projectsLoaded {
    rootProject.allprojects {
        buildscript {
            repositories {
                def REPOSITORY_URL = 'https://mirrors.ruoxisoft.org/repository/maven-public/'
                all { ArtifactRepository repo ->
                    if (repo instanceof MavenArtifactRepository) {
                        def url = repo.url.toString()
                        if (url.startsWith('https://repo1.maven.org/maven2/')
                            || url.startsWith('https://jcenter.bintray.com/')) {
                            project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
                            println("buildscript ${repo.url} replaced by $REPOSITORY_URL.")
                            remove repo
                        }
                    }
                }
                jcenter {
                    url REPOSITORY_URL
                }
                maven{
                    url REPOSITORY_URL
                }
            }
        }
        repositories {
            def REPOSITORY_URL = 'https://mirrors.ruoxisoft.org/repository/maven-public/'
            all { ArtifactRepository repo ->
                if (repo instanceof MavenArtifactRepository) {
                    def url = repo.url.toString()
                    if (url.startsWith('https://repo1.maven.org/maven2/')
                        || url.startsWith('https://jcenter.bintray.com/')) {
                        project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
                        println("allprojects ${repo.url} replaced by $REPOSITORY_URL.")
                        remove repo
                    }
                }
            }
            jcenter {
                url REPOSITORY_URL
            }
            maven{
                url REPOSITORY_URL
            }
        }
    }
}

NPM仓库修改示例

编辑文件~/.npmrc添加如下内容

registry=https://mirrors.ruoxisoft.org/repository/npm-public/

Pypi仓库修改示例

编辑文件~/.pip/pip.conf添加如下内容

[global]
index = https://mirrors.ruoxisoft.org/repository/pypi-public/pypi
index-url = https://mirrors.ruoxisoft.org/repository/pypi-public/simple
trusted-host = mirrors.ruoxisoft.org

标签: nexus, Nexus3