Sonatype Nexus Maven仓库搭建和管理
安装
1. 从 http://www.sonatype.org/nexus/ 下载最新的 Nexus 压缩包, 现在已经不提供war包的下载
2. 解压到服务器目录, 例如我是放到/opt/nexus 目录下, 如果不打算用root用户启动服务, chown到相应的用户
注: 如果有点强迫症, 不想chown整个目录, 至少要chown以下目录的权限:
/opt/nexus/sonatype-work/nexus /opt/nexus/nexus-2.11.1-01/logs /opt/nexus/nexus-2.11.1-01/tmp /opt/nexus/nexus-2.11.1-01/bin/jsw
3. 更改Nexus的运行JDK
原服务器上的JDK是1.6, 运行会出 Unsupported major.minor version 51.0 错误, 需要更改运行Nexus的JDK 为 1.7
By default Nexus will pick up whatever java executable is on the path. You can change this by editing $NEXUS_HOME/bin/jsw/conf/wrapper.conf and setting the "wrapper.java.command" property to the absolute path of your java executable.
所以, 要修改的是 $NEXUS_HOME/bin/jsw/conf/wrapper.conf, 我直接改成jdk1.8了
# Set the JVM executable # (modify this to absolute path if you need a Java that is not on the OS path) wrapper.java.command=/opt/jdk1.8.0_40/bin/java
4. 用默认管理员 admin/admin123登录, 修改密码
5. 点击左边的 Repositories, 在列出的仓库列表中, 将所有proxy类型的仓库Configuration-> 都设为True并保存, 下载Central Index. 因为网络问题, 默认的 https://repo1.maven.org/maven2/ 连不上, 可以通过 http://docs.codehaus.org/display/MAVENUSER/Mirrors+Repositories 查找可用的 mirror.
https://repository.jboss.org/maven2/ 这个版本号比较旧, 建议不要用
http://maven.antelink.com/content/repositories/central/ 和 http://mirrors.ibiblio.org/pub/mirrors/maven2 都不错
需要等待一段时间, 可以通过tail -f nexus/nexus-2.11.1/logs/wrapper.log 查看执行情况以及出错时的错误信息, 完成后就可以在Browse Index里看到目录了.
Nexus 的权限管理
http://www.open-open.com/lib/view/open1395239156009.html
在部署构件到Nexus上的时候我们注意到配置一个验证信息,那么,Nexus的权限管理是怎么样的呢?我们又怎么合理地分配权限呢?
Nexus是基于权限做访问控制的,服务器的每一个资源都有对应的权限来控制,因此用户执行特定的操作时就必须拥有必要的权限。管理员必须以角色的方式将权限赋予Nexus用户。用户可以被赋予一个或者多个角色,角色可以包含一个或多个权限,角色还可以包含一个或者多个其他角色。
Nexus上预定义了三个用户,用admin登录后,单击页面左边的User链接
admin:该用户拥有Nexus的全部权限,默认密码为admin123。
deployment:该用户能够访问Nexus,浏览仓库内容、搜索、上传部署构件,但是不能对Nexus进行任何配置,默认密码为deployment123。
anonymous:该用户对应了所有未登录的匿名用户,它们可以浏览仓库并进行搜索。
Nexus预定义了一些常用且重要的角色,如:
UI:Basic UI Privileges:包含了访问Nexus界面必须的最基本的权限。
UI:Repository Browser:包含了浏览仓库页面所需要的权限。
UI:Search:包含了访问快速搜索栏及搜索界面所需要的权限。
Repo:All Repositories (Read):给予用户读取所有仓库内容的权限。没有仓库的读权限用户将无法再仓库页面看到实际的仓库内容,也无法使用Maven从仓库下载构件。
Repo:All Repositories (Full Control):给予用户完全控制所有仓库内容的权限。用户不仅可以浏览、下载构件,还可以部署构件及删除仓库内容。
为项目分配独立的仓库
如果我们将所有项目的快照版本和发布版本构件都部署到同样的仓库,就有潜在的冲突以及安全问题。我们不想让项目A的部署影响到项目B,也不想让项目 B的部署影响到项目A,那么解决方法就是为每个项目分配独立的仓库,并且只将仓库的部署、修改和删除权限赋予该项目的成员,其他用户只能拥有读取、下载和 搜索该仓库内容的权限。步骤如下:
1、创建项目库
单击Nexus界面左边导航栏中的Repositories链接,在右边的面板中选择Add,在下拉菜单中选择Hosted Repository。接着在下面的面板中填写仓库的ID和名称,选择Repository Policy为Release,选择Deployment Policy为Allow Redeploy,其他的选项默认。点击Save按钮。
2、创建权限
有了仓库以后,就需要创建基于仓库的增、删、查、改权限了。Nexus中增删查改的权限是基于Repository Target建立的。单击Nexus界面导航栏中的Repository Targets链接,可以看到Repository Target的相关信息。
点击页面导航栏中“Security”->“Privileges”->单击Add按钮,选择“Repository Target Privilege”。如图4填写相关内容, Repository选取刚创建的repository, Repository Target选取All(Maven2)
点击“Save”后就能在列表中看到相应的增、删、改、读, View权限。
3、创建角色
如果我们创建一个包含上述权限的角色的话就能更方便管理了。创建角色步骤如下:
从导航的“Roles”链接进入角色界面,单击上方的“Add按钮”选择“Nexus Role”。填写相关内容,并将fooReleases项目分配给角色。填写相关信息, 选取刚才创建的5个Privileges
4、创建用户
点击导航的“Users”链接,进入用户界面,然后单击“Add”按钮并选择“Nexus User”。填写相关内容。并授予用户角色信息。要同时授予Nexus Deployment Role 和刚才创建的Role
项目中引入私有的Repository
如果某个repository没有被加入到public, 是不能公开访问的, 这时候需要做一些设置才能让项目访问
1. 在pom.xml中加入对应的repository
<repositories> <repository> <id>some-release</id> <url>http://nexus.some.cn/content/repositories/releases/</url> </repository> <repository> <id>some-snapshots</id> <url>http://nexus.some.cn/content/repositories/snapshots/</url> </repository> </repositories>
2. 在Maven 的配置文件 settings.xml 中加入server
在<servers>...</servers>之间加入
<server> <id>some-release</id> <username>milton</username> <password>passwd</password> </server> <server> <id>some-snapshots</id> <username>milton</username> <password>passwd</password> </server>
然后reimport项目就可以了.
Nexus的调度任务
Nexus提供了一系列可配置的调度任务来方便用户管理系统。用户可以设定这些任务运行的方式,例如每天、每周等。调度任务会在适当的时候在后台运行。
要建立一个调度任务,单击左边导航菜单中的“Scheduled Tasks”,然后再右边的界面上单击Add按钮,按照页面上的提示填写相关内容。
Nexus包含了以下几种类型的调度任务:
o Download Indexs:为代理仓库下载远程索引。
o Empty Trash:清空Nexus的回收站,一些操作实际是将文件移到了回收站中。
o Evict Unused Proxied Items From Repository Caches:删除代理仓库中长期未被使用的构件缓存。
o Expire Repository Cache:Nexus为代理仓库维护了远程仓库的信息以避免不必要的网络流量,该任务清空这些信息以强制Nexus去重新获取远程仓库的信息。
o Publish Indexs:将仓库索引发布成可供m2eclipse和其他Nexus使用的格式。
o Purge Nexus Timeline:删除Nexus的时间线文件,该文件用于建立系统的RSS源。
o Rebuild Maven Metadata Files:基于仓库内容重新创建仓库元数据文件maven-metadata.xml,同时重新创建每个文件的校验和md5与sha1。
o ReIndex Repositories:为仓库编纂索引。
o Remove Snapshots From Repositories:以可配置的方式删除仓库的快照构件。
o Synchronize Shadow Repository:同步虚拟仓库的内容(服务基于Maven1)。
Update 2020-11-17 Nexus 3.28 安装
从 https://www.sonatype.com/nexus/repository-oss 下载开源版本, 与JDK8一起解压缩到 /opt 下, nexus的两个目录放到 /opt/nexus, jdk放到 /opt/jdk
1. 修改JAVA路径
这个和nexus2不一样了, 修改 /opt/nexus/nexus-3.28.1-01/bin/nexus 中的这行, 指向解压好的JDK
# Uncomment the following line to override the JVM search sequence INSTALL4J_JAVA_HOME_OVERRIDE=/opt/jdk/jdk1.8.0_261
2. 修改运行服务的用户
修改 /opt/nexus/nexus-3.28.1-01/bin/nexus.rc, 本例使用的用户为tomcat
run_as_user="tomcat"
同时别忘了将数据目录的权限赋给tomcat, 在nexus3中, 数据和日志都在nexus3目录下, 只需要对nexus3目录授权就可以了
cd /opt/nexus/sonatype-work chown -R tomcat:tomcat nexus3/
3. 用tomcat用户登录后启动服务
/opt/nexus/nexus-3.28.1-01/bin/nexus start
稍等几分钟后, web访问8081端口就可以看到nexus的界面了. 登录时, 对话框会提示admin初始密码的路径.
4. 添加到systemd服务
参考 https://help.sonatype.com/repomanager3/installation/run-as-a-service#RunasaService-systemd
在/etc/systemd/system/ 下添加文件 nexus.service, 注意修改成自己的路径, 以及用户
[Unit] Description=nexus service After=network.target [Service] Type=forking LimitNOFILE=65536 ExecStart=/opt/nexus/nexus-3.28.1-01/bin/nexus start ExecStop=/opt/nexus/nexus-3.28.1-01/bin/nexus stop User=tomcat Restart=on-abort TimeoutSec=600 [Install] WantedBy=multi-user.target