CentOs7下的maven私服搭建 Nexus 3.x
经理说,最近我们自己封装的包有点多,程序与程序之间的依赖关系也多起来了,还要使用盛趣游戏那边封装的jar包,之前新建项目都是把自己的封装包放到项目下新建的一个文件夹libs下面使用的。
虽然我们两个部门java开发加起来才6个人,但是搭一个私服也成了迟早的需求,所以最近正好手头不紧,搭一个maven私服顺便写一下笔记,出个教程。
1.下载Nexus
到官网下载
https://www.sonatype.com/products/repository-oss-download
点进去之后输入邮箱,选择no(您的组织当前是否使用连结存储库?)
选择UNIX版本的下载
按提示所说,如果没有提示下载,点一下就好了
这边给网差的小伙伴们提供一个百度云盘的下载链接,我已经把3.30.1.01的最新版本下载好了并且上传上去了。
链接:https://pan.baidu.com/s/1YEzKUw89Dx4B4G5F8WHmrw
提取码:etvw
复制这段内容后打开百度网盘手机App,操作更方便哦
2.安装并配置Nexus
把安装包上传到你需要的目录下,我们的软件一般安装在opt/app/下面所以我把安装包通过xftp上传到虚拟机直接开始解压
tar -xvf nexus-3.30.1-01-unix.tar.gz
修改…opt/app/nexus-3.30.1-01/etc/nexus-default.properties
配置文件:
进入配置文件所在目录并且修改端口号和host地址
cd /opt/app/nexus-3.30.1-01/etc
vi nexus-default.properties
application-port=8848
application-host=0.0.0.0
端口你们可以任意修改,只要确认不被占用即可,host尽量使用0.0.0.0,这个可以不用对外暴露,默认对外可访问
启动和停止
首先需要进入nexus的bin目录
cd /opt/app/nexus-3.30.1-01/bin
后台启动不显示日志
./nexus start
后台启动显示日志
./nexus run &
停止服务
./nexus stop
启动的时候出现的告警无所谓的,提示你不建议root用户启动,影响不大
启动成功开始访问
直接使用刚才的host+port就可以访问web管理界面了
点击右上角的sign in使用内置账号登陆,刚部署的nexus一般有一个初始账号admin,可以输入admin随意输入密码,然后看提示告诉你admin的密码在哪个文件里面
打开密码文件把密码复制出来
登陆进去之后,根据提示修改密码
然后我勾选了允许匿名访问,犹豫我们公司的服务基本都在内网,外部需要vpn才能访问,所以我允许了匿名访问
虚拟机里面配置比较麻烦,这边我们直接把端口暴露出来,在主机上配置
查询8848端口是否打开
firewall-cmd --query-port=8848/tcp
打开8848端口
firewall-cmd --add-port=8848/tcp --permanent
重新加载端口配置
firewall-cmd --reload
这边可以看到一开始查询8848端口的时候显示的是no未打开,打开然后重启后,再次查询显示yes已打开
这时候我们可以在主机上通过ip+host访问nexus的web服务
可以看到这下面几个是nexus的默认仓库
介绍一下默认的仓库
maven-central: 代理中央仓库、策略为Release、只会下载和缓存中央仓库中的发布版本构件。
maven-releases: 策略为Release的宿主仓库、用来部署组织内部的发布版本内容。
maven-snapshots: 策略为Snapshot的宿主仓库、用来部署组织内部的快照版本内容。
3.创建一个阿里云代理镜像仓库
点击设置,点击Repositories然后点击Create repository
选择maven2(proxy)
修改响应配置并贴入阿里云远程仓库地址
阿里云仓库地址 : http://maven.aliyun.com/nexus/content/groups/public/
这边我为了方便看谷歌浏览器一键翻译了一下。其余配置默认就好了,拉倒最下面点击建立存储库。
修改maven-releases 仓库配置,修改为allow redeploy
这个选项有三个值,我们选权限最高的
Deployment pollcy
Read-only: 只读
Disable redeploy: 读和部署
Allow redeploy: 读, 部署, 删除
4.添加自己的私人仓库
这里我没有选择镜像,选择的是hosted,反正也是本地上传的jar包
5.配置镜像地址
在仓库中找到maven-central
点进去配置一个阿里云的镜像地址,阿里云仓库镜像地址 http://maven.aliyun.com/nexus/content/groups/public/
如果上面你已经单独创建过阿里云镜像仓库,可以忽略这个配置,但也可以双重配置,
最后把这些仓库都交给public管理,可以吧新建的仓库也加到public里面,public会集中管理这些库,导包的时候连接public即可
到本地maven下找到settings文件复制一份改名为setting然后修改内容
<?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>D:\Local_Repository</localRepository>
<servers>
<server>
<id>maven-public</id>
<username>你的用户名</username>
<password>你的密码</password>
</server>
<server>
<id>releases</id>
<username>你的用户名</username>
<password>你的密码</password>
</server>
<server>
<id>snapshots</id>
<username>你的用户名</username>
<password>你的密码</password>
</server>
</servers>
<mirrors>
<mirror>
<id>maven-public</id>
<name>public repository</name>
<url>https://maven.aidolphin.com/repository/maven-public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<profiles>
<profile>
<!--ID用来确定该profile的唯一标识-->
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
<profile>
<id>nexus-aidolphin</id>
<!-- 远程仓库列表 -->
<repositories>
<repository>
<id>maven-public</id>
<name>maven-public</name>
<!-- 虚拟的URL形式,指向镜像的URL-->
<url>https://maven.aidolphin.com/repository/maven-public/</url>
<layout>default</layout>
<!-- 表示可以从这个仓库下载releases版本的构件-->
<releases>
<enabled>true</enabled>
</releases>
<!-- 表示可以从这个仓库下载snapshot版本的构件 -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<!--需要激活 <profile>中的ID才生效-->
<activeProfile>nexus-aidolphin</activeProfile>
<activeProfile>jdk-1.8</activeProfile>
</activeProfiles>
</settings>
新建一个maven项目测试一下,新建项目后打开设置手动把settings文件指定到我们做好的新的
在项目的pom文件中无需额外添加多余配置
6.上传jar
然后我们在使用Upload上传一个jar包试试看能不能同步到本地仓库
按顺序打开上传配置后填入一下信息
点击Browse找到本地需要上传的jar包
然后随便填一下GroupID ArtifactID 以及Versio
下面的按钮勾选上,如果不勾选可能会在pom文件下载包的时候出现version爆红的可能!!!
上传完成之后就在仓库里了
然后我们尝试在新项目中拉取这个通过maven拉取这个jar包
选中这个包,查看生成的私服依赖
把依赖粘贴进自己的pom文件即可实现私服拉包了
可以看到项目中是没有包的,依赖也是爆红的,右键点击,菜单中选择maven,选择Reload project。Reload成功之后可以看到包成功导到本地项目上了。
7.添加角色和用户
为什么不能直接所有人都用admin账户呢?admin的账户密码要配置在settings文件中,这是开发者大忌,权限这一块必须得拿捏的死死地,大家用的话,只能用一个新开的小角色账户,不能上传不能更改,只能读,最高权限账户肯定是交给经理来使用的。
点击设置,找到Security(权限),点击Roles(角色),点击Create按钮开始新建角色并配置,根据自己需求添加ID,角色名称,以及角色描述。
可以再搜索栏搜索read,代表只读权限,然后选中之后往右添加到Given。
然后点击添加,之后可以看到,刚刚添加的角色已经出现了
然后再添加用户,按照下图操作即可。
查看到已经添加完成的用户。
用另一个浏览器试试看这个用户能否登陆,确认是可以登陆的,几个授权的仓库也看得见的
接下测试一下,在刚才新建的项目里面测试,先修改settings文件,把servers里面的用户名和密码替换成,新建的用户和密码
<servers>
<server>
<id>maven-public</id>
<username>你的用户名</username>
<password>你的密码</password>
</server>
<server>
<id>releases</id>
<username>你的用户名</username>
<password>你的密码</password>
</server>
<server>
<id>snapshots</id>
<username>你的用户名</username>
<password>你的密码</password>
</server>
</servers>
替换完成后保存,然后再找到本地库中的刚才那个包全部删掉,我的settings中配置的本地仓库为D盘下的Local_Repository,找到刚才下的包,整个文件夹删掉
删完之后,回到项目,把刚才的依赖注释掉然后maven ,Reload一下,再解开注释重新Reload一下发现,包又下载回来了,看看本地文件夹发现也下载回来了说明用户和角色创建的没有什么问题的。
为了测试严禁,我又上传了一个jar包。一起倒入本地。事实证明没有任何问题!!!哈哈哈哈哈
8.仓库迁移
nexus的默认仓库是需要迁移的,为什么需要迁移呢?仓库里存在es索引文件,学过es的都知道,es使用索引加快了搜索速度,但是索引文件会变大,后续这个私服仓库存储的包会越来越多,索引也会越来越大,磁盘满了怎么?所以为了不影响系统使用,仓库肯定是需要迁移的。以及配上定时清理任务。3.30版本官方已经自动配置了一个默认的定时清理任务,会把你长时间不使用的包清理掉。所以我们只需要手动仓库迁移就好了。
在网上找了半天,一堆博客基本都是七八年前写的博客,让修改的配置文件,我根据路径去找根本不一样,毕竟我使用的是3.30版本的,
最后在官网上坎官方文档,一分钟就解决问题了。还真的就是一句话,官方文档真的比百度好用多了。
解压Nexus安装包的时候附带的一个sonatype-work就是工作空间了
把他复制粘贴到你需要的目录,例如我把他放到了/opt/repository下面,然后删掉原来的那个(因为xft不支持剪切粘贴)
然后打开nexus文件下面的bin目录下的nexus.vmoptions
在这四行前面加上工作空间所在的绝对目录即可,
-XX:LogFile=/opt/repository/sonatype-work/nexus3/log/jvm.log
-Dkaraf.data=/opt/repository/sonatype-work/nexus3
-Dkaraf.log=/opt/repository/sonatype-work/nexus3/log
-Djava.io.tmpdir=/opt/repository/sonatype-work/nexus3/tmp
重启一下nexus服务即可!
我在自己的虚拟机上和阿里云服务器上都已经验证过是没有问题的重启完记得刷新原始站点 例如localhost:8848访问服务的首页!!!
9.结束
到此nexus的部署和测试以及创建用户加权限的步骤都展示完成了,如果有不明白的小伙伴们可以给我留言。一起探讨一下私服maven的问题。