Docker搭建Nexus私有仓库

最近项目开发中需要对一些jar包进行修改,但是因为项目组当前没有私有的Maven镜像仓库,所以自己想搭建一个我们项目组专用的私有镜像服务器。网上看了一些资料好像使用Nexus比较多,所以自己也准备自己使用Nexus搭建一个Maven私服。
相关的资料文档建议查看官网。
Nexus下载地址
根据自己的系统进行下载即可,Linux系统选择Unix archive版本即可。
最开始我本来想在自己的电脑上先安装一个尝试一下,结果下载过程中发现下载速度真的是特别的慢,所以最后决定选择使用Docker进行部署。

1、拉取镜像

首先查找下Nexus相关的仓库

docker search nexus3

结果如下:

NAME                                  DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
sonatype/nexus3                       Sonatype Nexus Repository Manager 3             868                                     
shifudao/nexus3                       clone from nexus3 image but based from openj…   4                                       [OK]
madmuffin/nexus3                      Sonatype Nexus3 Milestone7 docker image         2                                       [OK]
home1oss/nexus3                       An auto configured nexus3                       2                                       [OK]
alvindaiyan/nexus3-azure-appservice                                                   1                                       
cirepo/nexus3                         An auto configured nexus3                       1                                       [OK]
....
                          

这里选择官方的仓库。拉取镜像到本地:

docker pull sonatype/nexus3

如果拉取速度较慢可选择使用国内的Docker镜像源仓库,修改Docker配置daemon.json

vi /etc/docker/daemon.json
### 添加配置
"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"],
"data-root": "/home/ypcfly/docker/data"

另外这里我也修改了Docker的数据根目录。

2、运行Nexus

docker run -d -p 8081:8081 --name nexus3 -e NEXUS_CONTEXT=nexus   sonatype/nexus3

因为是第一次启动,所以没有做什么特别的配置,也没有挂在目录。
启动之后我们查看启动日志:

docker logs -f nexus3

第一次启动可能会比较慢一点,启动的时候最好不要限制内存,如果限制的话内存最好大一点,比如2G,内存偏小也会导致启动失败。
看到下面内容,说明Nexus启动成功:

.......
-------------------------------------------------

Started Sonatype Nexus OSS 3.27.0-03

-------------------------------------------------

3、访问Nexus并创建仓库

默认端口是8081,我们在运行时进行的端口映射也是8081,所以直接在浏览器访问:
localhost:8081
结果发现404,有点蒙了,启动日志没有问题啊,端口也没问题.....后来在看启动命令-e NEXUS_CONTEXT=nexus,发现自己添加了上下文。添加访问上下文nexus,再次在浏览器输入:
localhost:8081/nexus
浏览器显示如下图:

图-1.png

点击右上角Sign in登陆,默认账号admin,我网上之前看到有的文章说默认密码是admin123,但是自己尝试之后发现密码错误,所以又看了官方文档。官方文档说的是:

Its username is admin and the initial password can be found in an admin.password file in the $data-dirdirectory. You can sign in with the button on the top right corner of the user interface.

意思是说默认密码是在数据目录下的admin.password中,但是因为自己启动时没有进行目录挂载,所以只能进入容器内进行查找:

$ docker exec -it  nexus3   sh
## 进入`nexus-data`
$ cd nexus-data
$ ls
$ vi admin.password
## 复制密码后退出容器
$ exit

进入容器内找到了nexus-data目录,然后找到admin.password,重新输入密码后,登录成功,然后会提示设置访问权限:

图-2.png

也就是是否允许匿名访问,根据情况选择就可以了。
为了方便登录我们再创建一个用户,点击Security -> Users -> Create User
输入相关信息,并赋予该用户管理员的权限:
图-3.png


接下来我们创建一个自己的仓库:
点击 Repository -> Repositories -> Create repository

图-4.png

这时候可以看到很多不同类型的仓库,比如apt、docker、maven2、yum、go、helm等等。这里需要介绍一下repository的几种类型:

hosted,本地仓库,一般情况我们会部署的都是这一类型的仓库。比如自己公司的私有仓库。
proxy,代理仓库,顾名思义,它们被用来代理远程的公共仓库,如maven中央仓库。
group,仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。

所以我这里选择maven2(hosted)
输入仓库名称:ypc,然后根据自己的情况选择Version policyDeployment policy等,保存之后就看到自己的仓库已经出现了

图-5.png

创建好之后我们就可以将自己的一些jar包等推送到自己的镜像仓库了。

4、测试发布jar到仓库

既然创建好了我们的私有仓库,那么我们就要测试一下,能否将我们的jar推送到我们的Maven私服。首先我们需要创建一个项目,为了方便我就打开了一个之前的spring boot项目,准备用这个项目做试验。开始之前先看下我的pom.xml中这个项目的坐标信息:

...
    com.ypc.rocketmq
    rocketmq-starter
    1.0-RELEASE
    rocketmq
    test rocketmq starter
    jar
...

关于坐标的作用我想不需要我再做解释了吧,简单点说就是一个jar包的地址,就是用来定位jar包。
为了将我们打的jar包推送到我们私有仓库,需要修改项目的pom.xml文件,添加自己私有仓库的相关信息,如下:


    ......
    
    
        
            release
            Release
            http://localhost:8081/nexus/repository/ypc/
        
        
            snapshot
            Snapshot
            http://localhost:8081/nexus/repository/ypc/
        
    

在这里配置了一个release和一个snapshot两个仓库,一个用来发布正式的jar,一个发布测试jar。idname属性根据自己的需求填写就行了,url就是仓库ypc的地址,可以直接从浏览器复制。
但是毕竟项目的打包、发布都是需要使用Maven的,所以接下来我们需要修改Maven的配置文件,即setting.xmlMaven配置文件中需要配置的地方相对较多,这里一步一步来说明。
首先,添加访问server配置,即我们访问Maven私服仓库时的信息,比如用户名、密码或者私钥。这里配置的id需要和上面pom.xml中的id保持一致,用户名和密码根据自己的情况进行填写,admin的密码登录之后我是做了修改的。


....
    
      release
      admin
      admin123456
    
    
      snapshot
      admin
      admin123456
       
....

其次,我们需要配置镜像信息,也就是私有仓库的镜像地址,下面的配置中我添加了一个镜像配置,并且覆盖了默认的仓库地址。在配置文件这里,添加了一个反而idnexus,在该配置文件中我配置了一个repository和一个pluginRepository两个仓库,不过都指向的是同一个URL


....
    
       central
       *
       http://localhost:8081/nexus/repository/ypc/
    

  
    
      nexus
      
      
      
        
          release
          http://localhost:8081/nexus/repository/ypc/
          true
          true
        
      
     
        
          snapshot
          http://localhost:8081/nexus/repository/ypc/
          true
          true
        
      
    

  

  
  
    nexus
  
...

到这里需要添加或者修改的配置到这里就完成了,接下来我们测试一下把我们的项目打包,并发布发到我们的镜像仓库,因为idea自带了相关的插件,所以我就直接使用插件了(命令我也记不住...),直接点击deploy,然后会看到相关的日志信息,下面是部分截图

图-6.png

可以看到有上传到release仓库的相关信息。
最后我们在登录到仓库看一下上传的jar包信息:
图-7.png

根据上图的信息也可以看出我们的jar包已经成功发布到我们的私有镜像仓库了。关于从私有镜像仓库下载jar包其实和从Maven中央仓库下载没有什么区别,这里就不再测试了。
关于使用Docker搭建Nexus私有Maven镜像仓库,以及发布jar包到Nexus就到这里了,总体来看还是比较简单的,感兴趣的小伙伴不妨都尝试一下。

你可能感兴趣的:(Docker搭建Nexus私有仓库)