简单快速部署nexus3私服
本文适用范围:用户规模不大,不需要考虑maven仓库负载均衡的群体。
为何部署nexus3
之前由于懒某些原因,所有开发人员自己定义.m2的settings,大多使用ali提供的maven仓库,但是最近发现这样做有一定的问题:
1、有几天aliyun的服务不大稳定,不管是maven仓库还是alidns都连不上;
2、如果换回maven central下载jar包会偏慢;
3、即使aliyun服务稳定,但是有些jar包没有,如果单纯把本地central改为aliyun服务会导致有些pom文件中的依赖下载不了;
当然,上述3点其实也还好,毕竟换回central只是慢了点而已- -虽然是每个人都慢了点。
但是最近有个需求还挺明显的:我们这有一些自己编写自己用的基础库,这类基础库还会经常更新,现在有个工程需要引用这些包。把jar包加到新工程并用git同步的话每次更新都要打jar包并且拷到新工程下,不好区分jar包版本,其次是如果使用windows的eclipse开发工程,更新jar包会出问题,eclipse打开时会把依赖的jar打开,此时更新jar包会失败。而且失败后有时会出现奇怪的git问题。
所以决定部署nexus3,优点很明显,通过统一的本地服务器下载jar包,多人开发不会重复下载,一是降低central压力二是节约下载jar包时间;服务稳定,自己的服务器总不能说连不上就连不上了,就算外网崩了只要服务器上有jar包maven服务就依旧可用;可以自定义jar包了!不用每次还得把自己的基础库pom文件内容拷贝到新工程了,引用自己的基础库dependencies里就会把依赖的所有jar包都加进来,而且不用担心windows用eclipse开发git同步代码时报错。
超快速部署nexus3
emmmmm.....思考了一下,直接拉docker镜像显而易见是最简单的部署方式,性能足够,不会修改本地环境,并且这样做还有一个好处是如果以后需要进行负载均衡可以较为方便的迁移到k8s上。那么开始:
dockerhub官方镜像:https://hub.docker.com/r/sonatype/nexus3/
拉取命令:
见https://www.cnblogs.com/gaoze/p/10784961.html,此镜像在我这里被植入了挖矿程序,本人从来未exec -it或者使用其他命令修改此镜像创建的container,只是从mvn repositories中加入了热门的仓库站,并添加了个用户,这样还出问题很难相信不是image的问题。现在建议通过本博客提供的自建image方式自己创建maven仓库。
执行命令:
$ docker volume create --name nexus-data $ docker run -d -p 8081:8081 --name nexus -v nexus-data:/nexus-data my-nexus3
等待10分钟,部署完成!
事实证明,通过官方下载的tar包部署的nexus3私服根本不需要这么久时间进行部署,仅仅需要约半分钟即可部署完成,系统启动状态可以通过docker logs containerID来查看,官方提供的版本约半分钟即可started。
解释与说明
上面确实是部署完成了,但是总要说一下注意事项和为什么这样就部署完成了:
首先拉个镜像回来,然后我们创建了一个volume,这个相当于底层存储,这样做的好处是即使我们的nexus container某些原因坏掉了,但是我们的的底层数据:如曾经下过的jar包和pom文件,nexus组件升级补丁啥都都还在。重新用image创建一个container继续挂载在此文件夹下就ok了。
然后说为啥要等个10分钟,这是有原因的,nexus启动后会检测nexus component版本,然后进行升级,在升级过程中如果被打断会出bug,例如我自己部署的时候习惯先不加-d(总觉得并不能一次部署成功),等了几分钟看差不多时ctrl+c打断掉再创建一个-d的container正式运行,但是由于我们存储挂载在volume上的,未完成的升级也在那个文件夹下,所以部署的时候还是会报错,找了好久问题发现应该删掉volume重新建一个空白的,加载空白volume就一切正常了。
nexus3配置
这步其实还挺重要的,我们一点一点来看,首先登陆系统界面:IP:8081,点击上面的设置按钮(那个齿轮)
点击repositories
可以看到这是我的一个仓库页面,里面除了一些默认的仓库以外,额外添加了许多新仓库:
先说本地仓库:
maven-releases:管理本地jar包的东西,release版,需要上传自己的jar包时release上传到这个仓库。
maven-snapshots:管理本地jar包的东西,snapshot版,需要上传自己的jar包时snapshot上传到这个仓库。
maven-public:可以用来整合多个仓库源,在.m2/中的settings可以把central源设置成这个玩意。
maven-central:看起来是central其实并不是我们常用的那个central,所以我又加了一个central源代表真正的central。
知道这几个默认仓库有啥用了并不能真正进行使用,我们还需要加入其他源,不然有些jar包找不到,照着下面设置就行,version policy不知道选啥就用release,需要用snapshot选mixed:
至于加入哪些源,建议把如下都加上,如果觉得再加个国内的那就再加个ali的:
然后选择maven-public,在里面的group项内把创建好的所有源都拖到group里,然后看心情调整一下顺序就可以了。访问时在.m2/文件中把central源改为public这个即可,如:
<mirrors> <mirror> <id>nexus</id> <name>private maven</name> <url>http://192.168.xxx.xxx:18081/repository/maven-public/</url> <mirrorOf>*</mirrorOf> </mirror> </mirrors>